asma: ahh.. man kann ja gleich die speicherstelle der konstanten angeben
authorBernhard Urban <lewurm@gmail.com>
Tue, 9 Mar 2010 14:08:00 +0000 (15:08 +0100)
committerBernhard Urban <lewurm@gmail.com>
Tue, 9 Mar 2010 14:08:00 +0000 (15:08 +0100)
asma/asma.s

index 301ecef81af469df72d92edc9ad039a73b9144ae..e8ef5086f2593e41f4b446665e7a80f824d7d9e5 100644 (file)
@@ -27,19 +27,13 @@ asma:
        * (~102)+1 = 10011010 = 0x9A */
        movdqa const9a, %xmm8
 
-       //init %xmm9 mit "'a'-'A'= 97-65 = 32 = 0x20
-       movdqa const20, %xmm9
-
        //speicheradresse des pointers zeigt auf 16*8 feld = 128bit
        movdqu (%rdi), %xmm11
-       movdqu (%rdi), %xmm12
 
        /*addiere in %xmm11 "min_t-'A'"
-       * = -128 - 65 = 63 = 0x3f */
-       movdqa const3f, %xmm10
-
-       //c+min_t-'A'
-       paddb %xmm10, %xmm11
+       * = -128 - 65 = 63 = 0x3f
+       * c+min_t-'A' */
+       paddb const3f, %xmm11
 
        /*"Packed COMpare Greater Than (Byte)"
        * X = 'Z' + 1 + min_t - 'A' > c + min_t - 'A' ? 0xff : 0
@@ -47,15 +41,16 @@ asma:
        * ist mit 'groesser' vertauscht und vice versa */
        pcmpgtb %xmm11, %xmm8
 
-       //Y = min(X, 'a' - 'A')
-       pminub %xmm9, %xmm8
-
-       //c += Y
-       paddb %xmm8, %xmm12
+       /*Y = min(X, 'a' - 'A')
+       * mit "'a'-'A'= 97-65 = 32 = 0x20 */
+       pminub const20, %xmm8
 
        //retuniere an die richtige speicheradresse
        mov %rdi, %rax
-       movapd %xmm12, (%rax)
+       //c += Y
+       paddb (%rax), %xmm8
+       movapd %xmm8, (%rax)
+
        ret
 .LFE2:
        .size   asma, .-asma