quakeforge/libs
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
..
audio [quakefs] Take in the pointer to the global hunk 2021-12-24 06:45:13 +09:00
client [build] Clean up a pile of distcheck issues 2021-12-24 06:45:13 +09:00
console [console] Unhook hooked functions on shutdown 2021-12-29 21:50:38 +09:00
gamecode [gamecode] Add a new Ruamoko instruction set 2022-01-03 00:49:49 +09:00
gib [input] Clean out more keys.h refs 2021-12-24 06:45:13 +09:00
image Do an audit of hunk mark usage 2021-07-29 11:43:27 +09:00
input [input] Get single axis info for unbound devices 2021-12-24 06:45:13 +09:00
models [math] Clean up vector component operations 2022-01-02 01:15:17 +09:00
net [qw] Use a callback for netchan logging 2021-12-27 17:54:58 +09:00
qw [util] Make sizebuf and msg sizes unisgned 2021-04-04 15:53:53 +09:00
ruamoko [ruamoko] Clear dtable list on reset 2021-12-30 00:21:29 +09:00
scene [scene] Provide direct access to the world matrix 2021-12-24 06:45:13 +09:00
ui [ui] Add two view manipulation functions 2021-07-10 17:57:59 +09:00
util [simd] Split out the ivec implementations 2022-01-02 16:02:57 +09:00
video [qfcc] Warn when super dealloc invocation is missing 2021-12-24 22:45:43 +09:00
Makemodule.am [scene] Rename libQFentity to libQFscene 2021-07-24 14:20:59 +09:00