diff --git a/src/lib/arch/zx48k/runtime/arith/fmul16.asm b/src/lib/arch/zx48k/runtime/arith/fmul16.asm new file mode 100644 index 000000000..e58baeb4f --- /dev/null +++ b/src/lib/arch/zx48k/runtime/arith/fmul16.asm @@ -0,0 +1,24 @@ +;; Performs a faster multiply for little 16bit numbs +#include once + + push namespace core + +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + + cp 33 + jp nc, __MUL16_FAST + + ld b, l + ld l, h ; HL = 0 + +1: + add hl, de + djnz 1b + ret + + pop namespace diff --git a/src/lib/arch/zx48k/runtime/array.asm b/src/lib/arch/zx48k/runtime/array.asm index 154b65c4d..ddb27f28f 100644 --- a/src/lib/arch/zx48k/runtime/array.asm +++ b/src/lib/arch/zx48k/runtime/array.asm @@ -16,7 +16,7 @@ ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#include once +#include once #ifdef __CHECK_ARRAY_BOUNDARY__ #include once @@ -131,7 +131,7 @@ LOOP: pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: @@ -141,7 +141,7 @@ ARRAY_END: #ifdef __BIG_ARRAY__ ld d, 0 ld e, a - call __FNMUL + call __FMUL16 #else LOCAL ARRAY_SIZE_LOOP @@ -165,27 +165,6 @@ ARRAY_SIZE_LOOP: push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 - -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - - cp 33 - jp nc, __MUL16_FAST - - ld b, l - ld l, h ; HL = 0 - -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret - ENDP pop namespace diff --git a/tests/functional/arch/zx48k/46.asm b/tests/functional/arch/zx48k/46.asm index e1233aaf6..862bae95e 100644 --- a/tests/functional/arch/zx48k/46.asm +++ b/tests/functional/arch/zx48k/46.asm @@ -93,7 +93,9 @@ _b.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -119,6 +121,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -191,7 +210,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -215,22 +234,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 32 "arch/zx48k/46.bas" diff --git a/tests/functional/arch/zx48k/47.asm b/tests/functional/arch/zx48k/47.asm index 2e7a1bad0..302486dfc 100644 --- a/tests/functional/arch/zx48k/47.asm +++ b/tests/functional/arch/zx48k/47.asm @@ -98,7 +98,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -124,6 +126,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -196,7 +215,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -220,22 +239,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 59 "arch/zx48k/47.bas" diff --git a/tests/functional/arch/zx48k/55.asm b/tests/functional/arch/zx48k/55.asm index caa398ad5..933d8998d 100644 --- a/tests/functional/arch/zx48k/55.asm +++ b/tests/functional/arch/zx48k/55.asm @@ -86,7 +86,9 @@ _b.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -112,6 +114,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -184,7 +203,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -208,22 +227,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 27 "arch/zx48k/55.bas" diff --git a/tests/functional/arch/zx48k/aloadstr1.asm b/tests/functional/arch/zx48k/aloadstr1.asm index 3447f7116..c30274925 100644 --- a/tests/functional/arch/zx48k/aloadstr1.asm +++ b/tests/functional/arch/zx48k/aloadstr1.asm @@ -282,7 +282,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -308,6 +310,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -380,7 +399,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -404,22 +423,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 27 "arch/zx48k/aloadstr1.bas" diff --git a/tests/functional/arch/zx48k/arr_addr_local.asm b/tests/functional/arch/zx48k/arr_addr_local.asm index da4157af5..215a3a81a 100644 --- a/tests/functional/arch/zx48k/arr_addr_local.asm +++ b/tests/functional/arch/zx48k/arr_addr_local.asm @@ -94,7 +94,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -120,6 +122,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -192,7 +211,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -216,22 +235,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 55 "arch/zx48k/arr_addr_local.bas" diff --git a/tests/functional/arch/zx48k/arr_addr_param.asm b/tests/functional/arch/zx48k/arr_addr_param.asm index 0cca34d7d..0140dbcd4 100644 --- a/tests/functional/arch/zx48k/arr_addr_param.asm +++ b/tests/functional/arch/zx48k/arr_addr_param.asm @@ -99,7 +99,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -125,6 +127,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -197,7 +216,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -221,22 +240,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 45 "arch/zx48k/arr_addr_param.bas" diff --git a/tests/functional/arch/zx48k/array03.asm b/tests/functional/arch/zx48k/array03.asm index b744c0392..a1eda887c 100644 --- a/tests/functional/arch/zx48k/array03.asm +++ b/tests/functional/arch/zx48k/array03.asm @@ -82,7 +82,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -108,6 +110,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -180,7 +199,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -204,22 +223,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 25 "arch/zx48k/array03.bas" diff --git a/tests/functional/arch/zx48k/array06.asm b/tests/functional/arch/zx48k/array06.asm index 4357b8db3..4a293585a 100644 --- a/tests/functional/arch/zx48k/array06.asm +++ b/tests/functional/arch/zx48k/array06.asm @@ -93,7 +93,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -119,6 +121,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -191,7 +210,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -215,22 +234,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 25 "arch/zx48k/array06.bas" diff --git a/tests/functional/arch/zx48k/array07.asm b/tests/functional/arch/zx48k/array07.asm index 22d83740b..f5e69b073 100644 --- a/tests/functional/arch/zx48k/array07.asm +++ b/tests/functional/arch/zx48k/array07.asm @@ -118,7 +118,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -144,6 +146,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -216,7 +235,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -240,22 +259,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 45 "arch/zx48k/array07.bas" diff --git a/tests/functional/arch/zx48k/array08.asm b/tests/functional/arch/zx48k/array08.asm index 6c64b0a5c..bec8df8f6 100644 --- a/tests/functional/arch/zx48k/array08.asm +++ b/tests/functional/arch/zx48k/array08.asm @@ -98,7 +98,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -124,6 +126,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -196,7 +215,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -220,22 +239,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 23 "arch/zx48k/array08.bas" diff --git a/tests/functional/arch/zx48k/array09.asm b/tests/functional/arch/zx48k/array09.asm index 266b2efea..0002d3277 100644 --- a/tests/functional/arch/zx48k/array09.asm +++ b/tests/functional/arch/zx48k/array09.asm @@ -98,7 +98,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -124,6 +126,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -196,7 +215,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -220,22 +239,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 23 "arch/zx48k/array09.bas" diff --git a/tests/functional/arch/zx48k/array10.asm b/tests/functional/arch/zx48k/array10.asm index 25d904185..4213d7404 100644 --- a/tests/functional/arch/zx48k/array10.asm +++ b/tests/functional/arch/zx48k/array10.asm @@ -218,7 +218,9 @@ _y.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -244,6 +246,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -316,7 +335,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -340,22 +359,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 58 "arch/zx48k/array10.bas" diff --git a/tests/functional/arch/zx48k/array12.asm b/tests/functional/arch/zx48k/array12.asm index 3b2de09b4..ecedf9e4e 100644 --- a/tests/functional/arch/zx48k/array12.asm +++ b/tests/functional/arch/zx48k/array12.asm @@ -321,7 +321,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -347,6 +349,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -419,7 +438,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -443,22 +462,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 25 "arch/zx48k/array12.bas" diff --git a/tests/functional/arch/zx48k/array_check_param.asm b/tests/functional/arch/zx48k/array_check_param.asm index 815c6cde3..1e272e658 100644 --- a/tests/functional/arch/zx48k/array_check_param.asm +++ b/tests/functional/arch/zx48k/array_check_param.asm @@ -86,7 +86,9 @@ _pickString__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -112,6 +114,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -184,7 +203,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -208,22 +227,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 47 "arch/zx48k/array_check_param.bas" diff --git a/tests/functional/arch/zx48k/arrbase1.asm b/tests/functional/arch/zx48k/arrbase1.asm index 00b18048a..deaa185b3 100644 --- a/tests/functional/arch/zx48k/arrbase1.asm +++ b/tests/functional/arch/zx48k/arrbase1.asm @@ -109,6 +109,8 @@ __DATA__END: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -135,6 +137,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -207,7 +226,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -231,22 +250,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 48 "arch/zx48k/arrbase1.bas" diff --git a/tests/functional/arch/zx48k/arrcheck.asm b/tests/functional/arch/zx48k/arrcheck.asm index 0a9c3c280..0725717d0 100644 --- a/tests/functional/arch/zx48k/arrcheck.asm +++ b/tests/functional/arch/zx48k/arrcheck.asm @@ -154,7 +154,9 @@ _a.__UBOUND__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -180,6 +182,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/error.asm" ; Simple error control routines @@ -250,6 +269,7 @@ __ARRAY: inc hl ld b, (hl) ; BC <-- Array __UBOUND__ PTR ld (UBOUND_PTR), bc +#line 66 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" ex de, hl ; HL <-- PTR to Dim sizes table, DE <-- dummy ex (sp), hl ; Return address in HL, PTR Dim sizes table onto Stack ld (RET_ADDR), hl ; Stores it for later @@ -293,7 +313,7 @@ LOOP: sbc hl, bc ; HL <- HL - BC - 1 = Ai - UBound(i) - 1 => No Carry if Ai > UBound(i) jp nc, __ERROR pop hl ; Recovers (Ai) - Lbound(Ai) -#line 113 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" +#line 116 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" add hl, de ; Adds current index exx ; Checks if B'C' = 0 ld a, b ; Which means we must exit (last element is not multiplied by anything) @@ -307,12 +327,12 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) exx -#line 143 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" +#line 146 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" LOCAL ARRAY_SIZE_LOOP ex de, hl ld hl, 0 @@ -320,7 +340,7 @@ ARRAY_END: ARRAY_SIZE_LOOP: add hl, de djnz ARRAY_SIZE_LOOP -#line 153 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" +#line 156 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" ex de, hl ld hl, (TMP_ARR_PTR) ld a, (hl) @@ -331,22 +351,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 35 "arch/zx48k/arrcheck.bas" diff --git a/tests/functional/arch/zx48k/astore16.asm b/tests/functional/arch/zx48k/astore16.asm index 71360e72c..d9d676b4b 100644 --- a/tests/functional/arch/zx48k/astore16.asm +++ b/tests/functional/arch/zx48k/astore16.asm @@ -131,6 +131,8 @@ _obj.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -157,6 +159,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -229,7 +248,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -253,22 +272,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 53 "arch/zx48k/astore16.bas" diff --git a/tests/functional/arch/zx48k/astore32.asm b/tests/functional/arch/zx48k/astore32.asm index 801c10587..32c031589 100644 --- a/tests/functional/arch/zx48k/astore32.asm +++ b/tests/functional/arch/zx48k/astore32.asm @@ -149,7 +149,9 @@ _main__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -175,6 +177,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -247,7 +266,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -271,22 +290,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 72 "arch/zx48k/astore32.bas" diff --git a/tests/functional/arch/zx48k/lbound13.asm b/tests/functional/arch/zx48k/lbound13.asm index c4dea149e..779acfadc 100644 --- a/tests/functional/arch/zx48k/lbound13.asm +++ b/tests/functional/arch/zx48k/lbound13.asm @@ -146,7 +146,9 @@ _maxValue__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -172,6 +174,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -244,7 +263,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -268,22 +287,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 91 "arch/zx48k/lbound13.bas" diff --git a/tests/functional/arch/zx48k/let_array_local_const0.asm b/tests/functional/arch/zx48k/let_array_local_const0.asm index e17ecf1f6..836f21b93 100644 --- a/tests/functional/arch/zx48k/let_array_local_const0.asm +++ b/tests/functional/arch/zx48k/let_array_local_const0.asm @@ -143,6 +143,8 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -169,6 +171,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -241,7 +260,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -265,22 +284,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 93 "arch/zx48k/let_array_local_const0.bas" diff --git a/tests/functional/arch/zx48k/let_array_substr.asm b/tests/functional/arch/zx48k/let_array_substr.asm index 59fcdf3b0..d494edaef 100644 --- a/tests/functional/arch/zx48k/let_array_substr.asm +++ b/tests/functional/arch/zx48k/let_array_substr.asm @@ -133,7 +133,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -159,6 +161,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -231,7 +250,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -255,22 +274,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 59 "arch/zx48k/let_array_substr.bas" diff --git a/tests/functional/arch/zx48k/let_array_substr1.asm b/tests/functional/arch/zx48k/let_array_substr1.asm index ebd2fe087..56d24349a 100644 --- a/tests/functional/arch/zx48k/let_array_substr1.asm +++ b/tests/functional/arch/zx48k/let_array_substr1.asm @@ -133,7 +133,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -159,6 +161,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -231,7 +250,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -255,22 +274,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 59 "arch/zx48k/let_array_substr1.bas" diff --git a/tests/functional/arch/zx48k/let_array_substr5.asm b/tests/functional/arch/zx48k/let_array_substr5.asm index 2d81f188c..4122067ef 100644 --- a/tests/functional/arch/zx48k/let_array_substr5.asm +++ b/tests/functional/arch/zx48k/let_array_substr5.asm @@ -133,7 +133,9 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -159,6 +161,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -231,7 +250,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -255,22 +274,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 59 "arch/zx48k/let_array_substr5.bas" diff --git a/tests/functional/arch/zx48k/local_float_array0.asm b/tests/functional/arch/zx48k/local_float_array0.asm index ac41c2497..ffb41e8bc 100644 --- a/tests/functional/arch/zx48k/local_float_array0.asm +++ b/tests/functional/arch/zx48k/local_float_array0.asm @@ -103,7 +103,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -129,6 +131,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -201,7 +220,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -225,22 +244,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 62 "arch/zx48k/local_float_array0.bas" diff --git a/tests/functional/arch/zx48k/local_str_array1.asm b/tests/functional/arch/zx48k/local_str_array1.asm index 15f487a65..c053f155a 100644 --- a/tests/functional/arch/zx48k/local_str_array1.asm +++ b/tests/functional/arch/zx48k/local_str_array1.asm @@ -115,7 +115,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -141,6 +143,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -213,7 +232,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -237,22 +256,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 73 "arch/zx48k/local_str_array1.bas" diff --git a/tests/functional/arch/zx48k/local_str_array2.asm b/tests/functional/arch/zx48k/local_str_array2.asm index 72e115356..a796ce715 100644 --- a/tests/functional/arch/zx48k/local_str_array2.asm +++ b/tests/functional/arch/zx48k/local_str_array2.asm @@ -123,7 +123,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -149,6 +151,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -221,7 +240,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -245,22 +264,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 84 "arch/zx48k/local_str_array2.bas" diff --git a/tests/functional/arch/zx48k/local_str_array3.asm b/tests/functional/arch/zx48k/local_str_array3.asm index ef82556fd..39a2ea826 100644 --- a/tests/functional/arch/zx48k/local_str_array3.asm +++ b/tests/functional/arch/zx48k/local_str_array3.asm @@ -142,7 +142,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -168,6 +170,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -240,7 +259,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -264,22 +283,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 103 "arch/zx48k/local_str_array3.bas" diff --git a/tests/functional/arch/zx48k/local_u16_array1.asm b/tests/functional/arch/zx48k/local_u16_array1.asm index ff6575e63..562872e42 100644 --- a/tests/functional/arch/zx48k/local_u16_array1.asm +++ b/tests/functional/arch/zx48k/local_u16_array1.asm @@ -104,7 +104,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -130,6 +132,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -202,7 +221,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -226,22 +245,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 62 "arch/zx48k/local_u16_array1.bas" diff --git a/tests/functional/arch/zx48k/local_u16_array2.asm b/tests/functional/arch/zx48k/local_u16_array2.asm index 937b05ef6..f1af6674b 100644 --- a/tests/functional/arch/zx48k/local_u16_array2.asm +++ b/tests/functional/arch/zx48k/local_u16_array2.asm @@ -112,7 +112,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -138,6 +140,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -210,7 +229,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -234,22 +253,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 73 "arch/zx48k/local_u16_array2.bas" diff --git a/tests/functional/arch/zx48k/local_u16_array3.asm b/tests/functional/arch/zx48k/local_u16_array3.asm index 57bc7a5ef..edea29ebb 100644 --- a/tests/functional/arch/zx48k/local_u16_array3.asm +++ b/tests/functional/arch/zx48k/local_u16_array3.asm @@ -134,7 +134,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -160,6 +162,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -232,7 +251,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -256,22 +275,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 95 "arch/zx48k/local_u16_array3.bas" diff --git a/tests/functional/arch/zx48k/ltee10.asm b/tests/functional/arch/zx48k/ltee10.asm index 0dcf855ca..5adfc1109 100644 --- a/tests/functional/arch/zx48k/ltee10.asm +++ b/tests/functional/arch/zx48k/ltee10.asm @@ -92,7 +92,9 @@ _setlocal__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -118,6 +120,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -190,7 +209,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -214,22 +233,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 51 "arch/zx48k/ltee10.bas" diff --git a/tests/functional/arch/zx48k/ltee6.asm b/tests/functional/arch/zx48k/ltee6.asm index 42b5a7a65..5d7ba6584 100644 --- a/tests/functional/arch/zx48k/ltee6.asm +++ b/tests/functional/arch/zx48k/ltee6.asm @@ -96,7 +96,9 @@ _testglobal.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -122,6 +124,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -194,7 +213,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -218,22 +237,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 33 "arch/zx48k/ltee6.bas" diff --git a/tests/functional/arch/zx48k/ltee7.asm b/tests/functional/arch/zx48k/ltee7.asm index 670222154..b3d856a04 100644 --- a/tests/functional/arch/zx48k/ltee7.asm +++ b/tests/functional/arch/zx48k/ltee7.asm @@ -100,7 +100,9 @@ _setlocal__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -126,6 +128,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -198,7 +217,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -222,22 +241,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 59 "arch/zx48k/ltee7.bas" diff --git a/tests/functional/arch/zx48k/opt1_dim_arr_at3.asm b/tests/functional/arch/zx48k/opt1_dim_arr_at3.asm index 2d8a4d3dd..c1ff6267b 100644 --- a/tests/functional/arch/zx48k/opt1_dim_arr_at3.asm +++ b/tests/functional/arch/zx48k/opt1_dim_arr_at3.asm @@ -123,7 +123,9 @@ _b.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -149,6 +151,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -221,7 +240,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -245,22 +264,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 31 "arch/zx48k/opt1_dim_arr_at3.bas" diff --git a/tests/functional/arch/zx48k/opt1_dim_arr_global.asm b/tests/functional/arch/zx48k/opt1_dim_arr_global.asm index 7f710b47e..cc1bfd132 100644 --- a/tests/functional/arch/zx48k/opt1_dim_arr_global.asm +++ b/tests/functional/arch/zx48k/opt1_dim_arr_global.asm @@ -76,6 +76,8 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -102,6 +104,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -174,7 +193,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -198,22 +217,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 24 "arch/zx48k/opt1_dim_arr_global.bas" diff --git a/tests/functional/arch/zx48k/opt1_dim_arr_global4.asm b/tests/functional/arch/zx48k/opt1_dim_arr_global4.asm index 4a8eef20f..658501a69 100644 --- a/tests/functional/arch/zx48k/opt1_dim_arr_global4.asm +++ b/tests/functional/arch/zx48k/opt1_dim_arr_global4.asm @@ -81,6 +81,8 @@ _a.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -107,6 +109,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -179,7 +198,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -203,22 +222,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 29 "arch/zx48k/opt1_dim_arr_global4.bas" diff --git a/tests/functional/arch/zx48k/opt1_dim_arr_local.asm b/tests/functional/arch/zx48k/opt1_dim_arr_local.asm index 51b28ae8b..75c053599 100644 --- a/tests/functional/arch/zx48k/opt1_dim_arr_local.asm +++ b/tests/functional/arch/zx48k/opt1_dim_arr_local.asm @@ -92,7 +92,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -118,6 +120,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -190,7 +209,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -214,22 +233,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 51 "arch/zx48k/opt1_dim_arr_local.bas" diff --git a/tests/functional/arch/zx48k/opt1_dim_arr_local3.asm b/tests/functional/arch/zx48k/opt1_dim_arr_local3.asm index d021c01d9..c7927676a 100644 --- a/tests/functional/arch/zx48k/opt1_dim_arr_local3.asm +++ b/tests/functional/arch/zx48k/opt1_dim_arr_local3.asm @@ -106,7 +106,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -132,6 +134,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -204,7 +223,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -228,22 +247,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 67 "arch/zx48k/opt1_dim_arr_local3.bas" diff --git a/tests/functional/arch/zx48k/opt1_dim_arr_local4.asm b/tests/functional/arch/zx48k/opt1_dim_arr_local4.asm index b13d12ad3..c323a39a3 100644 --- a/tests/functional/arch/zx48k/opt1_dim_arr_local4.asm +++ b/tests/functional/arch/zx48k/opt1_dim_arr_local4.asm @@ -109,7 +109,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -135,6 +137,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -207,7 +226,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -231,22 +250,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 70 "arch/zx48k/opt1_dim_arr_local4.bas" diff --git a/tests/functional/arch/zx48k/opt2_snake_es.asm b/tests/functional/arch/zx48k/opt2_snake_es.asm index 35772aa9e..0c4ff163c 100644 --- a/tests/functional/arch/zx48k/opt2_snake_es.asm +++ b/tests/functional/arch/zx48k/opt2_snake_es.asm @@ -205,7 +205,9 @@ _y.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -231,6 +233,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -303,7 +322,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -327,22 +346,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 33 "arch/zx48k/opt2_snake_es.bas" diff --git a/tests/functional/arch/zx48k/opt3_OPT27wws2.asm b/tests/functional/arch/zx48k/opt3_OPT27wws2.asm index c8b55437d..85245db04 100644 --- a/tests/functional/arch/zx48k/opt3_OPT27wws2.asm +++ b/tests/functional/arch/zx48k/opt3_OPT27wws2.asm @@ -112,7 +112,9 @@ _incyenem.__DATA__: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -138,6 +140,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -210,7 +229,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -234,22 +253,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 34 "arch/zx48k/opt3_OPT27wws2.bas" diff --git a/tests/functional/arch/zx48k/opt3_data2.asm b/tests/functional/arch/zx48k/opt3_data2.asm index 1dff2e3a4..24c057c59 100644 --- a/tests/functional/arch/zx48k/opt3_data2.asm +++ b/tests/functional/arch/zx48k/opt3_data2.asm @@ -203,6 +203,8 @@ __MUL8B: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -229,6 +231,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -301,7 +320,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -325,22 +344,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 96 "arch/zx48k/opt3_data2.bas" diff --git a/tests/functional/arch/zx48k/pararray0.asm b/tests/functional/arch/zx48k/pararray0.asm index ce8f6c2ff..168766601 100644 --- a/tests/functional/arch/zx48k/pararray0.asm +++ b/tests/functional/arch/zx48k/pararray0.asm @@ -109,7 +109,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -135,6 +137,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -207,7 +226,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -231,22 +250,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 43 "arch/zx48k/pararray0.bas" diff --git a/tests/functional/arch/zx48k/pararray1.asm b/tests/functional/arch/zx48k/pararray1.asm index 7efaae7cc..3bb8f76fa 100644 --- a/tests/functional/arch/zx48k/pararray1.asm +++ b/tests/functional/arch/zx48k/pararray1.asm @@ -122,7 +122,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -148,6 +150,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -220,7 +239,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -244,22 +263,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 56 "arch/zx48k/pararray1.bas" diff --git a/tests/functional/arch/zx48k/pararray10.asm b/tests/functional/arch/zx48k/pararray10.asm index 97c198588..148290e1b 100644 --- a/tests/functional/arch/zx48k/pararray10.asm +++ b/tests/functional/arch/zx48k/pararray10.asm @@ -139,7 +139,9 @@ _func2__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -165,6 +167,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -237,7 +256,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -261,22 +280,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 83 "arch/zx48k/pararray10.bas" diff --git a/tests/functional/arch/zx48k/pararray11.asm b/tests/functional/arch/zx48k/pararray11.asm index 2fefd3c54..dc2151a8d 100644 --- a/tests/functional/arch/zx48k/pararray11.asm +++ b/tests/functional/arch/zx48k/pararray11.asm @@ -163,7 +163,9 @@ _func3__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -189,6 +191,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -261,7 +280,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -285,22 +304,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 124 "arch/zx48k/pararray11.bas" diff --git a/tests/functional/arch/zx48k/pararray5.asm b/tests/functional/arch/zx48k/pararray5.asm index 8d5ab9c42..281b9081f 100644 --- a/tests/functional/arch/zx48k/pararray5.asm +++ b/tests/functional/arch/zx48k/pararray5.asm @@ -122,7 +122,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -148,6 +150,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -220,7 +239,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -244,22 +263,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 56 "arch/zx48k/pararray5.bas" diff --git a/tests/functional/arch/zx48k/pararray6.asm b/tests/functional/arch/zx48k/pararray6.asm index 0851302a0..7e7968925 100644 --- a/tests/functional/arch/zx48k/pararray6.asm +++ b/tests/functional/arch/zx48k/pararray6.asm @@ -125,7 +125,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -151,6 +153,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -223,7 +242,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -247,22 +266,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 59 "arch/zx48k/pararray6.bas" diff --git a/tests/functional/arch/zx48k/pararray7.asm b/tests/functional/arch/zx48k/pararray7.asm index e3a85192f..9744693a8 100644 --- a/tests/functional/arch/zx48k/pararray7.asm +++ b/tests/functional/arch/zx48k/pararray7.asm @@ -178,7 +178,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -204,6 +206,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -276,7 +295,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -300,22 +319,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 71 "arch/zx48k/pararray7.bas" diff --git a/tests/functional/arch/zx48k/pararray8.asm b/tests/functional/arch/zx48k/pararray8.asm index c2e8da9ac..728fa7eaf 100644 --- a/tests/functional/arch/zx48k/pararray8.asm +++ b/tests/functional/arch/zx48k/pararray8.asm @@ -136,7 +136,9 @@ _max__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -162,6 +164,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -234,7 +253,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -258,22 +277,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 84 "arch/zx48k/pararray8.bas" diff --git a/tests/functional/arch/zx48k/pararray9.asm b/tests/functional/arch/zx48k/pararray9.asm index bc6a07103..d3bfd0376 100644 --- a/tests/functional/arch/zx48k/pararray9.asm +++ b/tests/functional/arch/zx48k/pararray9.asm @@ -109,7 +109,9 @@ _test__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... -#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/mul16.asm" +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack ; Works for both signed and unsigned @@ -135,6 +137,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -207,7 +226,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -231,22 +250,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 43 "arch/zx48k/pararray9.bas" diff --git a/tests/functional/arch/zx48k/read9.asm b/tests/functional/arch/zx48k/read9.asm index 0a4b91be2..66c49cd29 100644 --- a/tests/functional/arch/zx48k/read9.asm +++ b/tests/functional/arch/zx48k/read9.asm @@ -253,6 +253,8 @@ __MULF: ; Multiplication ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -279,6 +281,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -351,7 +370,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -375,22 +394,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 117 "arch/zx48k/read9.bas" diff --git a/tests/functional/arch/zx48k/stdlib_spectranet.asm b/tests/functional/arch/zx48k/stdlib_spectranet.asm index 90b501e4b..db4a3b463 100644 --- a/tests/functional/arch/zx48k/stdlib_spectranet.asm +++ b/tests/functional/arch/zx48k/stdlib_spectranet.asm @@ -1606,6 +1606,8 @@ _SNETunlink__leave: ; O = [a0 + b0 * (a1 + b1 * (a2 + ... bN-2(aN-1)))] ; What I will do here is to calculate the following sequence: ; ((aN-1 * bN-2) + aN-2) * bN-3 + ... +#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + ;; Performs a faster multiply for little 16bit numbs #line 1 "/zxbasic/src/lib/arch/zx48k/runtime/arith/mul16.asm" push namespace core __MUL16: ; Mutiplies HL with the last value stored into de stack @@ -1632,6 +1634,23 @@ __MUL16NOADD: ret ; Result in hl (16 lower bits) ENDP pop namespace +#line 3 "/zxbasic/src/lib/arch/zx48k/runtime/arith/fmul16.asm" + push namespace core +__FMUL16: + xor a + or h + jp nz, __MUL16_FAST + or l + ret z + cp 33 + jp nc, __MUL16_FAST + ld b, l + ld l, h ; HL = 0 +1: + add hl, de + djnz 1b + ret + pop namespace #line 20 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" #line 24 "/zxbasic/src/lib/arch/zx48k/runtime/array.asm" push namespace core @@ -1704,7 +1723,7 @@ LOOP: push de exx pop de ; DE = Max bound Number (i-th dimension) - call __FNMUL ; HL <= HL * DE mod 65536 + call __FMUL16 ; HL <= HL * DE mod 65536 jp LOOP ARRAY_END: ld a, (hl) @@ -1728,22 +1747,6 @@ ARRAY_SIZE_LOOP: ld de, (RET_ADDR) push de ret - ;; Performs a faster multiply for little 16bit numbs - LOCAL __FNMUL, __FNMUL2 -__FNMUL: - xor a - or h - jp nz, __MUL16_FAST - or l - ret z - cp 33 - jp nc, __MUL16_FAST - ld b, l - ld l, h ; HL = 0 -__FNMUL2: - add hl, de - djnz __FNMUL2 - ret ENDP pop namespace #line 458 "/zxbasic/src/lib/arch/zx48k/stdlib/spectranet.bas"