mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-27 20:51:07 +00:00
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). |
||
---|---|---|
.. | ||
client | ||
evdev | ||
QF | ||
qw | ||
win32 | ||
adivtab.h | ||
alsa_funcs_list.h | ||
anorm_dots.h | ||
anorms.h | ||
asm_draw.h | ||
asm_i386.h | ||
block8.h | ||
block16.h | ||
bsearch.h | ||
buildnum.h | ||
compat.h | ||
context_sdl.h | ||
context_win.h | ||
context_x11.h | ||
d_iface.h | ||
d_ifacea.h | ||
d_local.h | ||
dga_check.h | ||
exp.h | ||
fbset.h | ||
garbage.h | ||
getopt.h | ||
gib_buffer.h | ||
gib_builtin.h | ||
gib_classes.h | ||
gib_execute.h | ||
gib_function.h | ||
gib_handle.h | ||
gib_object.h | ||
gib_parse.h | ||
gib_process.h | ||
gib_regex.h | ||
gib_semantics.h | ||
gib_thread.h | ||
gib_tree.h | ||
gib_vars.h | ||
gl_warp_sin.h | ||
in_win.h | ||
in_x11.h | ||
logos.h | ||
Makemodule.am | ||
mod_internal.h | ||
net_dgrm.h | ||
net_loop.h | ||
net_udp.h | ||
net_vcr.h | ||
net_wins.h | ||
netchan.h | ||
netmain.h | ||
noisetextures.h | ||
old_keys.h | ||
ops.h | ||
pstdint.h | ||
qfalloca.h | ||
qfselect.h | ||
qstring.h | ||
quakeasm.h | ||
quicksort.h | ||
r_cvar.h | ||
r_dynamic.h | ||
r_internal.h | ||
r_local.h | ||
r_scrap.h | ||
r_screen.h | ||
r_shared.h | ||
regex.h | ||
rua_internal.h | ||
sbar.h | ||
skin_stencil.h | ||
snd_internal.h | ||
sv_console.h | ||
varrays.h | ||
vgamodes.h | ||
vid_gl.h | ||
vid_internal.h | ||
vid_sw.h | ||
vid_vulkan.h | ||
vregset.h | ||
winquake.h | ||
world.h |