ARM: Decode some media instructions. These are untested.
This commit is contained in:
parent
b8f064c88c
commit
4f98171479
3 changed files with 57 additions and 0 deletions
|
@ -37,6 +37,8 @@
|
||||||
def bitfield ENCODING encoding;
|
def bitfield ENCODING encoding;
|
||||||
def bitfield OPCODE opcode;
|
def bitfield OPCODE opcode;
|
||||||
def bitfield OPCODE_24_23 opcode24_23;
|
def bitfield OPCODE_24_23 opcode24_23;
|
||||||
|
def bitfield MEDIA_OPCODE mediaOpcode;
|
||||||
|
def bitfield MEDIA_OPCODE2 mediaOpcode2;
|
||||||
def bitfield OPCODE_24 opcode24;
|
def bitfield OPCODE_24 opcode24;
|
||||||
def bitfield OPCODE_23_20 opcode23_20;
|
def bitfield OPCODE_23_20 opcode23_20;
|
||||||
def bitfield OPCODE_23_21 opcode23_21;
|
def bitfield OPCODE_23_21 opcode23_21;
|
||||||
|
|
|
@ -566,6 +566,60 @@ format DataOp {
|
||||||
Rn = Rn + Rm_Imm; }},
|
Rn = Rn + Rm_Imm; }},
|
||||||
{{ EA = Rn + Rm_Imm; }});
|
{{ EA = Rn + Rm_Imm; }});
|
||||||
}
|
}
|
||||||
|
1: decode MEDIA_OPCODE {
|
||||||
|
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7: WarnUnimpl::parallel_add_subtract_instructions();
|
||||||
|
0x8: decode MISC_OPCODE {
|
||||||
|
0x1, 0x9: WarnUnimpl::pkhbt();
|
||||||
|
0x7: WarnUnimpl::sxtab16();
|
||||||
|
0xb: WarnUnimpl::sel();
|
||||||
|
0x5, 0xd: WarnUnimpl::pkhtb();
|
||||||
|
0x3: WarnUnimpl::sign_zero_extend_add();
|
||||||
|
}
|
||||||
|
0xa, 0xb: decode SHIFT {
|
||||||
|
0x0, 0x2: WarnUnimpl::ssat();
|
||||||
|
0x1: WarnUnimpl::ssat16();
|
||||||
|
}
|
||||||
|
0xe, 0xf: decode SHIFT {
|
||||||
|
0x0, 0x2: WarnUnimpl::usat();
|
||||||
|
0x1: WarnUnimpl::usat16();
|
||||||
|
}
|
||||||
|
0x10: decode RN {
|
||||||
|
0xf: decode MISC_OPCODE {
|
||||||
|
0x1: WarnUnimpl::smuad();
|
||||||
|
0x3: WarnUnimpl::smuadx();
|
||||||
|
0x5: WarnUnimpl::smusd();
|
||||||
|
0x7: WarnUnimpl::smusdx();
|
||||||
|
}
|
||||||
|
default: decode MISC_OPCODE {
|
||||||
|
0x1: WarnUnimpl::smlad();
|
||||||
|
0x3: WarnUnimpl::smladx();
|
||||||
|
0x5: WarnUnimpl::smlsd();
|
||||||
|
0x7: WarnUnimpl::smlsdx();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
0x14: decode MISC_OPCODE {
|
||||||
|
0x1: WarnUnimpl::smlald();
|
||||||
|
0x3: WarnUnimpl::smlaldx();
|
||||||
|
0x5: WarnUnimpl::smlsld();
|
||||||
|
0x7: WarnUnimpl::smlsldx();
|
||||||
|
}
|
||||||
|
0x15: decode RN {
|
||||||
|
0xf: decode MISC_OPCODE {
|
||||||
|
0x1: WarnUnimpl::smmul();
|
||||||
|
0x3: WarnUnimpl::smmulr();
|
||||||
|
}
|
||||||
|
default: decode MISC_OPCODE {
|
||||||
|
0x1: WarnUnimpl::smmla();
|
||||||
|
0x3: WarnUnimpl::smmlar();
|
||||||
|
0xd: WarnUnimpl::smmls();
|
||||||
|
0xf: WarnUnimpl::smmlsr();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
0x18: decode RN {
|
||||||
|
0xf: WarnUnimpl::usada8();
|
||||||
|
default: WarnUnimpl::usad8();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
0x4: decode PUSWL {
|
0x4: decode PUSWL {
|
||||||
// Right now we only handle cases when S (PSRUSER) is not set
|
// Right now we only handle cases when S (PSRUSER) is not set
|
||||||
|
|
|
@ -46,6 +46,7 @@ namespace ArmISA
|
||||||
// All the different types of opcode fields.
|
// All the different types of opcode fields.
|
||||||
Bitfield<27, 25> encoding;
|
Bitfield<27, 25> encoding;
|
||||||
Bitfield<24, 21> opcode;
|
Bitfield<24, 21> opcode;
|
||||||
|
Bitfield<24, 20> mediaOpcode;
|
||||||
Bitfield<24, 23> opcode24_23;
|
Bitfield<24, 23> opcode24_23;
|
||||||
Bitfield<24> opcode24;
|
Bitfield<24> opcode24;
|
||||||
Bitfield<23, 20> opcode23_20;
|
Bitfield<23, 20> opcode23_20;
|
||||||
|
|
Loading…
Reference in a new issue