Compiler and runtime: Added byte codes F_PUSH_CATCHES and F_CATCH_AT.
These are needed to be able to save and restore the recovery context
for generator functions.
Updates the code generators for quite a few machine code backends.
Merge remote-tracking branch 'origin/master' into new_utf8
Merge remote-tracking branch 'origin/8.1' into gobject-introspection
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
RISCV: Minimal machine code backend
RISCV: Add disassembler