Code:
dsub r5, r5, r10 ; r5 = r5 - r10
dsll r5, r5, 3 ; r5 = 8*r5: -8, 0, 8, 16, 24, 32, 40.
ld r6, Counter(r5)
daddi r6, r6, 1
sd r6, Counter(r5)
bne r1, r2, loop ; Loop until all done
halt
Search "delay slot" in
Code:
.text
andi r0, r4, 0 ; r0=0, constant
andi r1, r4, 0 ; r1=0, offset to Input
ld r2, Length(r0) ; r2=Length, limit to offset
ori r3, r0, 5 ; r3=5, number of Counter slots
ld r4, Input(r1) ; Load FIRST value from Input
loop:
slti r15, r4, 5000 ; r15 = (r4 < 5000) ? 1 : 0
slti r14, r4, 4000 ; r14 = (r4 < 4000) ? 1 : 0
dsub r5, r3, r15 ; r5 = r3 - r15
slti r13, r4, 3000 ; r13 = (r4 < 3000) ? 1 : 0
dsub r5, r5, r14 ; r5 = r5 - r14
slti r12, r4, 2000 ; r12 = (r4 < 2000) ? 1 : 0
dsub r5, r5, r13 ; r5 = r5 - r13
slti r11, r4, 1000 ; r11 = (r4 < 1000) ? 1 : 0
dsub r5, r5, r12 ; r5 = r5 - r12
slt r10, r4, r0 ; r10 = (r4 < 0) ? 1 : 0
dsub r5, r5, r11 ; r5 = r5 - r11
daddi r1, r1, 8 ; Increase offset to next value
dsub r5, r5, r10 ; r5 = r5 - r10
dsll r5, r5, 3 ; r5 = 8*r5: -8, 0, 8, 16, 24, 32, 40.
ld r6, Counter(r5)
ld r4, Input(r1) ; Load NEXT value from Input
daddi r6, r6, 1
sd r6, Counter(r5)
bne r1, r2, loop ; Loop until all done
halt
.data
; Number of values * 8
Length: .word 72
; Values to classify
Input: .word 2555, 2556, 2557, 2665, 2666, 2667, 2668, 2669, 4999
; Counts for [0,999], ... [4000,4999].
.word 0 ; Underflow slot
Counter: .word 0, 0, 0, 0, 0 ; Data slots
.word 0 ; Overflow slot
Putting the load of r4 just after the load of r6 serves two purposes