asma: vllt ist dieses 'min_t -'A'' doch nicht zum vernachlaessigen...
authorBernhard Urban <lewurm@gmail.com>
Mon, 1 Mar 2010 14:10:29 +0000 (15:10 +0100)
committerBernhard Urban <lewurm@gmail.com>
Mon, 1 Mar 2010 14:10:29 +0000 (15:10 +0100)
asma/asma.s

index 1edcffc761df40e49c53c8d07399410de9021b25..ecd4309f8595296e877552a1ebdac2a355ab979e 100644 (file)
@@ -25,9 +25,16 @@ min(’Z’+1+min_t-’A’ > c+min_t-’A’ ? 0xff : 0, ’a’-’A’)
 wobei min_t der minimale Wert des Datentyps ist, den der Vergleich behandelt (bei pcmpgtb also -128). Zusätzlich zu dem oben genannten dürften die Befehle pminub, paddb, und psubb nützlich sein. */
        pxor %xmm1, %xmm1
        pxor %xmm2, %xmm2
+       pxor %xmm2, %xmm3
+       pxor %xmm2, %xmm4
+       pxor %xmm2, %xmm5
 
-       #init %xmm2 mit "'Z' + 1" fuer jedes byte
-       mov $0x5a5a5a5a5a5a5a5a, %rbx
+       #init %xmm2 mit "'Z' + 1 + min_t - 'A'" fuer jedes byte
+       #'Z' + 1 + min_t - 'A' = 90 + 1 - 128 - 65 = -102
+       #102 = 01100110
+       #~102 = 10011001
+       #(~102)+1 = 10011010 = 0x9A
+       mov $0x9a9a9a9a9a9a9a9a, %rbx
        movq %rbx, %xmm2
        pslldq $8, %xmm2
        movq %rbx, %xmm2
@@ -42,6 +49,15 @@ wobei min_t der minimale Wert des Datentyps ist, den der Vergleich behandelt (be
        movdqu (%rdi), %xmm1
        movdqu (%rdi), %xmm3
 
+       #addiere in %xmm1 "min_t-'A'"
+       # = -128 - 65 = 63 = 0x3f
+       mov $0x3f3f3f3f3f3f3f3f, %rbx
+       movq %rbx, %xmm5
+       pslldq $8, %xmm5
+       movq %rbx, %xmm5
+
+       paddb %xmm5, %xmm1
+
        #"Packed COMpare Greater Than (Byte)"
        pcmpgtb %xmm2, %xmm1