stnp_fpsimd.xml */
| 25330 | |
| 25331 | /* stnp_fpsimd.xml */ |
| 25332 | int STNP_fpsimd(context *ctx, Instruction *instr) |
| 25333 | { |
| 25334 | int rc = DECODE_STATUS_UNMATCHED; |
| 25335 | /* class iclass_signed_scaled_offset */ |
| 25336 | /* opc=xx|101|V=1|000|L=0|imm7=xxxxxxx|Rt2=xxxxx|Rn=xxxxx|Rt=xxxxx */ |
| 25337 | if((INSWORD & 0x3FC00000)==0x2C000000) { |
| 25338 | decode_fields32(ENC_STNP_S_LDSTNAPAIR_OFFS, ctx, instr); |
| 25339 | if(ctx->opc==0) OK(ENC_STNP_S_LDSTNAPAIR_OFFS); |
| 25340 | if(ctx->opc==1) OK(ENC_STNP_D_LDSTNAPAIR_OFFS); |
| 25341 | if(ctx->opc==2) OK(ENC_STNP_Q_LDSTNAPAIR_OFFS); |
| 25342 | } |
| 25343 | /* post-decode pcode */ |
| 25344 | ctx->n = UINT(ctx->Rn); |
| 25345 | ctx->t = UINT(ctx->Rt); |
| 25346 | ctx->t2 = UINT(ctx->Rt2); |
| 25347 | ctx->acctype = ctx->AccType_VECSTREAM; |
| 25348 | ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE; |
| 25349 | if(ctx->opc==3) { |
| 25350 | UNDEFINED; |
| 25351 | } |
| 25352 | ctx->scale = 2+UINT(ctx->opc); |
| 25353 | ctx->datasize = (8) << (ctx->scale); |
| 25354 | ctx->offset = LSL(SignExtend(ctx->imm7,7),ctx->scale); |
| 25355 | ctx->tag_checked = ctx->wback || ctx->n!=0x1f; |
| 25356 | ctx->rt_unknown = FALSE; |
| 25357 | if(ctx->memop==MemOp_LOAD && ctx->t==ctx->t2) { |
| 25358 | ctx->c = ConstrainUnpredictable(Unpredictable_LDPOVERLAP); |
| 25359 | // assert |
| 25360 | // switch on constraint |
| 25361 | } |
| 25362 | return rc; |
| 25363 | } |
| 25364 | |
| 25365 | /* stnp_gen.xml */ |
| 25366 | int STNP_gen(context *ctx, Instruction *instr) |
no test coverage detected