mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 11:40:18 +01:00
py/emitinlinerv32: Add inline assembler support for RV32.
This commit adds support for writing inline assembler functions when targeting a RV32IMC processor. Given that this takes up a bit of rodata space due to its large instruction decoding table and its extensive error messages, it is enabled by default only on offline targets such as mpy-cross and the qemu port. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit is contained in:
committed by
Damien George
parent
3044233ea3
commit
268acb714d
33
tests/inlineasm/rv32/asmdata.py
Normal file
33
tests/inlineasm/rv32/asmdata.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# test the "data" directive
|
||||
|
||||
|
||||
@micropython.asm_rv32
|
||||
def ret_num(a0) -> uint:
|
||||
slli(a0, a0, 2)
|
||||
addi(a0, a0, 16)
|
||||
auipc(a1, 0)
|
||||
add(a1, a1, a0)
|
||||
lw(a0, 0(a1))
|
||||
jal(zero, HERE)
|
||||
data(4, 0x12345678, 0x20000000, 0x40000000, 0x7FFFFFFF + 1, (1 << 32) - 2)
|
||||
label(HERE)
|
||||
|
||||
|
||||
for i in range(5):
|
||||
print(hex(ret_num(i)))
|
||||
|
||||
|
||||
@micropython.asm_rv32
|
||||
def ret_num_la(a0) -> uint:
|
||||
slli(a0, a0, 2)
|
||||
la(a1, DATA)
|
||||
add(a1, a1, a0)
|
||||
lw(a0, 0(a1))
|
||||
jal(zero, HERE)
|
||||
label(DATA)
|
||||
data(4, 0x12345678, 0x20000000, 0x40000000, 0x7FFFFFFF + 1, (1 << 32) - 2)
|
||||
label(HERE)
|
||||
|
||||
|
||||
for i in range(5):
|
||||
print(hex(ret_num_la(i)))
|
||||
Reference in New Issue
Block a user