From 9ba5b7c1d4389426f77f359356c959f3f3f9a2b6 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 8 Jan 2021 23:21:01 -0500 Subject: [PATCH] Adds a few more asserts. It's still just operands and displacements failing, which is nice. --- .../Mac/Clock SignalTests/x86DecoderTests.mm | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/x86DecoderTests.mm b/OSBindings/Mac/Clock SignalTests/x86DecoderTests.mm index 25688c417..310d4723f 100644 --- a/OSBindings/Mac/Clock SignalTests/x86DecoderTests.mm +++ b/OSBindings/Mac/Clock SignalTests/x86DecoderTests.mm @@ -33,6 +33,13 @@ namespace { // MARK: - Specific instruction asserts. +- (void)assert:(Instruction &)instruction operation:(Operation)operation size:(int)size source:(Source)source destination:(Source)destination { + XCTAssertEqual(instruction.operation, operation); + XCTAssertEqual(instruction.operation_size(), CPU::Decoder::x86::Size(size)); + XCTAssertEqual(instruction.source(), source); + XCTAssertEqual(instruction.destination(), destination); +} + - (void)assert:(Instruction &)instruction operation:(Operation)operation size:(int)size operand:(uint16_t)operand destination:(Source)destination { XCTAssertEqual(instruction.operation, operation); XCTAssertEqual(instruction.operation_size(), CPU::Decoder::x86::Size(size)); @@ -41,6 +48,12 @@ namespace { XCTAssertEqual(instruction.operand(), operand); } +- (void)assert:(Instruction &)instruction operation:(Operation)operation displacement:(int16_t)displacement { + XCTAssertEqual(instruction.operation, operation); + XCTAssertEqual(instruction.displacement(), displacement); +} + + // MARK: - Decoder - (void)decode:(const std::initializer_list &)stream { @@ -90,12 +103,15 @@ namespace { // 68 instructions are expected. XCTAssertEqual(instructions.size(), 63); - [self assert:instructions[0] operation:Operation::SUB size:2 operand:0xea77 destination:Source::AX]; - // sub $0xea77,%ax // jb 0x00000001 // dec %bx // mov $0x28,%ch + [self assert:instructions[0] operation:Operation::SUB size:2 operand:0xea77 destination:Source::AX]; + [self assert:instructions[1] operation:Operation::JB displacement:0x01]; + [self assert:instructions[2] operation:Operation::DEC size:2 source:Source::BX destination:Source::BX]; + [self assert:instructions[3] operation:Operation::MOV size:1 operand:0x28 destination:Source::CH]; + // ret // lret $0x4826 // gs insw (%dx),%es:(%di)