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

Function LDAPUR_gen

arch/arm64/disassembler/decode2.c:13338–13398  ·  view source on GitHub ↗

ldapur_gen.xml */

Source from the content-addressed store, hash-verified

13336
13337/* ldapur_gen.xml */
13338int LDAPUR_gen(context *ctx, Instruction *instr)
13339{
13340 int rc = DECODE_STATUS_UNMATCHED;
13341 /* class iclass_base_plus_offset */
13342 /* size=1x|011001|opc=01|0|imm9=xxxxxxxxx|00|Rn=xxxxx|Rt=xxxxx */
13343 if((INSWORD & 0xBFE00C00)==0x99400000) {
13344 decode_fields32(ENC_LDAPUR_32_LDAPSTL_UNSCALED, ctx, instr);
13345 ctx->wback = FALSE;
13346 ctx->postindex = FALSE;
13347 ctx->scale = UINT(ctx->size);
13348 ctx->offset = SignExtend(ctx->imm9,9);
13349 if(ctx->size==2) OK(ENC_LDAPUR_32_LDAPSTL_UNSCALED);
13350 if(ctx->size==3) OK(ENC_LDAPUR_64_LDAPSTL_UNSCALED);
13351 }
13352 /* post-decode pcode */
13353 ctx->n = UINT(ctx->Rn);
13354 ctx->t = UINT(ctx->Rt);
13355 ctx->acctype = AccType_ORDERED;
13356 if(SLICE(ctx->opc,1,1)==0) {
13357 if(SLICE(ctx->opc,0,0)==1) {
13358 ctx->memop = MemOp_LOAD;
13359 };
13360 if(ctx->size==3) {
13361 ctx->regsize = 0x40;
13362 };
13363 ctx->signed_ = FALSE;
13364 }
13365 else {
13366 if(ctx->size==3) {
13367 ctx->memop = MemOp_PREFETCH;
13368 if(SLICE(ctx->opc,0,0)==1) {
13369 UNDEFINED;
13370 }
13371 }
13372 else {
13373 ctx->memop = MemOp_LOAD;
13374 if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) {
13375 UNDEFINED;
13376 }
13377 if(SLICE(ctx->opc,0,0)==1) {
13378 ctx->regsize = 0x20;
13379 };
13380 ctx->signed_ = TRUE;
13381 }
13382 }
13383 ctx->datasize = (8) << (ctx->scale);
13384 ctx->tag_checked = ctx->memop!=MemOp_PREFETCH && (ctx->wback || ctx->n!=0x1f);
13385 ctx->wb_unknown = FALSE;
13386 ctx->rt_unknown = FALSE;
13387 if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) {
13388 // assignment from ConstrainUnpredictable()
13389 // assert
13390 // switch on constraint
13391 }
13392 if(ctx->memop==MemOp_STORE && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) {
13393 // assignment from ConstrainUnpredictable()
13394 // assert
13395 // switch on constraint

Callers 1

Calls 2

decode_fields32Function · 0.85
SignExtendFunction · 0.85

Tested by

no test coverage detected