asmb: hint von martin perner (btr statt cmp/sub) und gistupdate von ihm
[uebersetzerbau-ss10.git] / asmb / asmb.s
index e94d189c7f0b9bf56cbe620177e8b9760d984400..540a28fbccad1658866753fc016b6727ecacf860 100644 (file)
@@ -81,52 +81,44 @@ asmb:
        //hint: in %xmm15 ist differenz gespeichert (vgl .differenz)
 
        //leider shiften nur mit immediate! :(
-       cmp $8, %r11d
-       jc .rechtsshift1
+       btr $3, %r11d
+       jnc .rechtsshift1
        psrldq $8, %xmm15
-       sub $8, %r11d
 
 .rechtsshift1:
-       cmp $4, %r11d
-       jc .rechtsshift2
+       btr $2, %r11d
+       jnc .rechtsshift2
        psrldq $4, %xmm15
-       sub $4, %r11d
 
 .rechtsshift2:
-       cmp $2, %r11d
-       jc .rechtsshift3
+       btr $1, %r11d
+       jnc .rechtsshift3
        psrldq $2, %xmm15
-       sub $2, %r11d
 
 .rechtsshift3:
-       cmp $1, %r11d
-       jc .linksshift
+       btr $0, %r11d
+       jnc .linksshift
        psrldq $1, %xmm15
-       sub $1, %r11d
 #==================
 .linksshift:
-       cmp $8, %ecx
-       jc .linksshift1
+       btr $3, %ecx
+       jnc .linksshift1
        pslldq $8, %xmm15
-       sub $8, %ecx
 
 .linksshift1:
-       cmp $4, %ecx
-       jc .linksshift2
+       btr $2, %ecx
+       jnc .linksshift2
        pslldq $4, %xmm15
-       sub $4, %ecx
 
 .linksshift2:
-       cmp $2, %ecx
-       jc .linksshift3
+       btr $1, %ecx
+       jnc .linksshift3
        pslldq $2, %xmm15
-       sub $2, %ecx
 
 .linksshift3:
-       cmp $1, %ecx
-       jc .endshift
+       btr $0, %ecx
+       jnc .endshift
        pslldq $1, %xmm15
-       sub $1, %ecx
 
 .endshift:
        //betreffende speicherstelle in %xmm11 laden