MCPcopy Create free account
hub / github.com/capstone-engine/capstone / DecodeMSRMask

Function DecodeMSRMask

arch/ARM/ARMDisassembler.c:4396–4473  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4394}
4395
4396static DecodeStatus DecodeMSRMask(MCInst *Inst, unsigned Val,
4397 uint64_t Address, const void *Decoder)
4398{
4399 DecodeStatus S = MCDisassembler_Success;
4400
4401 if (ARM_getFeatureBits(Inst->csh->mode, ARM_FeatureMClass)) {
4402 unsigned ValLow = Val & 0xff;
4403
4404 // Validate the SYSm value first.
4405 switch (ValLow) {
4406 case 0: // apsr
4407 case 1: // iapsr
4408 case 2: // eapsr
4409 case 3: // xpsr
4410 case 5: // ipsr
4411 case 6: // epsr
4412 case 7: // iepsr
4413 case 8: // msp
4414 case 9: // psp
4415 case 16: // primask
4416 case 20: // control
4417 break;
4418 case 17: // basepri
4419 case 18: // basepri_max
4420 case 19: // faultmask
4421 if (!ARM_getFeatureBits(Inst->csh->mode, ARM_HasV7Ops))
4422 // Values basepri, basepri_max and faultmask are only valid for v7m.
4423 return MCDisassembler_Fail;
4424 break;
4425 case 0x8a: // msplim_ns
4426 case 0x8b: // psplim_ns
4427 case 0x91: // basepri_ns
4428 case 0x93: // faultmask_ns
4429 if (!ARM_getFeatureBits(Inst->csh->mode, ARM_HasV8MMainlineOps))
4430 return MCDisassembler_Fail;
4431 // LLVM_FALLTHROUGH;
4432 case 10: // msplim
4433 case 11: // psplim
4434 case 0x88: // msp_ns
4435 case 0x89: // psp_ns
4436 case 0x90: // primask_ns
4437 case 0x94: // control_ns
4438 case 0x98: // sp_ns
4439 if (!ARM_getFeatureBits(Inst->csh->mode, ARM_Feature8MSecExt))
4440 return MCDisassembler_Fail;
4441 break;
4442 default:
4443 return MCDisassembler_SoftFail;
4444 }
4445
4446 if (MCInst_getOpcode(Inst) == ARM_t2MSR_M) {
4447 unsigned Mask = fieldFromInstruction_4(Val, 10, 2);
4448 if (!ARM_getFeatureBits(Inst->csh->mode, ARM_HasV7Ops)) {
4449 // The ARMv6-M MSR bits {11-10} can be only 0b10, other values are
4450 // unpredictable.
4451 if (Mask != 2)
4452 S = MCDisassembler_SoftFail;
4453 } else {

Callers

nothing calls this directly

Calls 3

ARM_getFeatureBitsFunction · 0.85
MCInst_getOpcodeFunction · 0.85
MCOperand_CreateImm0Function · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…