freedreno/a3xx/compiler: const file relative addressing
authorRob Clark <robclark@freedesktop.org>
Mon, 21 Jul 2014 19:24:30 +0000 (15:24 -0400)
committerRob Clark <robclark@freedesktop.org>
Wed, 23 Jul 2014 13:03:10 +0000 (09:03 -0400)
commita5ac36a75f7ceda1093dd982a7fc0c07faae7590
tree7ba9be849a36954f33d3ccdb633150e6ea357fb2
parentc18ae9c2937cb8f5094278911a238e1ca63e25a8
freedreno/a3xx/compiler: const file relative addressing

Teach new compiler scheduling and register assignment how to deal with
relative addressing.  This gets us what we need to avoid falling back to
old compiler for CONST[ADDR[0].x+n].  It is also a prerequisite for temp
file relative addressing, although that is going to also need some
cleverness in register assignment to keep arrays grouped together.

NOTE: doing address calculation in full precision and then narrowing to
s16 in the mov to addr reg seems to sometimes cause lockups (and
sometimes work?!).  It seems more reliable to do the address calculation
in s16, like the blob does.  Which means teaching RA how to deal with
mixed half and full precision allocation.  Fortunately that didn't turn
out to be too hard, so that is a nice bonus which we could probably take
better advantage of elsewhere.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/a3xx/fd3_compiler.c
src/gallium/drivers/freedreno/a3xx/instr-a3xx.h
src/gallium/drivers/freedreno/a3xx/ir3.h
src/gallium/drivers/freedreno/a3xx/ir3_cp.c
src/gallium/drivers/freedreno/a3xx/ir3_depth.c
src/gallium/drivers/freedreno/a3xx/ir3_dump.c
src/gallium/drivers/freedreno/a3xx/ir3_ra.c
src/gallium/drivers/freedreno/a3xx/ir3_sched.c