From d7da827be8dc5d02f1b1206b7c61b82f6e187b5c Mon Sep 17 00:00:00 2001 From: IrgendwerA8 Date: Mon, 21 May 2018 18:18:01 +0200 Subject: [PATCH] Apply faster popptr1 to functions and/or use register instead of stack to save accu. --- libsrc/runtime/mul.s | 24 ++++++++++++------------ libsrc/runtime/mul8.s | 20 ++++++++++---------- libsrc/runtime/mulax3.s | 4 ++-- libsrc/runtime/mulax5.s | 4 ++-- libsrc/runtime/mulax7.s | 4 ++-- libsrc/runtime/mulax9.s | 4 ++-- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/libsrc/runtime/mul.s b/libsrc/runtime/mul.s index 6344e3a32..a9b53293b 100644 --- a/libsrc/runtime/mul.s +++ b/libsrc/runtime/mul.s @@ -6,8 +6,8 @@ .export tosumulax, tosmulax .import mul8x16, mul8x16a ; in mul8.s - .import popsreg - .importzp sreg, tmp1, ptr4 + .import popptr1 + .importzp tmp1, ptr1, ptr4 ;--------------------------------------------------------------------------- @@ -19,12 +19,12 @@ tosumulax: txa ; High byte zero beq @L3 ; Do 8x16 multiplication if high byte zero stx ptr4+1 ; Save right operand - jsr popsreg ; Get left operand + jsr popptr1 ; Get left operand (Y=0 by popptr1) -; Do ptr4:ptr4+1 * sreg:sreg+1 --> AX +; Do ptr4:ptr4+1 * ptr1:ptr1+1 --> AX - lda #0 - ldx sreg+1 ; Get high byte into register for speed + tya ; A = 0 + ldx ptr1+1 ; check if lhs is 8 bit only beq @L4 ; -> we can do 8x16 after swap sta tmp1 ldy #16 ; Number of bits @@ -34,12 +34,12 @@ tosumulax: @L0: bcc @L1 clc - adc sreg - pha - txa ; hi byte of left op + adc ptr1 + tax + lda ptr1+1 ; hi byte of left op adc tmp1 sta tmp1 - pla + txa @L1: ror tmp1 ror a @@ -59,9 +59,9 @@ tosumulax: ; If the high byte of rhs is zero, swap the operands and use the 8x16 ; routine. On entry, A and X are zero -@L4: ldy sreg ; Save right operand (8 bit) +@L4: ldy ptr1 ; Save right operand (8 bit) ldx ptr4 ; Copy left 16 bit operand to right - stx sreg + stx ptr1 ldx ptr4+1 ; Don't store, this is done later sty ptr4 ; Copy low 8 bit of right op to left ldy #8 diff --git a/libsrc/runtime/mul8.s b/libsrc/runtime/mul8.s index 9d4dfcbf4..395d64a4c 100644 --- a/libsrc/runtime/mul8.s +++ b/libsrc/runtime/mul8.s @@ -6,8 +6,8 @@ .export tosumula0, tosmula0 .export mul8x16, mul8x16a - .import popsreg - .importzp sreg, ptr4 + .import popptr1 + .importzp ptr1, ptr4 ;--------------------------------------------------------------------------- @@ -16,11 +16,11 @@ tosmula0: tosumula0: sta ptr4 -mul8x16:jsr popsreg ; Get left operand +mul8x16:jsr popptr1 ; Get left operand (Y=0 by popptr1) - lda #0 ; Clear byte 1 + tya ; Clear byte 1 ldy #8 ; Number of bits - ldx sreg+1 ; Get into register for speed + ldx ptr1+1 ; check if lhs is 8 bit only beq mul8x8 ; Do 8x8 multiplication if high byte zero mul8x16a: sta ptr4+1 ; Clear byte 2 @@ -29,12 +29,12 @@ mul8x16a: @L0: bcc @L1 clc - adc sreg - pha - txa ; hi byte of left op + adc ptr1 + tax + lda ptr1+1 ; hi byte of left op adc ptr4+1 sta ptr4+1 - pla + txa @L1: ror ptr4+1 ror a @@ -52,7 +52,7 @@ mul8x8: lsr ptr4 ; Get first bit into carry @L0: bcc @L1 clc - adc sreg + adc ptr1 @L1: ror ror ptr4 dey diff --git a/libsrc/runtime/mulax3.s b/libsrc/runtime/mulax3.s index 472bc60ec..82cc033c3 100644 --- a/libsrc/runtime/mulax3.s +++ b/libsrc/runtime/mulax3.s @@ -15,11 +15,11 @@ rol ptr1+1 clc adc ptr1 - pha + tay txa adc ptr1+1 tax - pla + tya rts .endproc diff --git a/libsrc/runtime/mulax5.s b/libsrc/runtime/mulax5.s index 7e5ed11d9..bf5eaefe8 100644 --- a/libsrc/runtime/mulax5.s +++ b/libsrc/runtime/mulax5.s @@ -17,11 +17,11 @@ rol ptr1+1 clc adc ptr1 - pha + tay txa adc ptr1+1 tax - pla + tya rts .endproc diff --git a/libsrc/runtime/mulax7.s b/libsrc/runtime/mulax7.s index 90313180c..3414ebc9e 100644 --- a/libsrc/runtime/mulax7.s +++ b/libsrc/runtime/mulax7.s @@ -20,12 +20,12 @@ rol ptr1+1 ; * 8 sec sbc ptr1 - pha + tay txa eor #$ff adc ptr1+1 ; * (8 - 1) tax - pla + tya rts .endproc diff --git a/libsrc/runtime/mulax9.s b/libsrc/runtime/mulax9.s index d2dd89529..d175d55aa 100644 --- a/libsrc/runtime/mulax9.s +++ b/libsrc/runtime/mulax9.s @@ -20,11 +20,11 @@ rol ptr1+1 ; * 8 clc adc ptr1 ; * (8+1) - pha + tay txa adc ptr1+1 tax - pla + tya rts .endproc