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

Function STLXP

arch/arm64/disassembler/decode2.c:25158–25199  ·  view source on GitHub ↗

stlxp.xml */

Source from the content-addressed store, hash-verified

25156
25157/* stlxp.xml */
25158int STLXP(context *ctx, Instruction *instr)
25159{
25160 int rc = DECODE_STATUS_UNMATCHED;
25161 /* class iclass_base_register */
25162 /* 1|sz=x|001000|o2=0|L=0|o1=1|Rs=xxxxx|o0=1|Rt2=xxxxx|Rn=xxxxx|Rt=xxxxx */
25163 if((INSWORD & 0xBFE08000)==0x88208000) {
25164 decode_fields32(ENC_STLXP_SP32_LDSTEXCLP, ctx, instr);
25165 ctx->n = UINT(ctx->Rn);
25166 ctx->t = UINT(ctx->Rt);
25167 ctx->t2 = UINT(ctx->Rt2);
25168 ctx->s = UINT(ctx->Rs);
25169 ctx->acctype = (ctx->o0==1) ? AccType_ORDEREDATOMIC : AccType_ATOMIC;
25170 ctx->pair = TRUE;
25171 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
25172 ctx->elsize = (0x20) << (UINT(ctx->sz));
25173 ctx->regsize = (ctx->elsize==0x40) ? 0x40 : 0x20;
25174 ctx->datasize = (ctx->pair) ? (ctx->elsize) * (2) : ctx->elsize;
25175 ctx->tag_checked = ctx->n!=0x1f;
25176 ctx->rt_unknown = FALSE;
25177 ctx->rn_unknown = FALSE;
25178 if(ctx->memop==MemOp_LOAD && ctx->pair && ctx->t==ctx->t2) {
25179 ctx->c = ConstrainUnpredictable(Unpredictable_LDPOVERLAP);
25180 // assert
25181 // switch on constraint
25182 }
25183 if(ctx->memop==MemOp_STORE) {
25184 if(ctx->s==ctx->t || (ctx->pair && ctx->s==ctx->t2)) {
25185 ctx->c = ConstrainUnpredictable(Unpredictable_DATAOVERLAP);
25186 // assert
25187 // switch on constraint
25188 }
25189 if(ctx->s==ctx->n && ctx->n!=0x1f) {
25190 ctx->c = ConstrainUnpredictable(Unpredictable_BASEOVERLAP);
25191 // assert
25192 // switch on constraint
25193 }
25194 }
25195 if(ctx->sz==0) OK(ENC_STLXP_SP32_LDSTEXCLP);
25196 if(ctx->sz==1) OK(ENC_STLXP_SP64_LDSTEXCLP);
25197 }
25198 return rc;
25199}
25200
25201/* stlxr.xml */
25202int STLXR(context *ctx, Instruction *instr)

Callers 1

decode_iclass_ldstexclpFunction · 0.85

Calls 2

decode_fields32Function · 0.85
ConstrainUnpredictableFunction · 0.85

Tested by

no test coverage detected