mirror of
https://github.com/irmen/prog8.git
synced 2024-10-19 07:23:56 +00:00
added the last of the optimized mul_word asm routines
This commit is contained in:
parent
aff6b1fca5
commit
48858019b7
@ -786,8 +786,20 @@ mul_byte_3 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_3 .proc
|
mul_word_3 .proc
|
||||||
.error "todo mul_word_3"
|
|
||||||
; AY = AY*2 + AY
|
; AY = AY*2 + AY
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
clc
|
||||||
|
adc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
adc P8ZP_SCRATCH_W2+1
|
||||||
|
tay
|
||||||
|
lda P8ZP_SCRATCH_W1
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
@ -803,8 +815,22 @@ mul_byte_5 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_5 .proc
|
mul_word_5 .proc
|
||||||
.error "todo mul_word_5"
|
|
||||||
; AY = AY*4 + AY
|
; AY = AY*4 + AY
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
clc
|
||||||
|
adc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
adc P8ZP_SCRATCH_W2+1
|
||||||
|
tay
|
||||||
|
lda P8ZP_SCRATCH_W1
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
@ -820,8 +846,24 @@ mul_byte_6 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_6 .proc
|
mul_word_6 .proc
|
||||||
.error "todo mul_word_6"
|
|
||||||
; AY = (AY*2 + AY)*2
|
; AY = (AY*2 + AY)*2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
clc
|
||||||
|
adc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
tay
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
adc P8ZP_SCRATCH_W2+1
|
||||||
|
sta P8ZP_SCRATCH_W1+1
|
||||||
|
tya
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
ldy P8ZP_SCRATCH_W1+1
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
@ -837,8 +879,24 @@ mul_byte_7 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_7 .proc
|
mul_word_7 .proc
|
||||||
.error "todo mul_word_7"
|
|
||||||
; AY = AY*8 - AY
|
; AY = AY*8 - AY
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
sec
|
||||||
|
sbc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
sbc P8ZP_SCRATCH_W2+1
|
||||||
|
tay
|
||||||
|
lda P8ZP_SCRATCH_W1
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
@ -854,8 +912,25 @@ mul_byte_9 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_9 .proc
|
mul_word_9 .proc
|
||||||
.error "todo mul_word_9"
|
|
||||||
; AY = AY*8 + AY
|
; AY = AY*8 + AY
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
clc
|
||||||
|
adc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
adc P8ZP_SCRATCH_W2+1
|
||||||
|
tay
|
||||||
|
lda P8ZP_SCRATCH_W1
|
||||||
|
rts
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
@ -871,8 +946,25 @@ mul_byte_10 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_10 .proc
|
mul_word_10 .proc
|
||||||
.error "todo mul_word_10"
|
|
||||||
; AY=(AY*4 + AY)*2
|
; AY=(AY*4 + AY)*2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
clc
|
||||||
|
adc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
adc P8ZP_SCRATCH_W2+1
|
||||||
|
sta P8ZP_SCRATCH_W1+1
|
||||||
|
lda P8ZP_SCRATCH_W1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
ldy P8ZP_SCRATCH_W1+1
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
@ -903,8 +995,25 @@ mul_byte_12 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_12 .proc
|
mul_word_12 .proc
|
||||||
.error "todo mul_word_12"
|
|
||||||
; AY=(AY*2 + AY)*4
|
; AY=(AY*2 + AY)*4
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
clc
|
||||||
|
adc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
adc P8ZP_SCRATCH_W2+1
|
||||||
|
sta P8ZP_SCRATCH_W1+1
|
||||||
|
lda P8ZP_SCRATCH_W1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
ldy P8ZP_SCRATCH_W1+1
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
@ -950,8 +1059,26 @@ mul_byte_15 .proc
|
|||||||
.pend
|
.pend
|
||||||
|
|
||||||
mul_word_15 .proc
|
mul_word_15 .proc
|
||||||
.error "todo mul_word_15"
|
|
||||||
; AY = AY * 16 - AY
|
; AY = AY * 16 - AY
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
sty P8ZP_SCRATCH_W1+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
asl a
|
||||||
|
rol P8ZP_SCRATCH_W1+1
|
||||||
|
sec
|
||||||
|
sbc P8ZP_SCRATCH_W2
|
||||||
|
sta P8ZP_SCRATCH_W1
|
||||||
|
lda P8ZP_SCRATCH_W1+1
|
||||||
|
sbc P8ZP_SCRATCH_W2+1
|
||||||
|
tay
|
||||||
|
lda P8ZP_SCRATCH_W1
|
||||||
rts
|
rts
|
||||||
.pend
|
.pend
|
||||||
|
|
||||||
|
@ -18,36 +18,11 @@ main {
|
|||||||
; ub1 = ii
|
; ub1 = ii
|
||||||
; ub1 *= 40 ; TODO implement non-stack optimized muls
|
; ub1 *= 40 ; TODO implement non-stack optimized muls
|
||||||
; todo a = EXPRESSION * const -> is that optimized?
|
; todo a = EXPRESSION * const -> is that optimized?
|
||||||
ub1 = ii * 25
|
ub1 = ii * 15
|
||||||
|
txt.print_uw(ub1)
|
||||||
|
c64.CHROUT(',')
|
||||||
|
ub1 = 1+(ii * 15)
|
||||||
txt.print_uw(ub1)
|
txt.print_uw(ub1)
|
||||||
; c64.CHROUT(',')
|
|
||||||
; ub1 = ii * 50
|
|
||||||
; txt.print_uw(ub1)
|
|
||||||
; c64.CHROUT(',')
|
|
||||||
; ub1 = ii * 80
|
|
||||||
; txt.print_uw(ub1)
|
|
||||||
; c64.CHROUT(',')
|
|
||||||
; ub1 = ii * 100
|
|
||||||
; txt.print_uw(ub1)
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
}
|
|
||||||
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
for ii in 0 to 20 {
|
|
||||||
; ub1 = ii
|
|
||||||
; ub1 *= 40 ; TODO implement non-stack optimized muls
|
|
||||||
; todo a = EXPRESSION * const -> is that optimized?
|
|
||||||
ww1 = (-ii) * 25
|
|
||||||
txt.print_w(ww1)
|
|
||||||
; c64.CHROUT(',')
|
|
||||||
; ub1 = ii * 50
|
|
||||||
; txt.print_uw(ub1)
|
|
||||||
; c64.CHROUT(',')
|
|
||||||
; ub1 = ii * 80
|
|
||||||
; txt.print_uw(ub1)
|
|
||||||
; c64.CHROUT(',')
|
|
||||||
; ub1 = ii * 100
|
|
||||||
; txt.print_uw(ub1)
|
|
||||||
c64.CHROUT('\n')
|
c64.CHROUT('\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user