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

Function STP_fpsimd

arch/arm64/disassembler/decode2.c:25399–25446  ·  view source on GitHub ↗

stp_fpsimd.xml */

Source from the content-addressed store, hash-verified

25397
25398/* stp_fpsimd.xml */
25399int STP_fpsimd(context *ctx, Instruction *instr)
25400{
25401 int rc = DECODE_STATUS_UNMATCHED;
25402 /* class iclass_post_indexed */
25403 /* opc=xx|101|V=1|001|L=0|imm7=xxxxxxx|Rt2=xxxxx|Rn=xxxxx|Rt=xxxxx */
25404 if((INSWORD & 0x3FC00000)==0x2C800000) {
25405 decode_fields32(ENC_STP_S_LDSTPAIR_POST, ctx, instr);
25406 if(ctx->opc==0) OK(ENC_STP_S_LDSTPAIR_POST);
25407 if(ctx->opc==1) OK(ENC_STP_D_LDSTPAIR_POST);
25408 if(ctx->opc==2) OK(ENC_STP_Q_LDSTPAIR_POST);
25409 }
25410 /* class iclass_pre_indexed */
25411 /* opc=xx|101|V=1|011|L=0|imm7=xxxxxxx|Rt2=xxxxx|Rn=xxxxx|Rt=xxxxx */
25412 if((INSWORD & 0x3FC00000)==0x2D800000) {
25413 decode_fields32(ENC_STP_S_LDSTPAIR_PRE, ctx, instr);
25414 if(ctx->opc==0) OK(ENC_STP_S_LDSTPAIR_PRE);
25415 if(ctx->opc==1) OK(ENC_STP_D_LDSTPAIR_PRE);
25416 if(ctx->opc==2) OK(ENC_STP_Q_LDSTPAIR_PRE);
25417 }
25418 /* class iclass_signed_scaled_offset */
25419 /* opc=xx|101|V=1|010|L=0|imm7=xxxxxxx|Rt2=xxxxx|Rn=xxxxx|Rt=xxxxx */
25420 if((INSWORD & 0x3FC00000)==0x2D000000) {
25421 decode_fields32(ENC_STP_S_LDSTPAIR_OFF, ctx, instr);
25422 if(ctx->opc==0) OK(ENC_STP_S_LDSTPAIR_OFF);
25423 if(ctx->opc==1) OK(ENC_STP_D_LDSTPAIR_OFF);
25424 if(ctx->opc==2) OK(ENC_STP_Q_LDSTPAIR_OFF);
25425 }
25426 /* post-decode pcode */
25427 ctx->n = UINT(ctx->Rn);
25428 ctx->t = UINT(ctx->Rt);
25429 ctx->t2 = UINT(ctx->Rt2);
25430 ctx->acctype = ctx->AccType_VEC;
25431 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
25432 if(ctx->opc==3) {
25433 UNDEFINED;
25434 }
25435 ctx->scale = 2+UINT(ctx->opc);
25436 ctx->datasize = (8) << (ctx->scale);
25437 ctx->offset = LSL(SignExtend(ctx->imm7,7),ctx->scale);
25438 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
25439 ctx->rt_unknown = FALSE;
25440 if(ctx->memop==MemOp_LOAD && ctx->t==ctx->t2) {
25441 ctx->c = ConstrainUnpredictable(Unpredictable_LDPOVERLAP);
25442 // assert
25443 // switch on constraint
25444 }
25445 return rc;
25446}
25447
25448/* stp_gen.xml */
25449int STP_gen(context *ctx, Instruction *instr)

Callers 3

Calls 3

decode_fields32Function · 0.85
SignExtendFunction · 0.85
ConstrainUnpredictableFunction · 0.85

Tested by

no test coverage detected