def test_assembler_modifiers(): source = """ ADDR = 0x20000000 addi zero zero 0 addi zero zero 0 addi zero zero 0 main: # without nestable exprs under hi / lo lui t0 %hi ADDR addi t0 t0 %lo(ADDR) addi t0 t0 main # with nestable exprs under hi / lo lui t0 %hi %position main ADDR addi t0 t0 %lo(%position(main, ADDR)) """ binary = asm.assemble(source) target = b''.join([ asm.ADDI(0, 0, 0), asm.ADDI(0, 0, 0), asm.ADDI(0, 0, 0), asm.LUI('t0', asm.relocate_hi(0x20000000)), asm.ADDI('t0', 't0', asm.relocate_lo(0x20000000)), asm.ADDI('t0', 't0', 12), asm.LUI('t0', asm.relocate_hi(0x20000000 + 12)), asm.ADDI('t0', 't0', asm.relocate_lo(0x20000000 + 12)), ]) assert binary == target
def test_relocate_hi_lo_sum(value): hi = asm.relocate_hi(value) lo = asm.relocate_lo(value) expected = asm.sign_extend(value, 32) sum_raw = (hi << 12) + lo sum_wrapped = c_int32(sum_raw).value assert sum_wrapped == expected
def test_relocate_hi(value, expected): assert asm.relocate_hi(value) == expected