.type asmb, @function
asmb:
.LFB2:
- xor %rdx, %rdx
+ //speicheradresse des parameters zurueckgeben
+ mov %rdi, %rax
.nextround:
//speicheradresse des pointers zeigt auf 16*8 feld = 128bit
- movdqu (%rdi, %rdx, 8), %xmm11
+ movdqu (%rdi), %xmm11
// -64 - c
movdqa constc0, %xmm9
paddb %xmm9, %xmm11
// retuniere an die richtige speicheradresse
- movdqu %xmm11, (%rdi, %rdx, 8)
+ movdqu %xmm11, (%rdi)
//entspricht ein byte dem nullbyte dann steht an jener stelle 0xff sonst 0x00
pcmpeqb const00, %xmm11
//hol die MSBs aller bytes raus
pmovmskb %xmm11, %ecx
- add $2, %rdx
+ add $16, %rdi
//ist %ecx gleich null? dann die naechsten 16byte bitte
jecxz .nextround
- //speicheradresse des parameters zurueckgeben (wird noch modifziert)
- mov %rdi, %rax
-
/*
//===============
//ab hier uebler hax um nach \0 trotzdem die gleichen bytes wie
.endshift:
//betreffende speicherstelle in %xmm11 laden
- movdqu -16(%rax, %rdx, 8), %xmm11
+ movdqu -16(%rdi), %xmm11
//und overhead wieder subtrahieren
psubb %xmm9, %xmm11
//ergebnis zurueckspielen und fertig \o/
- movdqu %xmm11, -16(%rax, %rdx, 8)
+ movdqu %xmm11, -16(%rdi)
*/
ret