Fixed addressing modes. Added missing generated class, removed unused one.

This commit is contained in:
2021-07-15 12:45:57 +02:00
parent 2fe70deee2
commit 03c11ecef9
34 changed files with 878 additions and 78 deletions
@@ -20,14 +20,14 @@ object M68kIsa {
val isaData = listOf(
IsaData("abcd", "Add Decimal with Extend"),
IsaData("add", "Add"),
IsaData("adda", "Add Address"),
IsaData("addi", "Add Immediate"),
IsaData("adda", "Add Address", altMnemonics = listOf("add")),
IsaData("addi", "Add Immediate", altMnemonics = listOf("add")),
IsaData("addq", "Add Quick"),
IsaData("addx", "Add with Extend"),
IsaData("and", "Logical AND"),
IsaData("andi", "Logical AND Immediate"),
IsaData("andi", "to CCR AND Immediate to Condition Code Register"),
IsaData("andi", "to SR AND Immediate to Status Register"),
IsaData("andi", "Logical AND Immediate", altMnemonics = listOf("and")),
IsaData("andi", "to CCR AND Immediate to Condition Code Register", altMnemonics = listOf("and")),
IsaData("andi", "to SR AND Immediate to Status Register", altMnemonics = listOf("and")),
IsaData("asl", "Arithmetic Shift Left"),
IsaData("asr", "Arithmetic Shift Right"),
IsaData("bCC", "Branch Conditionally", conditionCodes = conditionCodesBcc),
@@ -40,9 +40,9 @@ object M68kIsa {
IsaData("chk", "Check Register Against Bound"),
IsaData("clr", "Clear"),
IsaData("cmp", "Compare"),
IsaData("cmpa", "Compare Address"),
IsaData("cmpi", "Compare Immediate"),
IsaData("cmpm", "Compare Memory to Memory"),
IsaData("cmpa", "Compare Address", altMnemonics = listOf("cmp")),
IsaData("cmpi", "Compare Immediate", altMnemonics = listOf("cmp")),
IsaData("cmpm", "Compare Memory to Memory", altMnemonics = listOf("cmp")),
IsaData(
"dbCC",
"Test Condition, Decrement, and Branch",
@@ -52,9 +52,9 @@ object M68kIsa {
IsaData("divs", "Signed Divide"),
IsaData("divu", "Unsigned Divide"),
IsaData("eor", "Logical Exclusive-OR"),
IsaData("eori", "Logical Exclusive-OR Immediate"),
IsaData("eori", "to CCR Exclusive-OR Immediate to Condition Code Register"),
IsaData("eori", "to SR Exclusive-OR Immediate to Status Register"),
IsaData("eori", "Logical Exclusive-OR Immediate", altMnemonics = listOf("eor")),
IsaData("eori", "to CCR Exclusive-OR Immediate to Condition Code Register", altMnemonics = listOf("eor")),
IsaData("eori", "to SR Exclusive-OR Immediate to Status Register", altMnemonics = listOf("eor")),
IsaData("exg", "Exchange Registers"),
IsaData("ext", "Sign Extend"),
IsaData("illegal", "Take Illegal Instruction Trap"),
@@ -65,7 +65,7 @@ object M68kIsa {
IsaData("lsl", "Logical Shift Left"),
IsaData("lsr", "Logical Shift Right"),
IsaData("move", "Move"),
IsaData("movea", "Move Address"),
IsaData("movea", "Move Address", altMnemonics = listOf("move")),
IsaData("move", "to CCR Move to Condition Code Register"),
IsaData("move", "from SR Move from Status Register"),
IsaData("move", "to SR Move to Status Register"),
@@ -81,9 +81,9 @@ object M68kIsa {
IsaData("nop", "No Operation"),
IsaData("not", "Logical Complement"),
IsaData("or", "Logical Inclusive-OR"),
IsaData("ori", "Logical Inclusive-OR Immediate"),
IsaData("ori", "to CCR Inclusive-OR Immediate to Condition Code Register"),
IsaData("ori", "to SR Inclusive-OR Immediate to Status Register"),
IsaData("ori", "Logical Inclusive-OR Immediate", altMnemonics = listOf("or")),
IsaData("ori", "to CCR Inclusive-OR Immediate to Condition Code Register", altMnemonics = listOf("or")),
IsaData("ori", "to SR Inclusive-OR Immediate to Status Register", altMnemonics = listOf("or")),
IsaData("pea", "Push Effective Address"),
IsaData("reset", "Reset External Devices"),
IsaData("rol", "Rotate Left"),
@@ -97,8 +97,8 @@ object M68kIsa {
IsaData("sCC", "Set Conditionally", conditionCodes = conditionCodes),
IsaData("stop", "Stop"),
IsaData("sub", "Subtract"),
IsaData("suba", "Subtract Address"),
IsaData("subi", "Subtract Immediate"),
IsaData("suba", "Subtract Address", altMnemonics = listOf("sub")),
IsaData("subi", "Subtract Immediate", altMnemonics = listOf("sub")),
IsaData("subq", "Subtract Quick"),
IsaData("subx", "Subtract with Extend"),
IsaData("swap", "Swap Register Words"),
@@ -106,7 +106,7 @@ object M68kIsa {
IsaData("trap", "Trap"),
IsaData("trapv", "Trap on Overflow"),
IsaData("tst", "Test Operand"),
IsaData("unlk", "Unlink "),
IsaData("unlk", "Unlink"),
)
val mnemonics =
@@ -206,15 +206,15 @@ AddressRegisterIndirectPostIncAddressingMode ::= ROUND_L AddressRegister ROUND_R
AddressRegisterIndirectPreDecAddressingMode ::= OP_MINUS ROUND_L AddressRegister ROUND_R
AddressRegisterIndirectWithDisplacementOldAddressingMode ::= expr ROUND_L AddressRegister ROUND_R
AddressRegisterIndirectWithDisplacementNewAddressingMode ::= ROUND_L expr SEPARATOR AddressRegister ROUND_R
AddressRegisterIndirectWithIndexOldAddressingMode ::= expr ROUND_L AddressRegister SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
AddressRegisterIndirectWithIndexNewAddressingMode ::= ROUND_L expr SEPARATOR AddressRegister SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
ProgramCounterIndirectWithDisplacementOldAddressingMode ::= expr ROUND_L PC ROUND_R
AddressRegisterIndirectWithIndexOldAddressingMode ::= expr? ROUND_L AddressRegister SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
AddressRegisterIndirectWithIndexNewAddressingMode ::= ROUND_L (expr SEPARATOR)? AddressRegister SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
ProgramCounterIndirectWithDisplacementOldAddressingMode ::= (ROUND_L PC ROUND_R) | (expr ROUND_L PC ROUND_R)
ProgramCounterIndirectWithDisplacementNewAddressingMode ::= ROUND_L expr SEPARATOR PC ROUND_R
ProgramCounterIndirectWithIndexOldAddressingMode ::= expr ROUND_L PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
ProgramCounterIndirectWithIndexNewAddressingMode ::= ROUND_L expr SEPARATOR PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
ProgramCounterIndirectWithIndexOldAddressingMode ::= expr? ROUND_L PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
ProgramCounterIndirectWithIndexNewAddressingMode ::= ROUND_L (expr SEPARATOR)? PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
AbsoluteAddressAddressingMode ::= expr AddressSize? !ROUND_L
private RegisterRange ::= (DataOrAddressRegister OP_MINUS DataOrAddressRegister)
RegisterListAddressingMode ::= (DataOrAddressRegister|RegisterRange) (OP_AR_DIV (DataOrAddressRegister|RegisterRange))*
RegisterListAddressingMode ::= (DataOrAddressRegister|RegisterRange) ((OP_AR_DIV|OP_MINUS) (DataOrAddressRegister|RegisterRange))*
ImmediateData ::= HASH expr {extends=AddressingMode}
expr ::= binary_logical_or_expr