-
Notifications
You must be signed in to change notification settings - Fork 0
/
radix8.s
83 lines (74 loc) · 1.41 KB
/
radix8.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
;for vasm assembler, madmac syntax
;#define sz SIZE
;type data[sz];
;void radix8(uint8_t *a) {
; for (int i = 0; i < 256; i++) c[i] = 0;
; for (int j = 0; j < sz; j++)
; c[a[j]]++;
; int j = 0;
; for (int i = 0; i < 256; i++)
; for (int k = 0; k < c[i]; k++)
; a[j++] = i;
;}
radix8: ld a,e
ld (.szlo+1),a
ld a,d
ld (.szhi+1),a
ld (.data2+1),hl
ld (.data1+1),hl
ld a,b
ld (.chi1+1),a
ld (.chi2+1),a
add a,2
ld (.cne1+1),a
ld h,b
ld l,0
.loop1: xor a
ld (hl),a
inc l
ld (hl),a
inc hl
ld a,h
.cne1: cp 0
jp nz,.loop1
.data1: ld hl,0
.loop3: ld d,h
ld e,l
ld l,(hl)
.chi2: ld h,0
inc (hl)
jr nz,.l1
inc h
inc (hl)
.l1: ld h,d
ld l,e
inc hl
ld a,l
.szlo: cp 0
jp nz,.loop3
ld a,h
.szhi: cp 0
jp nz,.loop3
.data2: ld hl,0 ;->a[j]
xor a,a ;i
.loop2: ld bc,0 ;k
ld e,a
.chi1: ld d,0
ld iyl,a
.loop4: ex de,hl
ld a,c
cp (hl)
inc h
ld a,b
sbc a,(hl)
dec h
inc bc
ex de,hl
ld a,iyl
jp nc,.l2
ld (hl),a
inc hl
jp .loop4
.l2: inc a
jp nz,.loop2
ret