quakeforge/libs/gamecode
Bill Currie 925797b1d4 [gamecode] Add a new Ruamoko instruction set
When it's finalized (most of the conversion operations will go, probably
the float bit ops, maybe (very undecided) the 3-component vector ops,
and likely the CALLN ops), this will be the actual instruction set for
Ruamoko.

Main features:
 - Significant reduction in redundant instructions: no more multiple
   opcodes to move the one operand size.
 - load, store, push, and pop share unified addressing mode encoding
   (with the exception of mode 0 for load as that is redundant with mode
   0 for store, thus load mode 0 gives quick access to entity.field).
 - Full support for both 32 and 64 bit signed integer, unsigned integer,
   and floating point values.
 - SIMD for 1, 2, (currently) 3, and 4 components. Transfers support up
   to 128-bit wide operations (need two operations to transfer a full
   4-component double/long vector), but all math operations support both
   128-bit (32-bit components) and 256-bit (64-bit components) vectors.
 - "Interpreted" operations for the various vector sizes: complex dot
   and multiplication, 3d vector dot and cross product, quaternion dot
   and multiplication, along with qv and vq shortcuts.
 - 4-component swizzles for both sizes (not yet implemented, but the
   instructions are allocated), with the option to zero or negate (thus
   conjugates for complex and quaternion values) individual components.
 - "Based offsets": all relevant instructions include base register
   indices for all three operands allowing for direct access to any of
   four areas (eg, current entity, current stack frame, Objective-QC
   self, ...) instructions to set a register and push/pop the four
   registers to/from the stack.

Remaining work:
 - Implement swizzle operations and a few other stragglers.
 = Make a decision about conversion operations (if any instructions
   remain, they'll be just single-component (at 14 meaningful pairs,
   that's a lot of instructions to waste on SIMD versions).
 - Decide whether to keep CALL1-CALL8: probably little point in
   supporting two different calling conventions, and it would free up
   another eight instructions.
 - Unit tests for the instructions.
 - Teach qfcc to generate code for the new instruction set (hah, biggest
   job, I'm sure, though hopefully not as crazy as the rewrite eleven
   years ago).
2022-01-03 00:49:49 +09:00
..
Makemodule.am [build] Move to non-recursive make 2020-06-25 11:35:37 +09:00
pr_builtins.c [gamecode] Remove the wart from def and function names 2021-12-31 15:02:31 +09:00
pr_debug.c [gamecode] Rename the old opcodes 2022-01-02 21:30:02 +09:00
pr_edict.c [gamecode] Switch to using type parameter op macros 2022-01-02 20:46:32 +09:00
pr_exec.c [gamecode] Add a new Ruamoko instruction set 2022-01-03 00:49:49 +09:00
pr_load.c [gamecode] Remove the wart from def and function names 2021-12-31 15:02:31 +09:00
pr_opcode.c [gamecode] Add a new Ruamoko instruction set 2022-01-03 00:49:49 +09:00
pr_parse.c [gamecode] Remove the wart from def and function names 2021-12-31 15:02:31 +09:00
pr_resolve.c [gamecode] Bail if PR_SearchDefs is given 0 defs 2020-03-16 14:24:48 +09:00
pr_resource.c [util] Make hash-tables semi-thread-safe 2020-03-25 15:43:16 +09:00
pr_strings.c [gamecode] Set pr_string_resources in PR_Strings_Init 2021-12-26 22:46:07 +09:00
pr_zone.c [gamecode] Conform with libc malloc for pr zone 2021-09-26 12:03:44 +09:00