26 //speicheradresse des parameters zurueckgeben
30 //speicheradresse des pointers zeigt auf 16*8 feld = 128bit
37 // Packed COMpare Greater Than (Byte)"
38 // achtung beim intuitiven lesen des befehles. 'kleiner'
39 // ist mit 'groesser' vertauscht und vice versa
40 pcmpgtb const65, %xmm9
43 // Y = min(X, 'a' - 'A')
49 // retuniere an die richtige speicheradresse
52 //entspricht ein byte dem nullbyte dann steht an jener stelle 0xff sonst 0x00
53 pcmpeqb const00, %xmm11
54 //hol die MSBs aller bytes raus
58 //ist %ecx gleich null? dann die naechsten 16byte bitte
63 //ab hier uebler hax um nach \0 trotzdem die gleichen bytes wie
64 //input zu haben, also um selbiges verhalten wie asmb_ref zu erzwingen
66 //\0 byte stelle durch rausfinden des MSB des %ecx
69 //das ergebnis zweimal abspeichern
72 //hint: in %xmm9 ist differenz gespeichert (vgl .differenz)
74 //leider shiften nur mit immediate! :(
115 //betreffende speicherstelle in %xmm11 laden
116 movdqu -16(%rdi), %xmm11
117 //und overhead wieder subtrahieren
120 //ergebnis zurueckspielen und fertig \o/
121 movdqu %xmm11, -16(%rdi)
127 .section .eh_frame,"a",@progbits
129 .long .LECIE1-.LSCIE1
147 .long .LEFDE1-.LASFDE1
149 .long .LASFDE1-.Lframe1
155 .ident "GCC: (Debian 4.3.2-1.1) 4.3.2"
156 .section .note.GNU-stack,"",@progbits