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

Function DecodeVLD2DupInstruction

arch/ARM/ARMDisassembler.c:3189–3239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3187}
3188
3189static DecodeStatus DecodeVLD2DupInstruction(MCInst *Inst, unsigned Insn,
3190 uint64_t Address, const void *Decoder)
3191{
3192 DecodeStatus S = MCDisassembler_Success;
3193 unsigned Rn, Rm, align, size;
3194 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
3195 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
3196 Rn = fieldFromInstruction_4(Insn, 16, 4);
3197 Rm = fieldFromInstruction_4(Insn, 0, 4);
3198 align = fieldFromInstruction_4(Insn, 4, 1);
3199 size = 1 << fieldFromInstruction_4(Insn, 6, 2);
3200 align *= 2 * size;
3201
3202 switch (MCInst_getOpcode(Inst)) {
3203 case ARM_VLD2DUPd16: case ARM_VLD2DUPd32: case ARM_VLD2DUPd8:
3204 case ARM_VLD2DUPd16wb_fixed: case ARM_VLD2DUPd16wb_register:
3205 case ARM_VLD2DUPd32wb_fixed: case ARM_VLD2DUPd32wb_register:
3206 case ARM_VLD2DUPd8wb_fixed: case ARM_VLD2DUPd8wb_register:
3207 if (!Check(&S, DecodeDPairRegisterClass(Inst, Rd, Address, Decoder)))
3208 return MCDisassembler_Fail;
3209 break;
3210
3211 case ARM_VLD2DUPd16x2: case ARM_VLD2DUPd32x2: case ARM_VLD2DUPd8x2:
3212 case ARM_VLD2DUPd16x2wb_fixed: case ARM_VLD2DUPd16x2wb_register:
3213 case ARM_VLD2DUPd32x2wb_fixed: case ARM_VLD2DUPd32x2wb_register:
3214 case ARM_VLD2DUPd8x2wb_fixed: case ARM_VLD2DUPd8x2wb_register:
3215 if (!Check(&S, DecodeDPairSpacedRegisterClass(Inst, Rd, Address, Decoder)))
3216 return MCDisassembler_Fail;
3217 break;
3218
3219 default:
3220 if (!Check(&S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
3221 return MCDisassembler_Fail;
3222 break;
3223 }
3224
3225 if (Rm != 0xF)
3226 MCOperand_CreateImm0(Inst, 0);
3227
3228 if (!Check(&S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3229 return MCDisassembler_Fail;
3230
3231 MCOperand_CreateImm0(Inst, align);
3232
3233 if (Rm != 0xD && Rm != 0xF) {
3234 if (!Check(&S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
3235 return MCDisassembler_Fail;
3236 }
3237
3238 return S;
3239}
3240
3241static DecodeStatus DecodeVLD3DupInstruction(MCInst *Inst, unsigned Insn,
3242 uint64_t Address, const void *Decoder)

Callers

nothing calls this directly

Calls 7

MCInst_getOpcodeFunction · 0.85
DecodeDPairRegisterClassFunction · 0.85
DecodeDPRRegisterClassFunction · 0.85
MCOperand_CreateImm0Function · 0.85
CheckFunction · 0.70
DecodeGPRRegisterClassFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…