Fix treatment of out-of-range values in switch csa.
authorDavid Given <dg@cowlark.com>
Wed, 5 Jun 2013 22:57:23 +0000 (23:57 +0100)
committerDavid Given <dg@cowlark.com>
Wed, 5 Jun 2013 22:57:23 +0000 (23:57 +0100)
--HG--
branch : dtrg-videocore

mach/vc4/libem/csa.s

index 1628199..25332f2 100644 (file)
        add r0, gp
 
        ld r2, 4 (r0)            ! check lower bound
-       cmp r1, r2
-       mov.lo r1, r2            ! r1 = min(r1, r2)
+
+       b.lo r1, r2, default     ! jump to default if r1 < r2
 
        sub r1, r2               ! adjust value to be 0-based
 
        ld r2, 8 (r0)            ! check upper bound
-       cmp r1, r2
-       mov.hi r1, r2            ! r1 = max(r1, r2)
+       b.hi r1, r2, default     ! jump to default if r1 > r2
 
     add r1, #3
+go:
     ld r1, (r0, r1)          ! load destination address
     add r1, gp
     b r1                     ! ...and go
 
+default:
+       mov r1, #0               ! index of default value
+       b go