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

Function ORR_log_shift

arch/arm64/disassembler/decode2.c:18845–18888  ·  view source on GitHub ↗

orr_log_shift.xml */

Source from the content-addressed store, hash-verified

18843
18844/* orr_log_shift.xml */
18845int ORR_log_shift(context *ctx, Instruction *instr)
18846{
18847 int rc = DECODE_STATUS_UNMATCHED;
18848 /* class iclass_no_s */
18849 /* sf=x|opc=01|01010|shift=xx|N=0|Rm=xxxxx|imm6=xxxxxx|Rn=xxxxx|Rd=xxxxx */
18850 if((INSWORD & 0x7F200000)==0x2A000000) {
18851 decode_fields32(ENC_ORR_32_LOG_SHIFT, ctx, instr);
18852 ctx->d = UINT(ctx->Rd);
18853 ctx->n = UINT(ctx->Rn);
18854 ctx->m = UINT(ctx->Rm);
18855 ctx->datasize = (ctx->sf==1) ? 0x40 : 0x20;
18856 if(!ctx->opc) {
18857 ctx->op = LogicalOp_AND;
18858 ctx->setflags = FALSE;
18859 instr->setflags = FLAGEFFECT_NONE;
18860 }
18861 else if(ctx->opc==1) {
18862 ctx->op = LogicalOp_ORR;
18863 ctx->setflags = FALSE;
18864 instr->setflags = FLAGEFFECT_NONE;
18865 }
18866 else if(ctx->opc==2) {
18867 ctx->op = LogicalOp_EOR;
18868 ctx->setflags = FALSE;
18869 instr->setflags = FLAGEFFECT_NONE;
18870 }
18871 else if(ctx->opc==3) {
18872 ctx->op = LogicalOp_AND;
18873 ctx->setflags = TRUE;
18874 instr->setflags = FLAGEFFECT_SETS;
18875 }
18876 if(ctx->sf==0 && SLICE(ctx->imm6,5,5)==1) {
18877 UNDEFINED;
18878 }
18879 ctx->shift_type = DecodeShift(ctx->shift);
18880 ctx->shift_amount = UINT(ctx->imm6);
18881 ctx->invert = (ctx->N==1);
18882 /* regular aliases */
18883 if(ctx->shift==0 && ctx->imm6==0 && ctx->Rn==0x1f) return MOV_ORR_log_shift(ctx, instr);
18884 if(ctx->sf==0) OK(ENC_ORR_32_LOG_SHIFT);
18885 if(ctx->sf==1) OK(ENC_ORR_64_LOG_SHIFT);
18886 }
18887 return rc;
18888}
18889
18890/* pacda.xml */
18891int PACDA(context *ctx, Instruction *instr)

Callers 1

decode_iclass_log_shiftFunction · 0.85

Calls 3

decode_fields32Function · 0.85
DecodeShiftFunction · 0.85
MOV_ORR_log_shiftFunction · 0.85

Tested by

no test coverage detected