ARM: Decode miscellaneous arm mode media instructions.
This commit is contained in:
parent
09cc401848
commit
2e717558e2
2 changed files with 27 additions and 10 deletions
|
@ -114,9 +114,7 @@ format DataOp {
|
||||||
0x0: ArmParallelAddSubtract::armParallelAddSubtract();
|
0x0: ArmParallelAddSubtract::armParallelAddSubtract();
|
||||||
0x1: ArmPackUnpackSatReverse::armPackUnpackSatReverse();
|
0x1: ArmPackUnpackSatReverse::armPackUnpackSatReverse();
|
||||||
0x2: ArmSignedMultiplies::armSignedMultiplies();
|
0x2: ArmSignedMultiplies::armSignedMultiplies();
|
||||||
0x3: decode MEDIA_OPCODE {
|
0x3: ArmMiscMedia::armMiscMedia();
|
||||||
0x18: ArmUsad::armUsad();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
0x4: ArmMacroMem::armMacroMem();
|
0x4: ArmMacroMem::armMacroMem();
|
||||||
|
|
|
@ -35,18 +35,37 @@
|
||||||
//
|
//
|
||||||
// Authors: Gabe Black
|
// Authors: Gabe Black
|
||||||
|
|
||||||
def format ArmUsad() {{
|
def format ArmMiscMedia() {{
|
||||||
decode_block = '''
|
decode_block = '''
|
||||||
{
|
{
|
||||||
const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 19, 16);
|
const uint32_t op1 = bits(machInst, 22, 20);
|
||||||
|
const uint32_t op2 = bits(machInst, 7, 5);
|
||||||
const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
|
const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
|
||||||
const IntRegIndex rm = (IntRegIndex)(uint32_t)bits(machInst, 11, 8);
|
|
||||||
const IntRegIndex ra = (IntRegIndex)(uint32_t)bits(machInst, 15, 12);
|
const IntRegIndex ra = (IntRegIndex)(uint32_t)bits(machInst, 15, 12);
|
||||||
|
if (op1 == 0 && op2 == 0) {
|
||||||
|
const IntRegIndex rd =
|
||||||
|
(IntRegIndex)(uint32_t)bits(machInst, 19, 16);
|
||||||
|
const IntRegIndex rm =
|
||||||
|
(IntRegIndex)(uint32_t)bits(machInst, 11, 8);
|
||||||
if (ra == 0xf) {
|
if (ra == 0xf) {
|
||||||
return new Usad8(machInst, rd, rn, rm);
|
return new Usad8(machInst, rd, rn, rm);
|
||||||
} else {
|
} else {
|
||||||
return new Usada8(machInst, rd, rn, rm, ra);
|
return new Usada8(machInst, rd, rn, rm, ra);
|
||||||
}
|
}
|
||||||
|
} else if (bits(op2, 1, 0) == 0x2) {
|
||||||
|
if (bits(op1, 2, 1) == 0x3) {
|
||||||
|
return new WarnUnimplemented("ubfx", machInst);
|
||||||
|
} else if (bits(op1, 2, 1) == 0x1) {
|
||||||
|
return new WarnUnimplemented("sbfx", machInst);
|
||||||
|
}
|
||||||
|
} else if (bits(op2, 1, 0) == 0x0 && bits(op1, 2, 1) == 0x2) {
|
||||||
|
if (rn == 0xf) {
|
||||||
|
return new WarnUnimplemented("bfc", machInst);
|
||||||
|
} else {
|
||||||
|
return new WarnUnimplemented("bfi", machInst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Unknown(machInst);
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
}};
|
}};
|
||||||
|
|
Loading…
Reference in a new issue