ARM: Decode the swp and swpb instructions.
This commit is contained in:
parent
e157b1f52a
commit
1344fc2668
|
@ -58,12 +58,7 @@ format DataOp {
|
||||||
1: decode MISC_OPCODE {
|
1: decode MISC_OPCODE {
|
||||||
0x9: decode PREPOST {
|
0x9: decode PREPOST {
|
||||||
0: ArmMultAndMultAcc::armMultAndMultAcc();
|
0: ArmMultAndMultAcc::armMultAndMultAcc();
|
||||||
1: decode PUBWL {
|
1: ArmSyncMem::armSyncMem();
|
||||||
0x10: WarnUnimpl::swp();
|
|
||||||
0x14: WarnUnimpl::swpb();
|
|
||||||
0x18: WarnUnimpl::strex();
|
|
||||||
0x19: WarnUnimpl::ldrex();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
0xb, 0xd, 0xf: AddrMode3::addrMode3();
|
0xb, 0xd, 0xf: AddrMode3::addrMode3();
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,6 +213,28 @@ def format AddrMode3() {{
|
||||||
decode_block = decode % subs
|
decode_block = decode % subs
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
def format ArmSyncMem() {{
|
||||||
|
decode_block = '''
|
||||||
|
{
|
||||||
|
const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 19, 16);
|
||||||
|
const IntRegIndex rt = (IntRegIndex)(uint32_t)bits(machInst, 15, 12);
|
||||||
|
const IntRegIndex rt2 = (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
|
||||||
|
switch (PUBWL) {
|
||||||
|
case 0x10:
|
||||||
|
return new Swp(machInst, rt, rt2, rn);
|
||||||
|
case 0x14:
|
||||||
|
return new Swpb(machInst, rt, rt2, rn);
|
||||||
|
case 0x18:
|
||||||
|
return new WarnUnimplemented("strex", machInst);
|
||||||
|
case 0x19:
|
||||||
|
return new WarnUnimplemented("ldrex", machInst);
|
||||||
|
default:
|
||||||
|
return new Unknown(machInst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
}};
|
||||||
|
|
||||||
def format Thumb32LoadWord() {{
|
def format Thumb32LoadWord() {{
|
||||||
decode = '''
|
decode = '''
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue