mirror of
https://github.com/TomHarte/CLK.git
synced 2024-10-04 01:57:54 +00:00
Implement XCHG.
This commit is contained in:
parent
5125907048
commit
a83b43a1ae
@ -502,6 +502,16 @@ void test(IntT &destination, IntT source, Status &status) {
|
|||||||
status.parity = result;
|
status.parity = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename IntT>
|
||||||
|
void xchg(IntT &destination, IntT &source) {
|
||||||
|
/*
|
||||||
|
TEMP ← DEST
|
||||||
|
DEST ← SRC
|
||||||
|
SRC ← TEMP
|
||||||
|
*/
|
||||||
|
std::swap(destination, source);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename IntT>
|
template <typename IntT>
|
||||||
void mul(IntT &destination_high, IntT &destination_low, IntT source, Status &status) {
|
void mul(IntT &destination_high, IntT &destination_low, IntT source, Status &status) {
|
||||||
/*
|
/*
|
||||||
@ -1029,112 +1039,112 @@ template <
|
|||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNO:
|
case Operation::JNO:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::Overflow>(),
|
!status.condition<Status::Condition::Overflow>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JB:
|
case Operation::JB:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
status.condition<Status::Condition::Below>(),
|
status.condition<Status::Condition::Below>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNB:
|
case Operation::JNB:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::Below>(),
|
!status.condition<Status::Condition::Below>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JZ:
|
case Operation::JZ:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
status.condition<Status::Condition::Zero>(),
|
status.condition<Status::Condition::Zero>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNZ:
|
case Operation::JNZ:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::Zero>(),
|
!status.condition<Status::Condition::Zero>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JBE:
|
case Operation::JBE:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
status.condition<Status::Condition::BelowOrEqual>(),
|
status.condition<Status::Condition::BelowOrEqual>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNBE:
|
case Operation::JNBE:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::BelowOrEqual>(),
|
!status.condition<Status::Condition::BelowOrEqual>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JS:
|
case Operation::JS:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
status.condition<Status::Condition::Sign>(),
|
status.condition<Status::Condition::Sign>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNS:
|
case Operation::JNS:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::Sign>(),
|
!status.condition<Status::Condition::Sign>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JP:
|
case Operation::JP:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::ParityOdd>(),
|
!status.condition<Status::Condition::ParityOdd>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNP:
|
case Operation::JNP:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
status.condition<Status::Condition::ParityOdd>(),
|
status.condition<Status::Condition::ParityOdd>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JL:
|
case Operation::JL:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
status.condition<Status::Condition::Less>(),
|
status.condition<Status::Condition::Less>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNL:
|
case Operation::JNL:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::Less>(),
|
!status.condition<Status::Condition::Less>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JLE:
|
case Operation::JLE:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
status.condition<Status::Condition::LessOrEqual>(),
|
status.condition<Status::Condition::LessOrEqual>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
case Operation::JNLE:
|
case Operation::JNLE:
|
||||||
Primitive::jump(
|
Primitive::jump(
|
||||||
!status.condition<Status::Condition::LessOrEqual>(),
|
!status.condition<Status::Condition::LessOrEqual>(),
|
||||||
instruction.displacement(),
|
instruction.displacement(),
|
||||||
registers,
|
registers,
|
||||||
flow_controller);
|
flow_controller);
|
||||||
break;
|
return;
|
||||||
|
|
||||||
case Operation::CLC: Primitive::clc(status); return;
|
case Operation::CLC: Primitive::clc(status); return;
|
||||||
case Operation::CLD: Primitive::cld(status); return;
|
case Operation::CLD: Primitive::cld(status); return;
|
||||||
@ -1143,6 +1153,8 @@ template <
|
|||||||
case Operation::STD: Primitive::std(status); return;
|
case Operation::STD: Primitive::std(status); return;
|
||||||
case Operation::STI: Primitive::sti(status); return;
|
case Operation::STI: Primitive::sti(status); return;
|
||||||
case Operation::CMC: Primitive::cmc(status); return;
|
case Operation::CMC: Primitive::cmc(status); return;
|
||||||
|
|
||||||
|
case Operation::XCHG: Primitive::xchg(destination(), source()); return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write to memory if required to complete this operation.
|
// Write to memory if required to complete this operation.
|
||||||
|
@ -418,11 +418,16 @@ struct FailedExecution {
|
|||||||
// @"80.7.json.gz", @"81.7.json.gz", @"83.7.json.gz",
|
// @"80.7.json.gz", @"81.7.json.gz", @"83.7.json.gz",
|
||||||
|
|
||||||
// TEST
|
// TEST
|
||||||
@"84.json.gz", @"85.json.gz",
|
// @"84.json.gz", @"85.json.gz",
|
||||||
@"A8.json.gz", @"A9.json.gz",
|
// @"A8.json.gz", @"A9.json.gz",
|
||||||
@"F6.0.json.gz", @"F7.0.json.gz",
|
// @"F6.0.json.gz", @"F7.0.json.gz",
|
||||||
|
|
||||||
// TODO: XCHG, XLAT
|
// XCHG
|
||||||
|
@"86.json.gz", @"87.json.gz",
|
||||||
|
@"91.json.gz", @"92.json.gz", @"93.json.gz", @"94.json.gz",
|
||||||
|
@"95.json.gz", @"96.json.gz", @"97.json.gz",
|
||||||
|
|
||||||
|
// TODO: XLAT
|
||||||
// TODO: SALC, SETMO, SETMOC
|
// TODO: SALC, SETMO, SETMOC
|
||||||
|
|
||||||
]];
|
]];
|
||||||
|
Loading…
Reference in New Issue
Block a user