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

Function PRFM_reg

arch/arm64/disassembler/decode2.c:19275–19339  ·  view source on GitHub ↗

prfm_reg.xml */

Source from the content-addressed store, hash-verified

19273
19274/* prfm_reg.xml */
19275int PRFM_reg(context *ctx, Instruction *instr)
19276{
19277 int rc = DECODE_STATUS_UNMATCHED;
19278 /* class iclass_general */
19279 /* size=11|111|V=0|00|opc=10|1|Rm=xxxxx|option=xxx|S=x|10|Rn=xxxxx|Rt=xxxxx */
19280 if((INSWORD & 0xFFE00C00)==0xF8A00800) {
19281 decode_fields32(ENC_PRFM_P_LDST_REGOFF, ctx, instr);
19282 ctx->wback = FALSE;
19283 ctx->postindex = FALSE;
19284 ctx->scale = UINT(ctx->size);
19285 if(SLICE(ctx->option,1,1)==0) {
19286 UNDEFINED;
19287 }
19288 ctx->extend_type = DecodeRegExtend(ctx->option);
19289 ctx->shift = (ctx->S==1) ? ctx->scale : 0;
19290 OK(ENC_PRFM_P_LDST_REGOFF);
19291 }
19292 /* post-decode pcode */
19293 ctx->n = UINT(ctx->Rn);
19294 ctx->t = UINT(ctx->Rt);
19295 ctx->m = UINT(ctx->Rm);
19296 ctx->acctype = ctx->AccType_NORMAL;
19297 if(SLICE(ctx->opc,1,1)==0) {
19298 if(SLICE(ctx->opc,0,0)==1) {
19299 ctx->memop = MemOp_LOAD;
19300 };
19301 if(ctx->size==3) {
19302 ctx->regsize = 0x40;
19303 };
19304 ctx->signed_ = FALSE;
19305 }
19306 else {
19307 if(ctx->size==3) {
19308 ctx->memop = MemOp_PREFETCH;
19309 if(SLICE(ctx->opc,0,0)==1) {
19310 UNDEFINED;
19311 }
19312 }
19313 else {
19314 ctx->memop = MemOp_LOAD;
19315 if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) {
19316 UNDEFINED;
19317 }
19318 if(SLICE(ctx->opc,0,0)==1) {
19319 ctx->regsize = 0x20;
19320 };
19321 ctx->signed_ = TRUE;
19322 }
19323 }
19324 ctx->datasize = (8) << (ctx->scale);
19325 ctx->tag_checked = ctx->memop!=MemOp_PREFETCH;
19326 ctx->wb_unknown = FALSE;
19327 ctx->rt_unknown = FALSE;
19328 if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) {
19329 // assignment from ConstrainUnpredictable()
19330 // assert
19331 // switch on constraint
19332 }

Callers 1

Calls 2

decode_fields32Function · 0.85
DecodeRegExtendFunction · 0.85

Tested by

no test coverage detected