29 //speicheradresse des pointers zeigt auf 16*8 feld = 128bit
30 movdqu (%rdi, %rdx, 8), %xmm11
36 // Packed COMpare Greater Than (Byte)"
37 // achtung beim intuitiven lesen des befehles. 'kleiner'
38 // ist mit 'groesser' vertauscht und vice versa
39 pcmpgtb const65, %xmm9
42 // Y = min(X, 'a' - 'A')
48 // retuniere an die richtige speicheradresse
49 movdqu %xmm11, (%rdi, %rdx, 8)
51 //entspricht ein byte dem nullbyte dann steht an jener stelle 0xff sonst 0x00
52 pcmpeqb const00, %xmm11
53 //hol die MSBs aller bytes raus
57 //ist %ecx gleich null? dann die naechsten 16byte bitte
60 //speicheradresse des parameters zurueckgeben (wird noch modifziert)
65 //ab hier uebler hax um nach \0 trotzdem die gleichen bytes wie
66 //input zu haben, also um selbiges verhalten wie asmb_ref zu erzwingen
68 //\0 byte stelle durch rausfinden des MSB des %ecx
71 //das ergebnis zweimal abspeichern
74 //hint: in %xmm9 ist differenz gespeichert (vgl .differenz)
76 //leider shiften nur mit immediate! :(
117 //betreffende speicherstelle in %xmm11 laden
118 movdqu -16(%rax, %rdx, 8), %xmm11
119 //und overhead wieder subtrahieren
122 //ergebnis zurueckspielen und fertig \o/
123 movdqu %xmm11, -16(%rax, %rdx, 8)
129 .section .eh_frame,"a",@progbits
131 .long .LECIE1-.LSCIE1
149 .long .LEFDE1-.LASFDE1
151 .long .LASFDE1-.Lframe1
157 .ident "GCC: (Debian 4.3.2-1.1) 4.3.2"
158 .section .note.GNU-stack,"",@progbits