Fixed wrong carry condition code info, how could that go unnoticed so long.
This commit is contained in:
parent
a3f979b48b
commit
6233cefd20
@ -88,13 +88,13 @@ fun getCcInfo(cc: Int): Map<String, Pair<String, String>> {
|
|||||||
CC_V_OR -> "*" to CC_OR_STR
|
CC_V_OR -> "*" to CC_OR_STR
|
||||||
else -> "*" to "$CC_RES_STR (usually for overflows)"
|
else -> "*" to "$CC_RES_STR (usually for overflows)"
|
||||||
}
|
}
|
||||||
xnzvcMap["C"] = when (cc and CC_V_TST) {
|
xnzvcMap["C"] = when (cc and CC_C_TST) {
|
||||||
0 -> "-" to CC_NOT_AFFECTED_STR
|
0 -> "-" to CC_NOT_AFFECTED_STR
|
||||||
CC_V_SET -> "1" to CC_ALWAYS_SET_STR
|
CC_C_SET -> "1" to CC_ALWAYS_SET_STR
|
||||||
CC_V_CLEAR -> "0" to CC_ALWAYS_CLEAR_STR
|
CC_C_CLEAR -> "0" to CC_ALWAYS_CLEAR_STR
|
||||||
CC_V_UNDEF -> "U" to CC_UNDEFINED_STR
|
CC_C_UNDEF -> "U" to CC_UNDEFINED_STR
|
||||||
CC_V_AND -> "*" to CC_AND_STR
|
CC_C_AND -> "*" to CC_AND_STR
|
||||||
CC_V_OR -> "*" to CC_OR_STR
|
CC_C_OR -> "*" to CC_OR_STR
|
||||||
else -> "*" to "$CC_RES_STR (usually carry/borrow)"
|
else -> "*" to "$CC_RES_STR (usually carry/borrow)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1085,7 +1085,7 @@ object M68kIsa {
|
|||||||
IsaData(
|
IsaData(
|
||||||
"stop", "Stop",
|
"stop", "Stop",
|
||||||
machine = ALL_MACHINES, isPrivileged = true,
|
machine = ALL_MACHINES, isPrivileged = true,
|
||||||
modes = listOf(AllowedAdrMode(setOf(AddressMode.IMMEDIATE_DATA), null, OP_UNSIZED))
|
modes = listOf(AllowedAdrMode(setOf(AddressMode.IMMEDIATE_DATA), null, OP_UNSIZED, affectedCc = cc("*****")))
|
||||||
),
|
),
|
||||||
|
|
||||||
*autoExpandForOtherCpus(
|
*autoExpandForOtherCpus(
|
||||||
@ -1208,10 +1208,10 @@ object M68kIsa {
|
|||||||
|
|
||||||
private val mnemonicLookupMap = isaData.asSequence()
|
private val mnemonicLookupMap = isaData.asSequence()
|
||||||
.flatMap {
|
.flatMap {
|
||||||
(if (it.conditionCodes.isEmpty()) it.altMnemonics.plus(it.mnemonic) else it.altMnemonics.plus(it.conditionCodes
|
(if (it.conditionCodes.isEmpty()) it.altMnemonics.plus(it.mnemonic) else it.altMnemonics.plus(
|
||||||
.map { cc ->
|
it.conditionCodes
|
||||||
it.mnemonic.replace("CC", cc)
|
.map { cc -> it.mnemonic.replace("CC", cc) }))
|
||||||
})).map { mnemonic -> mnemonic to it }
|
.map { mnemonic -> mnemonic to it }
|
||||||
}
|
}
|
||||||
.groupBy({ it.first }) { it.second }
|
.groupBy({ it.first }) { it.second }
|
||||||
|
|
||||||
@ -1223,24 +1223,16 @@ object M68kIsa {
|
|||||||
|
|
||||||
fun findMatchingOpMode(candidates: List<IsaData>, op1: AddressMode?, op2: AddressMode?, opSize: Int?, specialReg: String?): List<IsaData> {
|
fun findMatchingOpMode(candidates: List<IsaData>, op1: AddressMode?, op2: AddressMode?, opSize: Int?, specialReg: String?): List<IsaData> {
|
||||||
return candidates.filter {
|
return candidates.filter {
|
||||||
it.modes.any { am ->
|
it.modes.any { am -> isAddressModeMatching(am, op1, op2, specialReg) && ((opSize == null) || ((opSize and am.size) == opSize)) }
|
||||||
isAddressModeMatching(am, op1, op2, specialReg)
|
|
||||||
&& ((opSize == null) || ((opSize and am.size) == opSize))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun findMatchingAddressMode(modes: List<AllowedAdrMode>, op1: AddressMode?, op2: AddressMode?, opSize: Int?, specialReg: String?): List<AllowedAdrMode> {
|
fun findMatchingAddressMode(modes: List<AllowedAdrMode>, op1: AddressMode?, op2: AddressMode?, opSize: Int?, specialReg: String?): List<AllowedAdrMode> {
|
||||||
return modes.filter { am ->
|
return modes.filter { am -> isAddressModeMatching(am, op1, op2, specialReg) && ((opSize == null) || ((opSize and am.size) == opSize)) }
|
||||||
isAddressModeMatching(am, op1, op2, specialReg)
|
|
||||||
&& ((opSize == null) || ((opSize and am.size) == opSize))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun findMatchingOpModeIgnoringSize(candidates: List<IsaData>, op1: AddressMode?, op2: AddressMode?, specialReg: String?): List<IsaData> {
|
fun findMatchingOpModeIgnoringSize(candidates: List<IsaData>, op1: AddressMode?, op2: AddressMode?, specialReg: String?): List<IsaData> {
|
||||||
return candidates.filter {
|
return candidates.filter { it.modes.any { am -> isAddressModeMatching(am, op1, op2, specialReg) } }
|
||||||
it.modes.any { am -> isAddressModeMatching(am, op1, op2, specialReg) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun findSupportedOpSizes(candidates: List<IsaData>, op1: AddressMode?, op2: AddressMode?, specialReg: String?): Int {
|
fun findSupportedOpSizes(candidates: List<IsaData>, op1: AddressMode?, op2: AddressMode?, specialReg: String?): Int {
|
||||||
@ -1253,6 +1245,6 @@ object M68kIsa {
|
|||||||
|
|
||||||
private fun isAddressModeMatching(am: AllowedAdrMode, op1: AddressMode?, op2: AddressMode?, specialReg: String?) =
|
private fun isAddressModeMatching(am: AllowedAdrMode, op1: AddressMode?, op2: AddressMode?, specialReg: String?) =
|
||||||
((((op1 == null) && (am.op1 == null)) || am.op1?.contains(op1) ?: false)
|
((((op1 == null) && (am.op1 == null)) || am.op1?.contains(op1) ?: false)
|
||||||
&& (((op2 == null) && (am.op2 == null)) || am.op2?.contains(op2) ?: false)
|
&& (((op2 == null) && (am.op2 == null)) || am.op2?.contains(op2) ?: false)
|
||||||
&& ((specialReg == null) || (am.specialReg?.split('|')?.any { it.equals(specialReg, true) } ?: false)))
|
&& ((specialReg == null) || (am.specialReg?.split('|')?.any { it.equals(specialReg, true) } ?: false)))
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user