mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 23:52:26 +00:00
Complete the cmp set.
This commit is contained in:
parent
125d97cc41
commit
7f6a955a71
@ -355,12 +355,12 @@ enum class Operation: uint8_t {
|
|||||||
|
|
||||||
/// Floating point compare ordered.
|
/// Floating point compare ordered.
|
||||||
/// fcmpo
|
/// fcmpo
|
||||||
/// crfD(), frA(), feB()
|
/// crfD(), frA(), frB()
|
||||||
fcmpo,
|
fcmpo,
|
||||||
|
|
||||||
/// Floating point compare unordered.
|
/// Floating point compare unordered.
|
||||||
/// fcmpu
|
/// fcmpu
|
||||||
/// crfD(), frA(), feB()
|
/// crfD(), frA(), frB()
|
||||||
fcmpu,
|
fcmpu,
|
||||||
|
|
||||||
/// Floating point convert to integer word.
|
/// Floating point convert to integer word.
|
||||||
|
@ -310,6 +310,55 @@ NSString *offset(Instruction instruction) {
|
|||||||
XCTAssertEqual([columns[4] intValue], instruction.imm());
|
XCTAssertEqual([columns[4] intValue], instruction.imm());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Operation::cmp:
|
||||||
|
if([operation isEqualToString:@"cmpw"]) {
|
||||||
|
XCTAssertFalse(instruction.l());
|
||||||
|
XCTAssertFalse(instruction.crfD());
|
||||||
|
AssertEqualR(columns[3], instruction.rA());
|
||||||
|
AssertEqualR(columns[4], instruction.rB());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if([operation isEqualToString:@"cmp"]) {
|
||||||
|
XCTAssertEqualObjects(columns[3], conditionreg(instruction.crfD()));
|
||||||
|
AssertEqualR(columns[4], instruction.rA());
|
||||||
|
AssertEqualR(columns[5], instruction.rB());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSAssert(FALSE, @"Didn't handle cmp %@", line);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Operation::cmpl:
|
||||||
|
if([operation isEqualToString:@"cmplw"]) {
|
||||||
|
XCTAssertFalse(instruction.l());
|
||||||
|
if(instruction.crfD()) {
|
||||||
|
XCTAssertEqualObjects(columns[3], conditionreg(instruction.crfD()));
|
||||||
|
AssertEqualR(columns[4], instruction.rA());
|
||||||
|
AssertEqualR(columns[5], instruction.rB());
|
||||||
|
} else {
|
||||||
|
AssertEqualR(columns[3], instruction.rA());
|
||||||
|
AssertEqualR(columns[4], instruction.rB());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSAssert(FALSE, @"Didn't handle cmpl %@", line);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Operation::cmpli:
|
||||||
|
case Operation::cmpi:
|
||||||
|
if([operation isEqualToString:@"cmpwi"] || [operation isEqualToString:@"cmplwi"]) {
|
||||||
|
XCTAssertFalse(instruction.l());
|
||||||
|
} else {
|
||||||
|
XCTAssertTrue(instruction.l());
|
||||||
|
}
|
||||||
|
|
||||||
|
XCTAssertEqualObjects(columns[3], conditionreg(instruction.crfD()));
|
||||||
|
AssertEqualR(columns[4], instruction.rA());
|
||||||
|
XCTAssertEqual([columns[5] hexInt], instruction.simm());
|
||||||
|
break;
|
||||||
|
|
||||||
#define NoArg(x) \
|
#define NoArg(x) \
|
||||||
case Operation::x: \
|
case Operation::x: \
|
||||||
AssertEqualOperationName(operation, @#x); \
|
AssertEqualOperationName(operation, @#x); \
|
||||||
@ -677,6 +726,19 @@ NSString *offset(Instruction instruction) {
|
|||||||
|
|
||||||
#undef crfDS
|
#undef crfDS
|
||||||
|
|
||||||
|
#define crfDfAfB(x) \
|
||||||
|
case Operation::x: \
|
||||||
|
AssertEqualOperationName(operation, @#x, instruction); \
|
||||||
|
XCTAssertEqualObjects(columns[3], conditionreg(instruction.crfD())); \
|
||||||
|
AssertEqualFR(columns[4], instruction.frA()); \
|
||||||
|
AssertEqualFR(columns[5], instruction.frB()); \
|
||||||
|
break;
|
||||||
|
|
||||||
|
crfDfAfB(fcmpo);
|
||||||
|
crfDfAfB(fcmpu);
|
||||||
|
|
||||||
|
#undef crfDfAfB
|
||||||
|
|
||||||
case Operation::bcx:
|
case Operation::bcx:
|
||||||
case Operation::bclrx:
|
case Operation::bclrx:
|
||||||
case Operation::bcctrx: {
|
case Operation::bcctrx: {
|
||||||
|
Loading…
Reference in New Issue
Block a user