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

Function BICS

arch/arm64/disassembler/decode2.c:1198–1239  ·  view source on GitHub ↗

bics.xml */

Source from the content-addressed store, hash-verified

1196
1197/* bics.xml */
1198int BICS(context *ctx, Instruction *instr)
1199{
1200 int rc = DECODE_STATUS_UNMATCHED;
1201 /* class iclass_s */
1202 /* sf=x|opc=11|01010|shift=xx|N=1|Rm=xxxxx|imm6=xxxxxx|Rn=xxxxx|Rd=xxxxx */
1203 if((INSWORD & 0x7F200000)==0x6A200000) {
1204 decode_fields32(ENC_BICS_32_LOG_SHIFT, ctx, instr);
1205 ctx->d = UINT(ctx->Rd);
1206 ctx->n = UINT(ctx->Rn);
1207 ctx->m = UINT(ctx->Rm);
1208 ctx->datasize = (ctx->sf==1) ? 0x40 : 0x20;
1209 if(!ctx->opc) {
1210 ctx->op = LogicalOp_AND;
1211 ctx->setflags = FALSE;
1212 instr->setflags = FLAGEFFECT_NONE;
1213 }
1214 else if(ctx->opc==1) {
1215 ctx->op = LogicalOp_ORR;
1216 ctx->setflags = FALSE;
1217 instr->setflags = FLAGEFFECT_NONE;
1218 }
1219 else if(ctx->opc==2) {
1220 ctx->op = LogicalOp_EOR;
1221 ctx->setflags = FALSE;
1222 instr->setflags = FLAGEFFECT_NONE;
1223 }
1224 else if(ctx->opc==3) {
1225 ctx->op = LogicalOp_AND;
1226 ctx->setflags = TRUE;
1227 instr->setflags = FLAGEFFECT_SETS;
1228 }
1229 if(ctx->sf==0 && SLICE(ctx->imm6,5,5)==1) {
1230 UNDEFINED;
1231 }
1232 ctx->shift_type = DecodeShift(ctx->shift);
1233 ctx->shift_amount = UINT(ctx->imm6);
1234 ctx->invert = (ctx->N==1);
1235 if(ctx->sf==0) OK(ENC_BICS_32_LOG_SHIFT);
1236 if(ctx->sf==1) OK(ENC_BICS_64_LOG_SHIFT);
1237 }
1238 return rc;
1239}
1240
1241/* bic_advsimd_imm.xml */
1242int BIC_advsimd_imm(context *ctx, Instruction *instr)

Callers 1

decode_iclass_log_shiftFunction · 0.85

Calls 2

decode_fields32Function · 0.85
DecodeShiftFunction · 0.85

Tested by

no test coverage detected