mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-25 16:31:42 +00:00
Completely bypass ignored tests.
This commit is contained in:
parent
2e7c1acb88
commit
740b0e35d5
@ -377,7 +377,7 @@ struct MemoryLedger {
|
|||||||
std::map<uint32_t, FailureRecord> failures;
|
std::map<uint32_t, FailureRecord> failures;
|
||||||
|
|
||||||
uint32_t opcode = 0;
|
uint32_t opcode = 0;
|
||||||
bool ignore_test = false;
|
bool ignore_opcode = false;
|
||||||
uint32_t masks[16];
|
uint32_t masks[16];
|
||||||
uint32_t test_pc_offset = 8;
|
uint32_t test_pc_offset = 8;
|
||||||
|
|
||||||
@ -388,7 +388,7 @@ struct MemoryLedger {
|
|||||||
|
|
||||||
if(label == "**") {
|
if(label == "**") {
|
||||||
memset(masks, 0xff, sizeof(masks));
|
memset(masks, 0xff, sizeof(masks));
|
||||||
ignore_test = false;
|
ignore_opcode = false;
|
||||||
test_pc_offset = 8;
|
test_pc_offset = 8;
|
||||||
|
|
||||||
input >> opcode;
|
input >> opcode;
|
||||||
@ -413,7 +413,7 @@ struct MemoryLedger {
|
|||||||
// Tested CPU either doesn't switch into supervisor mode, or
|
// Tested CPU either doesn't switch into supervisor mode, or
|
||||||
// is sufficiently accurate in its pipeline that register
|
// is sufficiently accurate in its pipeline that register
|
||||||
// changes haven't happened yet.
|
// changes haven't happened yet.
|
||||||
ignore_test = true;
|
ignore_opcode = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction::Operation::MOV:
|
case Instruction::Operation::MOV:
|
||||||
@ -428,7 +428,7 @@ struct MemoryLedger {
|
|||||||
// MOV to PC; there are both pipeline capture errors in the test
|
// MOV to PC; there are both pipeline capture errors in the test
|
||||||
// set and its ARM won't change privilege level on a write to R15.
|
// set and its ARM won't change privilege level on a write to R15.
|
||||||
if(instruction.destination.value == 15) {
|
if(instruction.destination.value == 15) {
|
||||||
ignore_test = true;
|
ignore_opcode = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -442,20 +442,20 @@ struct MemoryLedger {
|
|||||||
// doesn't seem to have that effect on the ARM used to generate
|
// doesn't seem to have that effect on the ARM used to generate
|
||||||
// the test set.
|
// the test set.
|
||||||
if(instruction.destination.value == 15 || instruction.operand2.value == 15) {
|
if(instruction.destination.value == 15 || instruction.operand2.value == 15) {
|
||||||
ignore_test = true;
|
ignore_opcode = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction::Operation::STM:
|
case Instruction::Operation::STM:
|
||||||
case Instruction::Operation::LDM:
|
case Instruction::Operation::LDM:
|
||||||
// If the PC is involved, just skip the test; PC/PSR differences abound.
|
// If the PC is involved, just skip the test; PC/PSR differences abound.
|
||||||
ignore_test = instruction.operand1.value & (1 << 15);
|
ignore_opcode = instruction.operand1.value & (1 << 15);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Instruction::Operation::MCR:
|
case Instruction::Operation::MCR:
|
||||||
case Instruction::Operation::MRC:
|
case Instruction::Operation::MRC:
|
||||||
// The test case doesn't seem to throw on a missing coprocessor.
|
// The test case doesn't seem to throw on a missing coprocessor.
|
||||||
ignore_test = true;
|
ignore_opcode = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
@ -464,6 +464,8 @@ struct MemoryLedger {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(ignore_opcode) continue;
|
||||||
|
|
||||||
if(label == "Before:" || label == "After:") {
|
if(label == "Before:" || label == "After:") {
|
||||||
// Read register state.
|
// Read register state.
|
||||||
uint32_t regs[16];
|
uint32_t regs[16];
|
||||||
@ -501,11 +503,8 @@ struct MemoryLedger {
|
|||||||
} else {
|
} else {
|
||||||
// Execute test and compare.
|
// Execute test and compare.
|
||||||
++test_count;
|
++test_count;
|
||||||
if(ignore_test) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(opcode == 0xe5abb010 && test_count == 1) {
|
if(opcode == 0xe892000b && test_count == 1) {
|
||||||
printf("");
|
printf("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user