+
+ /*===============
+ * ab hier uebler hax um nach \0 trotzdem die gleichen bytes wie
+ * input zu haben, also um selbiges verhalten wie asmb_ref zu erzwingen */
+
+ //\0 byte stelle durch rausfinden des MSB des %ecx
+ bsf %ecx, %r11d
+
+ //das ergebnis zweimal abspeichern
+ mov %r11d, %ecx
+
+ //hint: in %xmm15 ist differenz gespeichert (vgl .differenz)
+
+ //leider shiften nur mit immediate! :(
+ cmp $8, %r11d
+ jc .rechtsshift1
+ psrldq $8, %xmm15
+ sub $8, %r11d
+
+.rechtsshift1:
+ cmp $4, %r11d
+ jc .rechtsshift2
+ psrldq $4, %xmm15
+ sub $4, %r11d
+
+.rechtsshift2:
+ cmp $2, %r11d
+ jc .rechtsshift3
+ psrldq $2, %xmm15
+ sub $2, %r11d
+
+.rechtsshift3:
+ cmp $1, %r11d
+ jc .linksshift
+ psrldq $1, %xmm15
+ sub $1, %r11d
+#==================
+.linksshift:
+ cmp $8, %ecx
+ jc .linksshift1
+ pslldq $8, %xmm15
+ sub $8, %ecx
+
+.linksshift1:
+ cmp $4, %ecx
+ jc .linksshift2
+ pslldq $4, %xmm15
+ sub $4, %ecx
+
+.linksshift2:
+ cmp $2, %ecx
+ jc .linksshift3
+ pslldq $2, %xmm15
+ sub $2, %ecx
+
+.linksshift3:
+ cmp $1, %ecx
+ jc .endshift
+ pslldq $1, %xmm15
+ sub $1, %ecx
+
+.endshift:
+ //betreffende speicherstelle in %xmm11 laden
+ movdqu -16(%rax, %rdx, 8), %xmm11
+ //und overhead wieder subtrahieren
+ psubb %xmm15, %xmm11
+
+ //ergebnis zurueckspielen und fertig \o/
+ movapd %xmm11, -16(%rax, %rdx, 8)
+