ldnp_fpsimd.xml */
| 14076 | |
| 14077 | /* ldnp_fpsimd.xml */ |
| 14078 | int LDNP_fpsimd(context *ctx, Instruction *instr) |
| 14079 | { |
| 14080 | int rc = DECODE_STATUS_UNMATCHED; |
| 14081 | /* class iclass_signed_scaled_offset */ |
| 14082 | /* opc=xx|101|V=1|000|L=1|imm7=xxxxxxx|Rt2=xxxxx|Rn=xxxxx|Rt=xxxxx */ |
| 14083 | if((INSWORD & 0x3FC00000)==0x2C400000) { |
| 14084 | decode_fields32(ENC_LDNP_S_LDSTNAPAIR_OFFS, ctx, instr); |
| 14085 | if(ctx->opc==0) OK(ENC_LDNP_S_LDSTNAPAIR_OFFS); |
| 14086 | if(ctx->opc==1) OK(ENC_LDNP_D_LDSTNAPAIR_OFFS); |
| 14087 | if(ctx->opc==2) OK(ENC_LDNP_Q_LDSTNAPAIR_OFFS); |
| 14088 | } |
| 14089 | /* post-decode pcode */ |
| 14090 | ctx->n = UINT(ctx->Rn); |
| 14091 | ctx->t = UINT(ctx->Rt); |
| 14092 | ctx->t2 = UINT(ctx->Rt2); |
| 14093 | ctx->acctype = ctx->AccType_VECSTREAM; |
| 14094 | ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE; |
| 14095 | if(ctx->opc==3) { |
| 14096 | UNDEFINED; |
| 14097 | } |
| 14098 | ctx->scale = 2+UINT(ctx->opc); |
| 14099 | ctx->datasize = (8) << (ctx->scale); |
| 14100 | ctx->offset = LSL(SignExtend(ctx->imm7,7),ctx->scale); |
| 14101 | ctx->tag_checked = ctx->wback || ctx->n!=0x1f; |
| 14102 | ctx->rt_unknown = FALSE; |
| 14103 | if(ctx->memop==MemOp_LOAD && ctx->t==ctx->t2) { |
| 14104 | ctx->c = ConstrainUnpredictable(Unpredictable_LDPOVERLAP); |
| 14105 | // assert |
| 14106 | // switch on constraint |
| 14107 | } |
| 14108 | return rc; |
| 14109 | } |
| 14110 | |
| 14111 | /* ldnp_gen.xml */ |
| 14112 | int LDNP_gen(context *ctx, Instruction *instr) |
no test coverage detected