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

Function STTR

arch/arm64/disassembler/decode2.c:26185–26250  ·  view source on GitHub ↗

sttr.xml */

Source from the content-addressed store, hash-verified

26183
26184/* sttr.xml */
26185int STTR(context *ctx, Instruction *instr)
26186{
26187 int rc = DECODE_STATUS_UNMATCHED;
26188 /* class iclass_base_plus_offset */
26189 /* size=1x|111|V=0|00|opc=00|0|imm9=xxxxxxxxx|10|Rn=xxxxx|Rt=xxxxx */
26190 if((INSWORD & 0xBFE00C00)==0xB8000800) {
26191 decode_fields32(ENC_STTR_32_LDST_UNPRIV, ctx, instr);
26192 ctx->wback = FALSE;
26193 ctx->postindex = FALSE;
26194 ctx->scale = UINT(ctx->size);
26195 ctx->offset = SignExtend(ctx->imm9,9);
26196 if(ctx->size==2) OK(ENC_STTR_32_LDST_UNPRIV);
26197 if(ctx->size==3) OK(ENC_STTR_64_LDST_UNPRIV);
26198 }
26199 /* post-decode pcode */
26200 ctx->n = UINT(ctx->Rn);
26201 ctx->t = UINT(ctx->Rt);
26202 ctx->unpriv_at_el1 = ctx->pstate_el==EL1 && !(EL2Enabled() && HaveNVExt() && CONCAT(ctx->HCR_EL2_NV,ctx->HCR_EL2_NV1,1)==3);
26203 ctx->unpriv_at_el2 = ctx->pstate_el==EL2 && HaveVirtHostExt() && CONCAT(ctx->HCR_EL2_E2H,ctx->HCR_EL2_TGE,1)==3;
26204 ctx->user_access_override = HaveUAOExt() && ctx->pstate_uao==1;
26205 if(!ctx->user_access_override && (ctx->unpriv_at_el1 || ctx->unpriv_at_el2)) {
26206 ctx->acctype = ctx->AccType_UNPRIV;
26207 }
26208 else {
26209 ctx->acctype = ctx->AccType_NORMAL;
26210 }
26211 if(SLICE(ctx->opc,1,1)==0) {
26212 if(SLICE(ctx->opc,0,0)==1) {
26213 ctx->memop = MemOp_LOAD;
26214 };
26215 if(ctx->size==3) {
26216 ctx->regsize = 0x40;
26217 };
26218 ctx->signed_ = FALSE;
26219 }
26220 else {
26221 if(ctx->size==3) {
26222 UNDEFINED;
26223 }
26224 else {
26225 ctx->memop = MemOp_LOAD;
26226 if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) {
26227 UNDEFINED;
26228 }
26229 if(SLICE(ctx->opc,0,0)==1) {
26230 ctx->regsize = 0x20;
26231 };
26232 ctx->signed_ = TRUE;
26233 }
26234 }
26235 ctx->datasize = (8) << (ctx->scale);
26236 ctx->tag_checked = ctx->memop!=MemOp_PREFETCH && (ctx->wback || ctx->n!=0x1f);
26237 ctx->wb_unknown = FALSE;
26238 ctx->rt_unknown = FALSE;
26239 if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) {
26240 // assignment from ConstrainUnpredictable()
26241 // assert
26242 // switch on constraint

Callers 1

Calls 3

decode_fields32Function · 0.85
SignExtendFunction · 0.85
EL2EnabledFunction · 0.85

Tested by

no test coverage detected