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

Function LDUR_gen

arch/arm64/disassembler/decode2.c:16986–17046  ·  view source on GitHub ↗

ldur_gen.xml */

Source from the content-addressed store, hash-verified

16984
16985/* ldur_gen.xml */
16986int LDUR_gen(context *ctx, Instruction *instr)
16987{
16988 int rc = DECODE_STATUS_UNMATCHED;
16989 /* class iclass_base_plus_offset */
16990 /* size=1x|111|V=0|00|opc=01|0|imm9=xxxxxxxxx|00|Rn=xxxxx|Rt=xxxxx */
16991 if((INSWORD & 0xBFE00C00)==0xB8400000) {
16992 decode_fields32(ENC_LDUR_32_LDST_UNSCALED, ctx, instr);
16993 ctx->wback = FALSE;
16994 ctx->postindex = FALSE;
16995 ctx->scale = UINT(ctx->size);
16996 ctx->offset = SignExtend(ctx->imm9,9);
16997 if(ctx->size==2) OK(ENC_LDUR_32_LDST_UNSCALED);
16998 if(ctx->size==3) OK(ENC_LDUR_64_LDST_UNSCALED);
16999 }
17000 /* post-decode pcode */
17001 ctx->n = UINT(ctx->Rn);
17002 ctx->t = UINT(ctx->Rt);
17003 ctx->acctype = ctx->AccType_NORMAL;
17004 if(SLICE(ctx->opc,1,1)==0) {
17005 if(SLICE(ctx->opc,0,0)==1) {
17006 ctx->memop = MemOp_LOAD;
17007 };
17008 if(ctx->size==3) {
17009 ctx->regsize = 0x40;
17010 };
17011 ctx->signed_ = FALSE;
17012 }
17013 else {
17014 if(ctx->size==3) {
17015 ctx->memop = MemOp_PREFETCH;
17016 if(SLICE(ctx->opc,0,0)==1) {
17017 UNDEFINED;
17018 }
17019 }
17020 else {
17021 ctx->memop = MemOp_LOAD;
17022 if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) {
17023 UNDEFINED;
17024 }
17025 if(SLICE(ctx->opc,0,0)==1) {
17026 ctx->regsize = 0x20;
17027 };
17028 ctx->signed_ = TRUE;
17029 }
17030 }
17031 ctx->datasize = (8) << (ctx->scale);
17032 ctx->tag_checked = ctx->memop!=MemOp_PREFETCH && (ctx->wback || ctx->n!=0x1f);
17033 ctx->wb_unknown = FALSE;
17034 ctx->rt_unknown = FALSE;
17035 if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) {
17036 // assignment from ConstrainUnpredictable()
17037 // assert
17038 // switch on constraint
17039 }
17040 if(ctx->memop==MemOp_STORE && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) {
17041 // assignment from ConstrainUnpredictable()
17042 // assert
17043 // switch on constraint

Callers 1

Calls 2

decode_fields32Function · 0.85
SignExtendFunction · 0.85

Tested by

no test coverage detected