pxor %xmm2, %xmm4
pxor %xmm2, %xmm5
- #init %xmm2 mit "'Z' + 1 + min_t - 'A'" fuer jedes byte
+ #init %xmm1 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, %xmm1
+ pslldq $8, %xmm1
+ movq %rbx, %xmm1
+
+ #init %xmm2 mit "'a'-'A'= 97-65 = 32 = 0x20
+ mov $0x2020202020202020, %rbx
movq %rbx, %xmm2
pslldq $8, %xmm2
movq %rbx, %xmm2
- #init %xmm4 mit "'a'-'A'= 97-65 = 32 = 0x20
- mov $0x2020202020202020, %rbx
- movq %rbx, %xmm4
- pslldq $8, %xmm4
- movq %rbx, %xmm4
-
#speicheradresse des pointers zeigt auf 16*8 feld = 128bit
- movdqu (%rdi), %xmm1
- movdqu (%rdi), %xmm3
+ movdqu (%rdi), %xmm4
+ movdqu (%rdi), %xmm5
- #addiere in %xmm1 "min_t-'A'"
+ #addiere in %xmm4 "min_t-'A'"
# = -128 - 65 = 63 = 0x3f
mov $0x3f3f3f3f3f3f3f3f, %rbx
- movq %rbx, %xmm5
- pslldq $8, %xmm5
- movq %rbx, %xmm5
+ movq %rbx, %xmm3
+ pslldq $8, %xmm3
+ movq %rbx, %xmm3
- paddb %xmm5, %xmm1
+ #c+min_t-'A'
+ paddb %xmm3, %xmm4
#"Packed COMpare Greater Than (Byte)"
- pcmpgtb %xmm2, %xmm1
+ #bla = 'Z' + 1 + min_t - 'A' > c + min_t - 'A' ? 0xff : 0
+ #TODO: vllt vertauschen?
+ pcmpgtb %xmm4, %xmm1
- pminub %xmm4, %xmm1
+ #min(bla, 'a' - 'A')
+ pminub %xmm1, %xmm2
- paddb %xmm1, %xmm3
+ paddb %xmm2, %xmm5
- movq %xmm3, (%rax)
+ movq %xmm5, (%rax)
ret
.LFE2:
.size asma, .-asma