From 308d41e0834d4caafa57bc2ad8e82499876b84c8 Mon Sep 17 00:00:00 2001 From: David Given Date: Sun, 26 May 2013 00:22:08 +0100 Subject: [PATCH] Added triple-quad load and store (used by the signal stuff). --HG-- branch : dtrg-videocore --- mach/vc4/ncg/table | 47 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/mach/vc4/ncg/table b/mach/vc4/ncg/table index 523879cfe..41a2b2ae2 100644 --- a/mach/vc4/ncg/table +++ b/mach/vc4/ncg/table @@ -72,6 +72,7 @@ TOKENS GPROFFSET = { GPR reg; INT off; } 4 off "(" reg ")". GPRGPR = { GPR reg1; GPR reg2; } 4 "(" reg1 "," reg2 ")". GPRINC = { GPR reg; } 4 "(" reg ")++". + ADDCMPB_LL = { GPR rd; INT val; INT vs; ADDR dest; } 4 rd ",#" val ",#" vs "," dest. /* Primitives */ @@ -105,6 +106,7 @@ INSTRUCTIONS add GPR:wo, GPR:ro, GPR+CONST:ro. add GPR:rw, GPR+CONST:ro. + addcmpbge "addcmpb.ge" ADDCMPB_LL:rw. adds2 GPR:rw, GPR+CONST:ro. adds4 GPR:rw, GPR+CONST:ro. adds8 GPR:rw, GPR+CONST:ro. @@ -150,6 +152,7 @@ INSTRUCTIONS push GPR0+GPR6+GPR16+GPRFP:ro, GPRLR:ro. sub GPR:wo, GPR:ro, CONST+GPR:ro. sub GPR:rw, GPR+CONST:ro. + st GPR:ro, GPRINC:rw. st GPR:ro, GPROFFSET+GPRGPR+LABEL:ro. stb GPR:ro, GPROFFSET+GPRGPR+LABEL:ro. sth GPR:ro, GPROFFSET+GPRGPR+LABEL:ro. @@ -556,7 +559,25 @@ PATTERNS ld %b, {GPROFFSET, %b, 4} yields %b %a - pat loi !nicesize($1) /* Load arbitrary size */ + pat loi $1==3*QUAD /* Load triple-quad indirect */ + with LABEL + uses REG, REG, REG + gen + lea %b, %1 + ld %a, {GPROFFSET, %b, 0} + ld %b, {GPROFFSET, %b, 4} + ld %b, {GPROFFSET, %b, 8} + yields %c %b %a + with GPR + uses reusing %1, REG, REG, REG + gen + add %b, %1, GP + ld %a, {GPROFFSET, %b, 0} + ld %b, {GPROFFSET, %b, 4} + ld %c, {GPROFFSET, %b, 8} + yields %c %b %a + + pat loi /* Load arbitrary size */ leaving loc $1 los QUAD @@ -621,16 +642,30 @@ PATTERNS st %2, {GPROFFSET, %a, 0} st %3, {GPROFFSET, %a, 4} + pat sti $1==3*QUAD /* Load triple-quad indirect */ + with LABEL GPR GPR GPR + uses REG + gen + lea %a, %1 + st %2, {GPROFFSET, %a, 0} + st %3, {GPROFFSET, %a, 4} + st %4, {GPROFFSET, %a, 8} + with GPR GPR GPR GPR + uses reusing %1, REG=%1 + gen + add %a, GP + st %2, {GPROFFSET, %a, 0} + st %3, {GPROFFSET, %a, 4} + st %4, {GPROFFSET, %a, 8} + pat sti /* Store arbitrary size */ leaving loc $1 sts QUAD - pat sts /* Load arbitrary size */ - with STACK - kills ALL - gen - bl {LABEL, ".sts"} + pat sts /* Store arbitrary size */ + leaving + cal ".sts" -- 2.34.1