aboutsummaryrefslogtreecommitdiffstats
path: root/lcc/sparc/solaris/tst/sort.sbk
diff options
context:
space:
mode:
Diffstat (limited to 'lcc/sparc/solaris/tst/sort.sbk')
-rwxr-xr-xlcc/sparc/solaris/tst/sort.sbk202
1 files changed, 202 insertions, 0 deletions
diff --git a/lcc/sparc/solaris/tst/sort.sbk b/lcc/sparc/solaris/tst/sort.sbk
new file mode 100755
index 0000000..8f67ef5
--- /dev/null
+++ b/lcc/sparc/solaris/tst/sort.sbk
@@ -0,0 +1,202 @@
+.section ".data"
+.global in
+.type in,#object
+.align 4
+in:
+.word 0xa
+.word 0x20
+.word 0xffffffff
+.word 0x237
+.word 0x3
+.word 0x12
+.word 0x1
+.word 0xffffffcd
+.word 0x315
+.word 0x0
+.size in,40
+.global main
+.section ".text"
+.align 4
+main:
+save %sp,-96,%sp
+set in,%o0
+set 10,%o1
+call sort; nop
+mov %g0,%i5
+ba .L5; nop
+.L2:
+sll %i5,2,%i4
+set in,%i3
+ld [%i4+%i3],%o0
+call putd; nop
+set 10,%o0
+call putchar; nop
+.L3:
+add %i5,1,%i5
+.L5:
+mov %i5,%i4
+set 10,%i3
+cmp %i4,%i3; blu .L2; nop
+mov %g0,%i0
+.L1:
+ret; restore
+.type main,#function
+.size main,.-main
+.global putd
+.align 4
+putd:
+save %sp,-96,%sp
+cmp %i0,0; bge .L7; nop
+set 45,%o0
+call putchar; nop
+neg %i0,%i0
+.L7:
+sra %i0,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i0,10,%i5
+cmp %i5,0; be .L9; nop
+sra %i0,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i0,10,%o0
+call putd; nop
+.L9:
+sra %i0,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i0,10,%g1
+; smul %g1,10,%g1; sub %i0,%g1,%i5
+add %i5,48,%o0
+call putchar; nop
+mov %g0,%i0
+.L6:
+ret; restore
+.type putd,#function
+.size putd,.-putd
+.global sort
+.align 4
+sort:
+save %sp,-96,%sp
+set xx,%i5
+st %i0,[%i5]
+mov %i0,%o0
+mov %g0,%o1
+sub %i1,1,%i5
+mov %i5,%i1
+mov %i5,%o2
+call quick; nop
+mov %g0,%i0
+.L11:
+ret; restore
+.type sort,#function
+.size sort,.-sort
+.global quick
+.align 4
+quick:
+save %sp,-96,%sp
+cmp %i1,%i2; bl .L13; nop
+ba .L12; nop
+.L13:
+mov %i0,%o0
+mov %i1,%o1
+mov %i2,%o2
+call partition; nop
+mov %o0,%i5
+mov %i0,%o0
+mov %i1,%o1
+sub %i5,1,%o2
+call quick; nop
+mov %i0,%o0
+add %i5,1,%o1
+mov %i2,%o2
+call quick; nop
+mov %g0,%i0
+.L12:
+ret; restore
+.type quick,#function
+.size quick,.-quick
+.global partition
+.align 4
+partition:
+save %sp,-96,%sp
+add %i2,1,%i2
+mov %i1,%i4
+sll %i4,2,%i3
+ld [%i3+%i0],%i5
+ba .L17; nop
+.L16:
+add %i1,1,%i1
+ba .L20; nop
+.L19:
+add %i1,1,%i1
+.L20:
+sll %i1,2,%i3
+ld [%i3+%i0],%i3
+cmp %i3,%i5; bl .L19; nop
+sub %i2,1,%i2
+ba .L23; nop
+.L22:
+sub %i2,1,%i2
+.L23:
+sll %i2,2,%i3
+ld [%i3+%i0],%i3
+cmp %i3,%i5; bg .L22; nop
+cmp %i1,%i2; bge .L25; nop
+sll %i1,2,%i3
+add %i3,%i0,%o0
+sll %i2,2,%i3
+add %i3,%i0,%o1
+call exchange; nop
+.L25:
+.L17:
+cmp %i1,%i2; bl .L16; nop
+sll %i4,2,%i3
+add %i3,%i0,%o0
+sll %i2,2,%i3
+add %i3,%i0,%o1
+call exchange; nop
+mov %i2,%i0
+.L15:
+ret; restore
+.type partition,#function
+.size partition,.-partition
+.global exchange
+.align 4
+exchange:
+save %sp,-96,%sp
+set .L28,%o0
+set xx,%i4
+ld [%i4],%i4
+mov %i0,%i3
+sub %i3,%i4,%i3
+sra %i3,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i3,4,%o1
+mov %i1,%i3
+sub %i3,%i4,%i4
+sra %i4,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i4,4,%o2
+call printf; nop
+ld [%i0],%i5
+ld [%i1],%i4
+st %i4,[%i0]
+st %i5,[%i1]
+mov %g0,%i0
+.L27:
+ret; restore
+.type exchange,#function
+.size exchange,.-exchange
+.section ".bss"
+.global xx
+.type xx,#object
+.size xx,4
+.common xx,4,4
+.section ".rodata"
+.align 1
+.L28:
+.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