aboutsummaryrefslogtreecommitdiffstats
path: root/lcc/x86/linux/tst/sort.sbk
diff options
context:
space:
mode:
Diffstat (limited to 'lcc/x86/linux/tst/sort.sbk')
-rwxr-xr-xlcc/x86/linux/tst/sort.sbk330
1 files changed, 330 insertions, 0 deletions
diff --git a/lcc/x86/linux/tst/sort.sbk b/lcc/x86/linux/tst/sort.sbk
new file mode 100755
index 0000000..11dbcdd
--- /dev/null
+++ b/lcc/x86/linux/tst/sort.sbk
@@ -0,0 +1,330 @@
+.data
+.globl in
+.align 4
+.type in,@object
+in:
+.long 10
+.long 32
+.long -1
+.long 567
+.long 3
+.long 18
+.long 1
+.long -51
+.long 789
+.long 0
+.size in,40
+.globl main
+.text
+.align 16
+.type main,@function
+main:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+subl $4,%esp
+pushl $10
+pushl $in
+call sort
+addl $8,%esp
+movl $0,-4(%ebp)
+jmp .LC5
+.LC2:
+movl -4(%ebp),%edi
+pushl in(,%edi,4)
+call putd
+addl $4,%esp
+pushl $10
+call putchar
+addl $4,%esp
+.LC3:
+incl -4(%ebp)
+.LC5:
+movl -4(%ebp),%edi
+cmpl $10,%edi
+jb .LC2
+movl $0,%eax
+.LC1:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf6:
+.size main,.Lf6-main
+.globl putd
+.align 16
+.type putd,@function
+putd:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+cmpl $0,20(%ebp)
+jge .LC8
+pushl $45
+call putchar
+addl $4,%esp
+negl 20(%ebp)
+.LC8:
+movl 20(%ebp),%eax
+movl $10,%ecx
+cdq
+idivl %ecx
+cmpl $0,%eax
+je .LC10
+movl 20(%ebp),%eax
+movl $10,%ecx
+cdq
+idivl %ecx
+pushl %eax
+call putd
+addl $4,%esp
+.LC10:
+movl 20(%ebp),%eax
+movl $10,%ecx
+cdq
+idivl %ecx
+leal 48(%edx),%edi
+pushl %edi
+call putchar
+addl $4,%esp
+movl $0,%eax
+.LC7:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf12:
+.size putd,.Lf12-putd
+.globl sort
+.align 16
+.type sort,@function
+sort:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+movl 24(%ebp),%edi
+subl $1,%edi
+movl %edi,24(%ebp)
+pushl %edi
+pushl $0
+movl 20(%ebp),%edi
+movl %edi,xx
+pushl %edi
+call quick
+addl $12,%esp
+movl $0,%eax
+.LC13:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf14:
+.size sort,.Lf14-sort
+.globl quick
+.align 16
+.type quick,@function
+quick:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+subl $4,%esp
+movl 28(%ebp),%edi
+cmpl %edi,24(%ebp)
+jl .LC16
+jmp .LC15
+.LC16:
+pushl 28(%ebp)
+pushl 24(%ebp)
+pushl 20(%ebp)
+call partition
+addl $12,%esp
+movl %eax,-4(%ebp)
+movl -4(%ebp),%edi
+subl $1,%edi
+pushl %edi
+pushl 24(%ebp)
+pushl 20(%ebp)
+call quick
+addl $12,%esp
+pushl 28(%ebp)
+movl -4(%ebp),%edi
+leal 1(%edi),%edi
+pushl %edi
+pushl 20(%ebp)
+call quick
+addl $12,%esp
+movl $0,%eax
+.LC15:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf18:
+.size quick,.Lf18-quick
+.globl partition
+.align 16
+.type partition,@function
+partition:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+subl $8,%esp
+incl 28(%ebp)
+movl 24(%ebp),%edi
+movl %edi,-8(%ebp)
+movl -8(%ebp),%edi
+movl 20(%ebp),%esi
+movl (%esi,%edi,4),%edi
+movl %edi,-4(%ebp)
+jmp .LC21
+.LC20:
+incl 24(%ebp)
+jmp .LC24
+.LC23:
+incl 24(%ebp)
+.LC24:
+movl 24(%ebp),%edi
+movl 20(%ebp),%esi
+movl -4(%ebp),%ebx
+cmpl %ebx,(%esi,%edi,4)
+jl .LC23
+decl 28(%ebp)
+jmp .LC27
+.LC26:
+decl 28(%ebp)
+.LC27:
+movl 28(%ebp),%edi
+movl 20(%ebp),%esi
+movl -4(%ebp),%ebx
+cmpl %ebx,(%esi,%edi,4)
+jg .LC26
+movl 28(%ebp),%edi
+cmpl %edi,24(%ebp)
+jge .LC29
+movl 20(%ebp),%edi
+movl 28(%ebp),%esi
+leal (%edi,%esi,4),%esi
+pushl %esi
+movl 24(%ebp),%esi
+leal (%edi,%esi,4),%edi
+pushl %edi
+call exchange
+addl $8,%esp
+.LC29:
+.LC21:
+movl 28(%ebp),%edi
+cmpl %edi,24(%ebp)
+jl .LC20
+movl 20(%ebp),%edi
+movl 28(%ebp),%esi
+leal (%edi,%esi,4),%esi
+pushl %esi
+movl -8(%ebp),%esi
+leal (%edi,%esi,4),%edi
+pushl %edi
+call exchange
+addl $8,%esp
+movl 28(%ebp),%eax
+.LC19:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf31:
+.size partition,.Lf31-partition
+.globl exchange
+.align 16
+.type exchange,@function
+exchange:
+pushl %ebp
+pushl %ebx
+pushl %esi
+pushl %edi
+movl %esp,%ebp
+subl $4,%esp
+movl xx,%edi
+movl $4,%esi
+movl 24(%ebp),%ebx
+subl %edi,%ebx
+movl %ebx,%eax
+movl %esi,%ecx
+cdq
+idivl %ecx
+pushl %eax
+movl 20(%ebp),%ebx
+subl %edi,%ebx
+movl %ebx,%eax
+movl %esi,%ecx
+cdq
+idivl %ecx
+pushl %eax
+pushl $.LC33
+call printf
+addl $12,%esp
+movl 20(%ebp),%edi
+movl (,%edi),%esi
+movl %esi,-4(%ebp)
+movl 24(%ebp),%esi
+movl (,%esi),%esi
+movl %esi,(,%edi)
+movl 24(%ebp),%edi
+movl -4(%ebp),%esi
+movl %esi,(,%edi)
+movl $0,%eax
+.LC32:
+movl %ebp,%esp
+popl %edi
+popl %esi
+popl %ebx
+popl %ebp
+ret
+.Lf34:
+.size exchange,.Lf34-exchange
+.bss
+.globl xx
+.align 4
+.type xx,@object
+.size xx,4
+.comm xx,4
+.data
+.align 1
+.LC33:
+.byte 101
+.byte 120
+.byte 99
+.byte 104
+.byte 97
+.byte 110
+.byte 103
+.byte 101
+.byte 40
+.byte 37
+.byte 100
+.byte 44
+.byte 37
+.byte 100
+.byte 41
+.byte 10
+.byte 0
+.text
+.ident "LCC: 4.1"