diff --git a/InstructionSets/PowerPC/Instruction.hpp b/InstructionSets/PowerPC/Instruction.hpp index 221d70813..4b67c85b1 100644 --- a/InstructionSets/PowerPC/Instruction.hpp +++ b/InstructionSets/PowerPC/Instruction.hpp @@ -540,7 +540,7 @@ struct Instruction { /// Whether to compare 32-bit or 64-bit numbers [for 64-bit implementations only]; @c 0 or @c non-0. uint32_t l() const { return opcode & 0x200000; } /// Enables setting of OV and SO in the XER; @c 0 or @c non-0. - uint32_t oe() const { return opcode & 0x800; } + uint32_t oe() const { return opcode & 0x400; } }; // Sanity check on Instruction size. diff --git a/OSBindings/Mac/Clock SignalTests/DingusdevPowerPCTests.mm b/OSBindings/Mac/Clock SignalTests/DingusdevPowerPCTests.mm index f3e0be5c5..1a506dab5 100644 --- a/OSBindings/Mac/Clock SignalTests/DingusdevPowerPCTests.mm +++ b/OSBindings/Mac/Clock SignalTests/DingusdevPowerPCTests.mm @@ -25,6 +25,14 @@ void AssertEqualOperationName(NSString *lhs, NSString *rhs) { XCTAssertEqualObjects(lhsMapped, rhsMapped); } +void AssertEqualOperationNameOE(NSString *lhs, Instruction instruction, NSString *rhs) { + XCTAssert([lhs characterAtIndex:lhs.length - 1] == 'x'); + lhs = [lhs substringToIndex:lhs.length - 1]; + if(instruction.oe()) lhs = [lhs stringByAppendingString:@"o"]; + if(instruction.rc()) lhs = [lhs stringByAppendingString:@"."]; + XCTAssertEqualObjects(lhs, rhs); +} + } @implementation DingusdevPowerPCTests @@ -118,12 +126,12 @@ void AssertEqualOperationName(NSString *lhs, NSString *rhs) { #define ABD(x) \ case Operation::x: \ - AssertEqualOperationName(operation, @#x); \ + AssertEqualOperationNameOE(@#x, instruction, operation); \ [self testABDInstruction:instruction columns:columns testZero:NO]; \ break; -// ABD(subfc); -// ABD(subfc_); + ABD(subfcx); + ABD(subfx); #undef ABD