.csb now works.
authorDavid Given <dg@cowlark.com>
Sun, 26 May 2013 12:06:25 +0000 (13:06 +0100)
committerDavid Given <dg@cowlark.com>
Sun, 26 May 2013 12:06:25 +0000 (13:06 +0100)
--HG--
branch : dtrg-videocore
rename : mach/vc4/libem/csa.s => mach/vc4/libem/csb.s

mach/vc4/build.mk
mach/vc4/libem/csb.s [new file with mode: 0644]
mach/vc4/ncg/table

index 36b801a..b7ca860 100644 (file)
@@ -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 (file)
index 0000000..7ed74c3
--- /dev/null
@@ -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
+
index 41a2b2a..56a3d87 100644 (file)
@@ -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