Table of Contents
1. RISCV CALL OPTIMIZE
1.1. FAR CALL
# RANGE: PC +-2GiB # NEED 8 BYTES auipc x1, offset[31:12] jalr x1, x1, offset[11:0]
OR
# RANGE: 0GiB ~ 4GiB # NEED 8 BYTES lui x1, offset[31:12] jalr x1, x1, offset[11:0]
1.2. NEARBY CALL
# RANGE: PC +-1MiB # NEED 4 BYTES jal x1, offset
1.3. REGISTER RELATED CALL
# RANGE: REG +-2KiB # NEED 4 BYTES jalr x1, reg, offset
WE CAN PUT FORTH CORE WORD ON 0X000~0X800, USE JALR X1, OFFSET(X0) CALL IT.
WE CAN USE A LOT OF GLOBAL POINTER REGISTERS TO OPTIMIZE FAR CALL INTO REGISTER RELATED CALL
BUT GNU GAS IS NOT SUPPORT THIS ACTION, WE MUST WRITE OWN ASSEMBLER
1.4. COMPRESSED NEARLY CALL
# RANGE: PC +-2KiB # NEED 2 BYTES c.jal (offset << 1)
1.5. COMPRESSED REGISTER RELATED CALL
# RANGE: REG +-0 # NEED 2 BYTES c.jalr reg
SAME WITH: 'JALR x1, reg, 0'