diff options
Diffstat (limited to 'code/tools/lcc/x86/linux/tst/wf1.sbk')
-rw-r--r-- | code/tools/lcc/x86/linux/tst/wf1.sbk | 437 |
1 files changed, 437 insertions, 0 deletions
diff --git a/code/tools/lcc/x86/linux/tst/wf1.sbk b/code/tools/lcc/x86/linux/tst/wf1.sbk new file mode 100644 index 0000000..1c3ff04 --- /dev/null +++ b/code/tools/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" |