MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / LDNP_fpsimd

Function LDNP_fpsimd

arch/arm64/disassembler/decode2.c:14078–14109  ·  view source on GitHub ↗

ldnp_fpsimd.xml */

Source from the content-addressed store, hash-verified

14076
14077/* ldnp_fpsimd.xml */
14078int 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 */
14112int LDNP_gen(context *ctx, Instruction *instr)

Callers 1

Calls 3

decode_fields32Function · 0.85
SignExtendFunction · 0.85
ConstrainUnpredictableFunction · 0.85

Tested by

no test coverage detected