home *** CD-ROM | disk | FTP | other *** search
- /
- /
-
- / quicker sort
-
- / mov $base,r1
- / mov $base+[n*width],r2
- / mov $width,r3
- / jsr pc,qsort
-
- / r0,r1,r2,r3,r4 are used
-
- .globl qsort
- .globl compare
-
- qsort:
- mov r5,-(sp)
- mov r4,-(sp)
- bit $1,r3
- bne 1f
- bit $1,r1
- bne 1f
- cmp r3,$2
- bne 2f
- mov $exch1,exchange
- br 3f
- 2:
- mov r3,r5
- clc
- ror r5
- mov r5,width
- mov $exchw,exchange
- br 3f
- 1:
- mov $exchb,exchange
- 3:
- jsr pc,qs1
- mov (sp)+,r4
- mov (sp)+,r5
- rts pc
-
- qs1:
- mov r1,r5
- neg r5
- add r2,r5
- bgt 1f
- rts pc
- 1:
- clr r4
- dvd r3,r4
- asr r4
- mpy r3,r4
- mov r5,r4
- add r1,r4
-
- mov r1,-(sp)
- mov r2,-(sp)
-
- loop:
- cmp r1,r4
- bhis loop1
- mov r1,r0
- jsr pc,compare
- bgt loop1
- add r3,r1
- br loop
-
- loop1:
- cmp r2,r4
- blos 1f
- sub r3,r2
- mov r2,r0
- jsr pc,compare
- bge loop1
-
- jsr pc,*exchange
- cmp r1,r4
- bne loop
- mov r2,r4
- br loop
-
- 1:
- cmp r1,r4
- beq 1f
- jsr pc,*exchange
- mov r1,r4
- br loop1
-
- 1:
- mov (sp)+,r2
- mov r4,-(sp)
- mov r4,r1
- add r3,r1
- mov r2,r0
- sub r1,r0
- sub 2(sp),r4
- cmp r0,r4
- blo 1f
- mov (sp)+,r0
- mov (sp)+,r4
- mov r1,-(sp)
- mov r2,-(sp)
- mov r0,r2
- mov r4,r1
- 1:
- jsr pc,qs1
- mov (sp)+,r2
- mov (sp)+,r1
- br qs1
-
- exchb:
- mov r1,-(sp)
- mov r2,-(sp)
- mov r3,r5
- 1:
- movb (r1),r0
- movb (r2),(r1)+
- movb r0,(r2)+
- sob r5,1b
- mov (sp)+,r2
- mov (sp)+,r1
- rts pc
-
- exchw:
- mov r1,-(sp)
- mov r2,-(sp)
- mov width,r5
- 1:
- mov (r1),r0
- mov (r2),(r1)+
- mov r0,(r2)+
- sob r5,1b
- mov (sp)+,r2
- mov (sp)+,r1
- rts pc
-
- exch1:
- mov (r1),r0
- mov (r2),(r1)
- mov r0,(r2)
- rts pc
-
- .bss
- exchange: .=.+2
- width: .=.+2
-