From: David Given Date: Sun, 26 May 2013 12:06:25 +0000 (+0100) Subject: .csb now works. X-Git-Tag: release-6-0-pre-5~10^2~29 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=510888e6d50e1939017eb374bed16898c2caeb5d;p=ack.git .csb now works. --HG-- branch : dtrg-videocore rename : mach/vc4/libem/csa.s => mach/vc4/libem/csb.s --- diff --git a/mach/vc4/build.mk b/mach/vc4/build.mk index 36b801aff..b7ca860d8 100644 --- a/mach/vc4/build.mk +++ b/mach/vc4/build.mk @@ -1,5 +1,6 @@ arch-libem-vc4 := \ - csa.s + csa.s \ + csb.s arch-libend-vc4 = \ edata.s \ diff --git a/mach/vc4/libem/csb.s b/mach/vc4/libem/csb.s new file mode 100644 index 000000000..7ed74c39f --- /dev/null +++ b/mach/vc4/libem/csb.s @@ -0,0 +1,33 @@ +# +/* + * VideoCore IV support library for the ACK + * © 2013 David Given + * This file is redistributable under the terms of the 3-clause BSD license. + * See the file 'Copying' in the root of the distribution for the full text. + */ + +#include "videocore.h" + +.define .csb +.sect .data +.csb: + ! on entry: + ! r0 = un-fixed-up descriptor + ! r1 = value + add r0, gp ! r0 = fixed up descriptor + + adds8 r2, r0, #1 ! r2 = moving pointer + ld r3, 4 (r0) ! r3 = count + adds8 r3, r0, r3 ! r3 = end ptr + +loop: + ld r4, (r2)++ + b.eq r4, r1, matched ! r2 points at matching addr + addcmpb.le r2, #4, r3, loop +notmatched: + mov r2, r0 ! r2 points at default jump +matched: + ld r2, (r2) ! load destination address + add r2, gp ! fix up r2 + b r2 ! ...and go + diff --git a/mach/vc4/ncg/table b/mach/vc4/ncg/table index 41a2b2ae2..56a3d871a 100644 --- a/mach/vc4/ncg/table +++ b/mach/vc4/ncg/table @@ -1309,11 +1309,13 @@ PATTERNS pat csa /* Array-lookup switch */ with GPR0 GPR1 STACK + kills ALL gen b {LABEL, ".csa"} pat csb /* Table-lookup switch */ - with STACK + with GPR0 GPR1 STACK + kills ALL gen bl {LABEL, ".csb"} @@ -1484,28 +1486,44 @@ PATTERNS pat loc loc cfi $1==$2 && $1==QUAD /* Convert float -> integer */ leaving + loc 0 +#if 0 cal ".cfi" lfr QUAD +#endif pat loc loc cfu $1==$2 && $1==QUAD /* Convert float -> unsigned */ leaving + loc 0 +#if 0 cal ".cfu" lfr QUAD +#endif pat loc loc cif $1==$2 && $1==QUAD /* Convert integer -> float */ leaving + loc 0 +#if 0 cal ".cif" lfr QUAD +#endif pat loc loc cuf $1==$2 && $1==QUAD /* Convert unsigned -> float */ leaving + loc 0 +#if 0 cal ".cuf" lfr QUAD +#endif pat fef /* Split float */ leaving + loc 0 + loc 0 +#if 0 cal ".cuf" lfr QUAD*2 +#endif pat fif /* Multiply float and split (?) */ leaving