| 3337 | } |
| 3338 | |
| 3339 | static DecodeStatus DecodeNEONModImmInstruction(MCInst *Inst, unsigned Insn, |
| 3340 | uint64_t Address, const void *Decoder) |
| 3341 | { |
| 3342 | DecodeStatus S = MCDisassembler_Success; |
| 3343 | unsigned imm, Q; |
| 3344 | unsigned Rd = fieldFromInstruction_4(Insn, 12, 4); |
| 3345 | Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4; |
| 3346 | imm = fieldFromInstruction_4(Insn, 0, 4); |
| 3347 | imm |= fieldFromInstruction_4(Insn, 16, 3) << 4; |
| 3348 | imm |= fieldFromInstruction_4(Insn, 24, 1) << 7; |
| 3349 | imm |= fieldFromInstruction_4(Insn, 8, 4) << 8; |
| 3350 | imm |= fieldFromInstruction_4(Insn, 5, 1) << 12; |
| 3351 | Q = fieldFromInstruction_4(Insn, 6, 1); |
| 3352 | |
| 3353 | if (Q) { |
| 3354 | if (!Check(&S, DecodeQPRRegisterClass(Inst, Rd, Address, Decoder))) |
| 3355 | return MCDisassembler_Fail; |
| 3356 | } else { |
| 3357 | if (!Check(&S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder))) |
| 3358 | return MCDisassembler_Fail; |
| 3359 | } |
| 3360 | |
| 3361 | MCOperand_CreateImm0(Inst, imm); |
| 3362 | |
| 3363 | switch (MCInst_getOpcode(Inst)) { |
| 3364 | case ARM_VORRiv4i16: |
| 3365 | case ARM_VORRiv2i32: |
| 3366 | case ARM_VBICiv4i16: |
| 3367 | case ARM_VBICiv2i32: |
| 3368 | if (!Check(&S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder))) |
| 3369 | return MCDisassembler_Fail; |
| 3370 | break; |
| 3371 | case ARM_VORRiv8i16: |
| 3372 | case ARM_VORRiv4i32: |
| 3373 | case ARM_VBICiv8i16: |
| 3374 | case ARM_VBICiv4i32: |
| 3375 | if (!Check(&S, DecodeQPRRegisterClass(Inst, Rd, Address, Decoder))) |
| 3376 | return MCDisassembler_Fail; |
| 3377 | break; |
| 3378 | default: |
| 3379 | break; |
| 3380 | } |
| 3381 | |
| 3382 | return S; |
| 3383 | } |
| 3384 | |
| 3385 | static DecodeStatus DecodeVSHLMaxInstruction(MCInst *Inst, unsigned Insn, |
| 3386 | uint64_t Address, const void *Decoder) |
no test coverage detected
searching dependent graphs…