RISCV: Create millicode at the start of each program for common operations
RISCV: Call functions using a table of function proxies
Since the total size of all the proxies is below 4K (each proxy is a
single JALR instruction, or in worst case an AUIPC + a JALR), and they
are packed together in a special section, any proxy can be addressed
as a 12-bit offset from a base address kept in a register. This means
a single JALR instruction can be used to call any of them even when a
relative call would not reach.
Note that the proxies must be located in the .text segment in order to
be able to reach their destination with a relative jump (on 64-bit).
Thus, generating the proxies on the heap at runtime would not work.
RISCV: Inline some RETURN opcodes
- pike/src/Makefile.in (+3/-0)(3 lines)
- pike/src/code/riscv.c (+704/-1)(705 lines)
- pike/src/code/riscv.h (+110/-0)(110 lines)
- pike/src/configure.in (+23/-0)(23 lines)
- pike/src/pikecode.c (+6/-0)(6 lines)
- pike/src/pikecode.h (+7/-0)(7 lines)
- pike/src/program.h (+7/-0)(7 lines)
RISCV: Minimal machine code backend
RISCV: Add disassembler