From 3ddb4487757f0ef778f394db7d0e42200e77be66 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 16 Dec 2023 09:39:31 -0800 Subject: [PATCH] faster MUL for small numbers --- src/vmsrc/apple/plvm802.s | 58 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/vmsrc/apple/plvm802.s b/src/vmsrc/apple/plvm802.s index 8b95d1b..9dc240a 100644 --- a/src/vmsrc/apple/plvm802.s +++ b/src/vmsrc/apple/plvm802.s @@ -577,17 +577,71 @@ IDXW PLA ;* MUL LDX #$10 LDA NOS,S - EOR #$FFFF + CMP TOS,S + BCS _MULSWP +- ASL ; SKIP LEADING ZEROS + BCS + + DEX + BNE - + BEQ _MULEX ++ EOR #$FFFF STA TMP - LDA #$0000 + LDA TOS,S + DEX + BEQ _MULEX _MULLP ASL ASL TMP ; MULTPLR BCS + ADC TOS,S ; MULTPLD + DEX BNE _MULLP +_MULEX STA NOS,S ; PROD + JMP DROP +_MULSWP LDA TOS,S +- ASL ; SKIP LEADING ZEROS + BCS + + DEX + BNE - + BEQ _MULEX ++ EOR #$FFFF + STA TMP + LDA NOS,S + DEX + BEQ _MULEX +_MULSLP ASL + ASL TMP ; MULTPLR + BCS + + ADC NOS,S ; MULTPLD ++ DEX + BNE _MULSLP STA NOS,S ; PROD JMP DROP +; +;MUL LDX #$04 +; LDA NOS,S +; EOR #$FFFF +; STA TMP +; LDA #$0000 +;_MULLP ASL +; ASL TMP ; MULTPLR +; BCS + +; ADC TOS,S ; MULTPLD +;+ ASL +; ASL TMP ; MULTPLR +; BCS + +; ADC TOS,S ; MULTPLD +;+ ASL +; ASL TMP ; MULTPLR +; BCS + +; ADC TOS,S ; MULTPLD +;+ ASL +; ASL TMP ; MULTPLR +; BCS + +; ADC TOS,S ; MULTPLD +;+ DEX +; BNE _MULLP +; STA NOS,S ; PROD +; JMP DROP ;* ;* INTERNAL DIVIDE ALGORITHM ;*