예제 #1
0
    def test_div(self):
        asm = DarwinARM64()
        r1 = Register('x0', False)
        r2 = Register('x1', False)
        asm.div(r1, r2)

        assert asm.output == 'sdiv x0, x0, x1\n'
예제 #2
0
    def test_sub(self):
        asm = DarwinARM64()
        r1 = Register('x0', False)
        r2 = Register('x1', False)
        asm.sub(r1, r2)

        assert asm.output == 'sub x0, x0, x1\n'
예제 #3
0
    def test_mul(self):
        asm = DarwinARM64()
        r1 = Register('x0', False)
        r2 = Register('x1', False)
        asm.mul(r1, r2)

        assert asm.output == 'mul x0, x0, x1\n'
예제 #4
0
    def test_add(self):
        asm = DarwinARM64()
        r1 = Register('x0', False)
        r2 = Register('x1', False)
        asm.add(r1, r2)

        assert asm.output == 'add x0, x0, x1\n'
예제 #5
0
    def test_postamble(self):
        asm = DarwinARM64()
        asm.postamble()

        assert asm.output == (
            'mov x0, #0\n'
            'mov x16, #1\n'
            'svc #0x80\n'
        )
예제 #6
0
    def test_preamble(self):
        asm = DarwinARM64()
        asm.preamble()

        assert asm.output == (
            '.global _start\n'
            '.align 4\n'
            '_start:\n'
        )
예제 #7
0
    def create(system=None, machine=None):
        system = system or platform.system()
        machine = machine or platform.machine()

        match [system.lower(), machine.lower()]:
            case ['darwin', 'arm64']:
                return DarwinARM64()
            case _:
                msg = (f'Could not determine assembly engine for '
                       f'{system} {machine} platform')
                raise CodeGenerationError(msg)
예제 #8
0
    def test_initial_output(self):
        asm = DarwinARM64()

        assert asm.output == ''
예제 #9
0
    def test_load(self):
        asm = DarwinARM64()
        asm.load(5)

        assert asm.output == 'mov x8, #5\n'
예제 #10
0
    def test_initial_registers(self):
        asm = DarwinARM64()
        registers = [reg.name for reg in asm.registers.pool]

        assert registers == ['x8', 'x9', 'x10', 'x11']