aboutsummaryrefslogtreecommitdiffstats
path: root/lcc/x86/linux/tst/wf1.sbk
diff options
context:
space:
mode:
Diffstat (limited to 'lcc/x86/linux/tst/wf1.sbk')
-rwxr-xr-xlcc/x86/linux/tst/wf1.sbk437
1 files changed, 437 insertions, 0 deletions
diff --git a/lcc/x86/linux/tst/wf1.sbk b/lcc/x86/linux/tst/wf1.sbk
new file mode 100755
index 0000000..fb237a3
--- /dev/null
+++ b/lcc/x86/linux/tst/wf1.sbk
@@ -0,0 +1,437 @@
+.globl main
+.text
+.align 16
+.type main,@function
+main:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+subl $24,%esp
+movl $0,-24(%ebp)
+movl $0,next
+jmp .LC3
+.LC2:
+leal -24(%ebp),%edi
+pushl %edi
+leal -20(%ebp),%edi
+pushl %edi
+call lookup
+addl $8,%esp
+incl (,%eax)
+.LC3:
+leal -20(%ebp),%edi
+pushl %edi
+call getword
+addl $4,%esp
+cmpl $0,%eax
+jne .LC2
+pushl -24(%ebp)
+call tprint
+addl $4,%esp
+movl $0,%eax
+.LC1:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf5:
+.size main,.Lf5-main
+.globl err
+.align 16
+.type err,@function
+err:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+pushl 20(%ebp)
+pushl $.LC7
+call printf
+addl $8,%esp
+pushl $1
+call exit
+addl $4,%esp
+movl $0,%eax
+.LC6:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf8:
+.size err,.Lf8-err
+.globl getword
+.align 16
+.type getword,@function
+getword:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+subl $8,%esp
+.LC10:
+.LC11:
+call getchar
+movl %eax,%edi
+movl %edi,-4(%ebp)
+cmpl $-1,%edi
+je .LC13
+pushl -4(%ebp)
+call isletter
+addl $4,%esp
+cmpl $0,%eax
+je .LC10
+.LC13:
+movl 20(%ebp),%edi
+movl %edi,-8(%ebp)
+jmp .LC17
+.LC14:
+movl -8(%ebp),%edi
+leal 1(%edi),%esi
+movl %esi,-8(%ebp)
+movl -4(%ebp),%esi
+movl %esi,%ebx
+movb %bl,(,%edi)
+.LC15:
+call getchar
+movl %eax,-4(%ebp)
+.LC17:
+pushl -4(%ebp)
+call isletter
+addl $4,%esp
+movl %eax,-4(%ebp)
+cmpl $0,%eax
+jne .LC14
+movl -8(%ebp),%edi
+movb $0,(,%edi)
+movl -8(%ebp),%edi
+movl 20(%ebp),%esi
+cmpl %esi,%edi
+jbe .LC18
+movl $1,%eax
+jmp .LC9
+.LC18:
+movl $0,%eax
+.LC9:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf20:
+.size getword,.Lf20-getword
+.globl isletter
+.align 16
+.type isletter,@function
+isletter:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+movl 20(%ebp),%edi
+cmpl $65,%edi
+jl .LC22
+cmpl $90,%edi
+jg .LC22
+addl $32,20(%ebp)
+.LC22:
+movl 20(%ebp),%edi
+cmpl $97,%edi
+jl .LC24
+cmpl $122,%edi
+jg .LC24
+movl 20(%ebp),%eax
+jmp .LC21
+.LC24:
+movl $0,%eax
+.LC21:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf26:
+.size isletter,.Lf26-isletter
+.globl lookup
+.align 16
+.type lookup,@function
+lookup:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+subl $4,%esp
+movl 24(%ebp),%edi
+movl (,%edi),%edi
+cmpl $0,%edi
+je .LC28
+movl 24(%ebp),%edi
+movl (,%edi),%edi
+pushl 12(%edi)
+pushl 20(%ebp)
+call strcmp
+addl $8,%esp
+movl %eax,-4(%ebp)
+cmpl $0,-4(%ebp)
+jge .LC30
+movl 24(%ebp),%edi
+movl (,%edi),%edi
+leal 4(%edi),%edi
+pushl %edi
+pushl 20(%ebp)
+call lookup
+addl $8,%esp
+movl %eax,%edi
+jmp .LC27
+.LC30:
+cmpl $0,-4(%ebp)
+jle .LC32
+movl 24(%ebp),%edi
+movl (,%edi),%edi
+leal 8(%edi),%edi
+pushl %edi
+pushl 20(%ebp)
+call lookup
+addl $8,%esp
+movl %eax,%edi
+jmp .LC27
+.LC32:
+movl 24(%ebp),%edi
+movl (,%edi),%eax
+jmp .LC27
+.LC28:
+cmpl $2000,next
+jl .LC34
+pushl $.LC36
+call err
+addl $4,%esp
+.LC34:
+movl next,%edi
+sall $4,%edi
+movl $0,words(%edi)
+movl next,%edi
+sall $4,%edi
+movl $0,words+8(%edi)
+movl $0,words+4(%edi)
+pushl 20(%ebp)
+call strlen
+addl $4,%esp
+leal 1(%eax),%edi
+pushl %edi
+call malloc
+addl $4,%esp
+movl next,%esi
+sall $4,%esi
+movl %eax,words+12(%esi)
+movl next,%edi
+sall $4,%edi
+movl words+12(%edi),%edi
+cmpl $0,%edi
+jne .LC40
+pushl $.LC43
+call err
+addl $4,%esp
+.LC40:
+pushl 20(%ebp)
+movl next,%edi
+sall $4,%edi
+pushl words+12(%edi)
+call strcpy
+addl $8,%esp
+movl next,%edi
+leal 1(%edi),%esi
+movl %esi,next
+sall $4,%edi
+leal words(%edi),%edi
+movl 24(%ebp),%esi
+movl %edi,(,%esi)
+movl %edi,%eax
+.LC27:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf45:
+.size lookup,.Lf45-lookup
+.globl tprint
+.align 16
+.type tprint,@function
+tprint:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+movl 20(%ebp),%edi
+cmpl $0,%edi
+je .LC47
+movl 20(%ebp),%edi
+pushl 4(%edi)
+call tprint
+addl $4,%esp
+movl 20(%ebp),%edi
+pushl 12(%edi)
+pushl (,%edi)
+pushl $.LC49
+call printf
+addl $12,%esp
+movl 20(%ebp),%edi
+pushl 8(%edi)
+call tprint
+addl $4,%esp
+.LC47:
+movl $0,%eax
+.LC46:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf50:
+.size tprint,.Lf50-tprint
+.globl strcmp
+.align 16
+.type strcmp,@function
+strcmp:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+jmp .LC53
+.LC52:
+movl 20(%ebp),%edi
+leal 1(%edi),%esi
+movl %esi,20(%ebp)
+movsbl (,%edi),%edi
+cmpl $0,%edi
+jne .LC55
+movl $0,%eax
+jmp .LC51
+.LC55:
+incl 24(%ebp)
+.LC53:
+movl 20(%ebp),%edi
+movsbl (,%edi),%edi
+movl 24(%ebp),%esi
+movsbl (,%esi),%esi
+cmpl %esi,%edi
+je .LC52
+movl 20(%ebp),%edi
+movsbl (,%edi),%edi
+cmpl $0,%edi
+jne .LC57
+movl $-1,%eax
+jmp .LC51
+.LC57:
+movl 24(%ebp),%edi
+movsbl (,%edi),%edi
+cmpl $0,%edi
+jne .LC59
+movl $1,%eax
+jmp .LC51
+.LC59:
+movl 20(%ebp),%edi
+movsbl (,%edi),%edi
+movl 24(%ebp),%esi
+movsbl (,%esi),%esi
+movl %edi,%eax
+subl %esi,%eax
+.LC51:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf61:
+.size strcmp,.Lf61-strcmp
+.bss
+.globl next
+.align 4
+.type next,@object
+.size next,4
+.comm next,4
+.globl words
+.align 4
+.type words,@object
+.size words,32000
+.comm words,32000
+.data
+.align 1
+.LC49:
+.byte 37
+.byte 100
+.byte 9
+.byte 37
+.byte 115
+.byte 10
+.byte 0
+.align 1
+.LC43:
+.byte 111
+.byte 117
+.byte 116
+.byte 32
+.byte 111
+.byte 102
+.byte 32
+.byte 119
+.byte 111
+.byte 114
+.byte 100
+.byte 32
+.byte 115
+.byte 116
+.byte 111
+.byte 114
+.byte 97
+.byte 103
+.byte 101
+.byte 0
+.align 1
+.LC36:
+.byte 111
+.byte 117
+.byte 116
+.byte 32
+.byte 111
+.byte 102
+.byte 32
+.byte 110
+.byte 111
+.byte 100
+.byte 101
+.byte 32
+.byte 115
+.byte 116
+.byte 111
+.byte 114
+.byte 97
+.byte 103
+.byte 101
+.byte 0
+.align 1
+.LC7:
+.byte 63
+.byte 32
+.byte 37
+.byte 115
+.byte 10
+.byte 0
+.text
+.ident "LCC: 4.1"