- .file "asma.c"
-
.data
.align 16
const65:
.text
.globl asma
- .type asma, @function
asma:
-.LFB2:
// folgendes kann umgeformt werden (max_t = 127)
// X = 'Z' + 1 + min_t - 'A' > c + min_t - 'A' ? 0xff : 0
// X = -c + max_t + 'A' > - 'Z' -1 + max_t + 'A' ? 0xff : 0
movdqu %xmm11, (%rax)
ret
-.LFE2:
- .size asma, .-asma
- .section .eh_frame,"a",@progbits
-.Lframe1:
- .long .LECIE1-.LSCIE1
-.LSCIE1:
- .long 0x0
- .byte 0x1
- .string "zR"
- .uleb128 0x1
- .sleb128 -8
- .byte 0x10
- .uleb128 0x1
- .byte 0x3
- .byte 0xc
- .uleb128 0x7
- .uleb128 0x8
- .byte 0x90
- .uleb128 0x1
- .align 8
-.LECIE1:
-.LSFDE1:
- .long .LEFDE1-.LASFDE1
-.LASFDE1:
- .long .LASFDE1-.Lframe1
- .long .LFB2
- .long .LFE2-.LFB2
- .uleb128 0x0
- .align 8
-.LEFDE1:
- .ident "GCC: (Debian 4.3.2-1.1) 4.3.2"
- .section .note.GNU-stack,"",@progbits
.text
.globl asmb
- .type asmb, @function
asmb:
-.LFB2:
//speicheradresse des parameters zurueckgeben
mov %rdi, %rax
//ist %ecx gleich null? dann die naechsten 16byte bitte
jecxz .nextround
-/*
- //===============
- //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 %xmm9 ist differenz gespeichert (vgl .differenz)
-
- //leider shiften nur mit immediate! :(
- btr $3, %r11d
- jnc .rechtsshift1
- psrldq $8, %xmm9
-
-.rechtsshift1:
- btr $2, %r11d
- jnc .rechtsshift2
- psrldq $4, %xmm9
-
-.rechtsshift2:
- btr $1, %r11d
- jnc .rechtsshift3
- psrldq $2, %xmm9
-
-.rechtsshift3:
- btr $0, %r11d
- jnc .linksshift
- psrldq $1, %xmm9
-#==================
-.linksshift:
- btr $3, %ecx
- jnc .linksshift1
- pslldq $8, %xmm9
-
-.linksshift1:
- btr $2, %ecx
- jnc .linksshift2
- pslldq $4, %xmm9
-
-.linksshift2:
- btr $1, %ecx
- jnc .linksshift3
- pslldq $2, %xmm9
-
-.linksshift3:
- btr $0, %ecx
- jnc .endshift
- pslldq $1, %xmm9
-
-.endshift:
- //betreffende speicherstelle in %xmm11 laden
- movdqu -16(%rdi), %xmm11
- //und overhead wieder subtrahieren
- psubb %xmm9, %xmm11
-
- //ergebnis zurueckspielen und fertig \o/
- movdqu %xmm11, -16(%rdi)
-*/
-
ret
-.LFE2:
- .size asmb, .-asmb
- .section .eh_frame,"a",@progbits
-.Lframe1:
- .long .LECIE1-.LSCIE1
-.LSCIE1:
- .long 0x0
- .byte 0x1
- .string "zR"
- .uleb128 0x1
- .sleb128 -8
- .byte 0x10
- .uleb128 0x1
- .byte 0x3
- .byte 0xc
- .uleb128 0x7
- .uleb128 0x8
- .byte 0x90
- .uleb128 0x1
- .align 8
-.LECIE1:
-.LSFDE1:
- .long .LEFDE1-.LASFDE1
-.LASFDE1:
- .long .LASFDE1-.Lframe1
- .long .LFB2
- .long .LFE2-.LFB2
- .uleb128 0x0
- .align 8
-.LEFDE1:
- .ident "GCC: (Debian 4.3.2-1.1) 4.3.2"
- .section .note.GNU-stack,"",@progbits