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

Function STNP_fpsimd

arch/arm64/disassembler/decode2.c:25332–25363  ·  view source on GitHub ↗

stnp_fpsimd.xml */

Source from the content-addressed store, hash-verified

25330
25331/* stnp_fpsimd.xml */
25332int 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 */
25366int STNP_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