1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-23 23:32:55 +00:00

Working 16bit signed fast multiplication - with test.

This commit is contained in:
Jesper Gravgaard 2018-10-17 13:42:52 +02:00
parent 0b4cb53d07
commit 688df931f0
9 changed files with 7784 additions and 6409 deletions

View File

@ -173,7 +173,7 @@ _dd: lda #0
} }
// Fast multiply two signed words to a signed double word result // Fast multiply two signed words to a signed double word result
// Done in assembler to utilize fast addition A+X // Fixes offsets introduced by using unsigned multiplication
signed dword mulf16s(signed word a, signed word b) { signed dword mulf16s(signed word a, signed word b) {
dword m = mulf16u((word)a, (word)b); dword m = mulf16u((word)a, (word)b);
if(a<0) { if(a<0) {
@ -181,7 +181,6 @@ signed dword mulf16s(signed word a, signed word b) {
} }
if(b<0) { if(b<0) {
>m = (>m)-(word)a; >m = (>m)-(word)a;
m = m + 1;
} }
return (signed dword)m; return (signed dword)m;
} }

View File

@ -1,4 +1,4 @@
package dk.camelot64.kickc.test; package dk.camelot64.kickc.test;
import dk.camelot64.kickc.CompileLog; import dk.camelot64.kickc.CompileLog;
import dk.camelot64.kickc.Compiler; import dk.camelot64.kickc.Compiler;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -9,10 +9,10 @@
(label) main::@3 (label) main::@3
(label) main::@return (label) main::@return
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$12 $12 zp ZP_WORD:8 4.0 (word~) mul16s::$12 $12 zp ZP_WORD:9 4.0
(word~) mul16s::$16 $16 zp ZP_WORD:8 4.0 (word~) mul16s::$16 $16 zp ZP_WORD:9 4.0
(word~) mul16s::$17 $17 zp ZP_WORD:8 4.0 (word~) mul16s::$17 $17 zp ZP_WORD:9 4.0
(word~) mul16s::$6 $6 zp ZP_WORD:8 4.0 (word~) mul16s::$6 $6 zp ZP_WORD:9 4.0
(label) mul16s::@1 (label) mul16s::@1
(label) mul16s::@2 (label) mul16s::@2
(label) mul16s::@3 (label) mul16s::@3
@ -20,56 +20,63 @@
(label) mul16s::@6 (label) mul16s::@6
(label) mul16s::@return (label) mul16s::@return
(signed word) mul16s::a (signed word) mul16s::a
(signed word) mul16s::a#0 a zp ZP_WORD:2 7.357142857142858 (signed word) mul16s::a#0 a zp ZP_WORD:3 7.357142857142858
(signed word) mul16s::b (signed word) mul16s::b
(signed word) mul16s::b#0 b zp ZP_WORD:4 9.363636363636363 (signed word) mul16s::b#0 b zp ZP_WORD:5 9.363636363636363
(dword) mul16s::m (dword) mul16s::m
(dword) mul16s::m#0 m zp ZP_DWORD:16 2.0 (dword) mul16s::m#0 m zp ZP_DWORD:25 2.0
(dword) mul16s::m#1 m zp ZP_DWORD:16 4.0 (dword) mul16s::m#1 m zp ZP_DWORD:25 4.0
(dword) mul16s::m#2 m zp ZP_DWORD:16 4.0 (dword) mul16s::m#2 m zp ZP_DWORD:25 4.0
(dword) mul16s::m#4 m zp ZP_DWORD:16 6.0 (dword) mul16s::m#4 m zp ZP_DWORD:25 6.0
(dword) mul16s::m#5 m zp ZP_DWORD:16 2.5 (dword) mul16s::m#5 m zp ZP_DWORD:25 2.5
(signed dword) mul16s::return (signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp ZP_DWORD:16 34.33333333333333 (signed dword) mul16s::return#0 return zp ZP_DWORD:25 34.33333333333333
(signed dword) mul16s::return#2 return zp ZP_DWORD:16 202.0 (signed dword) mul16s::return#2 return zp ZP_DWORD:25 202.0
(void()) mul16s_compare() (void()) mul16s_compare()
(label) mul16s_compare::@1 (label) mul16s_compare::@1
(label) mul16s_compare::@10
(label) mul16s_compare::@11 (label) mul16s_compare::@11
(label) mul16s_compare::@12 (label) mul16s_compare::@13
(label) mul16s_compare::@14 (label) mul16s_compare::@14
(label) mul16s_compare::@15 (label) mul16s_compare::@15
(label) mul16s_compare::@17
(label) mul16s_compare::@18
(label) mul16s_compare::@2 (label) mul16s_compare::@2
(label) mul16s_compare::@22
(label) mul16s_compare::@3 (label) mul16s_compare::@3
(label) mul16s_compare::@4 (label) mul16s_compare::@4
(label) mul16s_compare::@5 (label) mul16s_compare::@5
(label) mul16s_compare::@6 (label) mul16s_compare::@6
(label) mul16s_compare::@8 (label) mul16s_compare::@8
(label) mul16s_compare::@9
(label) mul16s_compare::@return (label) mul16s_compare::@return
(signed word) mul16s_compare::a (signed word) mul16s_compare::a
(signed word) mul16s_compare::a#1 a zp ZP_WORD:2 19.857142857142858 (signed word) mul16s_compare::a#1 a zp ZP_WORD:3 17.862068965517242
(signed word) mul16s_compare::a#2 a zp ZP_WORD:2 213.0 (signed word) mul16s_compare::a#2 a zp ZP_WORD:3 213.0
(signed word) mul16s_compare::a#5 a zp ZP_WORD:2 11.0 (signed word) mul16s_compare::a#6 a zp ZP_WORD:3 11.0
(signed word) mul16s_compare::b (signed word) mul16s_compare::b
(signed word) mul16s_compare::b#1 b zp ZP_WORD:4 19.857142857142858 (signed word) mul16s_compare::b#1 b zp ZP_WORD:5 17.862068965517242
(signed word) mul16s_compare::b#2 b zp ZP_WORD:4 106.5 (signed word) mul16s_compare::b#2 b zp ZP_WORD:5 106.5
(signed word) mul16s_compare::b#5 b zp ZP_WORD:4 11.0 (signed word) mul16s_compare::b#6 b zp ZP_WORD:5 11.0
(byte) mul16s_compare::i (byte) mul16s_compare::i
(byte) mul16s_compare::i#1 reg byte x 16.5 (byte) mul16s_compare::i#1 i zp ZP_BYTE:2 16.5
(byte) mul16s_compare::i#10 reg byte x 1.0476190476190477 (byte) mul16s_compare::i#12 i zp ZP_BYTE:2 0.7586206896551724
(byte) mul16s_compare::j (byte) mul16s_compare::j
(byte) mul16s_compare::j#1 reg byte y 151.5 (byte) mul16s_compare::j#1 reg byte y 151.5
(byte) mul16s_compare::j#2 reg byte y 11.882352941176471 (byte) mul16s_compare::j#10 reg byte y 8.08
(signed dword) mul16s_compare::mf
(signed dword) mul16s_compare::mf#0 mf zp ZP_DWORD:17 15.692307692307692
(signed dword) mul16s_compare::mn (signed dword) mul16s_compare::mn
(signed dword) mul16s_compare::mn#0 mn zp ZP_DWORD:16 22.666666666666664 (signed dword) mul16s_compare::mn#0 mn zp ZP_DWORD:25 12.0
(signed dword) mul16s_compare::ms (signed dword) mul16s_compare::ms
(signed dword) mul16s_compare::ms#0 ms zp ZP_DWORD:10 15.692307692307692 (signed dword) mul16s_compare::ms#0 ms zp ZP_DWORD:11 14.523809523809522
(byte) mul16s_compare::ok (byte) mul16s_compare::ok
(byte) mul16s_compare::ok#2 reg byte a 101.0 (byte) mul16s_compare::ok#3 reg byte x 202.0
(byte) mul16s_compare::ok#4 reg byte x 33.666666666666664
(const string) mul16s_compare::str str = (string) ".@" (const string) mul16s_compare::str str = (string) ".@"
(const string) mul16s_compare::str1 str1 = (string) "signed word multiply results match!@" (const string) mul16s_compare::str1 str1 = (string) "signed word multiply results match!@"
(void()) mul16s_error((signed word) mul16s_error::a , (signed word) mul16s_error::b , (signed dword) mul16s_error::ms , (signed dword) mul16s_error::mn) (void()) mul16s_error((signed word) mul16s_error::a , (signed word) mul16s_error::b , (signed dword) mul16s_error::ms , (signed dword) mul16s_error::mn , (signed dword) mul16s_error::mf)
(label) mul16s_error::@1 (label) mul16s_error::@1
(label) mul16s_error::@10
(label) mul16s_error::@2 (label) mul16s_error::@2
(label) mul16s_error::@3 (label) mul16s_error::@3
(label) mul16s_error::@4 (label) mul16s_error::@4
@ -77,19 +84,23 @@
(label) mul16s_error::@6 (label) mul16s_error::@6
(label) mul16s_error::@7 (label) mul16s_error::@7
(label) mul16s_error::@8 (label) mul16s_error::@8
(label) mul16s_error::@9
(label) mul16s_error::@return (label) mul16s_error::@return
(signed word) mul16s_error::a (signed word) mul16s_error::a
(signed word) mul16s_error::a#0 a zp ZP_WORD:2 0.6666666666666666 (signed word) mul16s_error::a#0 a zp ZP_WORD:3 0.5714285714285714
(signed word) mul16s_error::b (signed word) mul16s_error::b
(signed word) mul16s_error::b#0 b zp ZP_WORD:4 0.4444444444444444 (signed word) mul16s_error::b#0 b zp ZP_WORD:5 0.4
(signed dword) mul16s_error::mf
(signed dword) mul16s_error::mf#0 mf zp ZP_DWORD:17 0.21052631578947367
(signed dword) mul16s_error::mn (signed dword) mul16s_error::mn
(signed dword) mul16s_error::mn#0 mn zp ZP_DWORD:16 0.26666666666666666 (signed dword) mul16s_error::mn#0 mn zp ZP_DWORD:25 0.25
(signed dword) mul16s_error::ms (signed dword) mul16s_error::ms
(signed dword) mul16s_error::ms#0 ms zp ZP_DWORD:10 0.3333333333333333 (signed dword) mul16s_error::ms#0 ms zp ZP_DWORD:11 0.3076923076923077
(const string) mul16s_error::str str = (string) "signed word multiply mismatch @" (const string) mul16s_error::str str = (string) "signed word multiply mismatch @"
(const string) mul16s_error::str1 str1 = (string) "*@" (const string) mul16s_error::str1 str1 = (string) "*@"
(const string) mul16s_error::str2 str2 = (string) " slow:@" (const string) mul16s_error::str2 str2 = (string) " slow:@"
(const string) mul16s_error::str3 str3 = (string) " / normal:@" (const string) mul16s_error::str3 str3 = (string) " / normal:@"
(const string) mul16s_error::str4 str4 = (string) " / fast:@"
(dword()) mul16u((word) mul16u::a , (word) mul16u::b) (dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte/word~) mul16u::$1 reg byte a 2002.0 (byte/word~) mul16u::$1 reg byte a 2002.0
(label) mul16u::@1 (label) mul16u::@1
@ -98,26 +109,26 @@
(label) mul16u::@7 (label) mul16u::@7
(label) mul16u::@return (label) mul16u::@return
(word) mul16u::a (word) mul16u::a
(word) mul16u::a#0 a zp ZP_WORD:8 1001.0 (word) mul16u::a#0 a zp ZP_WORD:9 1001.0
(word) mul16u::a#2 a zp ZP_WORD:8 101.0 (word) mul16u::a#2 a zp ZP_WORD:9 101.0
(word) mul16u::a#3 a zp ZP_WORD:8 667.6666666666667 (word) mul16u::a#3 a zp ZP_WORD:9 667.6666666666667
(word) mul16u::a#6 a zp ZP_WORD:8 52.5 (word) mul16u::a#6 a zp ZP_WORD:9 52.5
(word~) mul16u::a#8 a zp ZP_WORD:8 4.0 (word~) mul16u::a#8 a zp ZP_WORD:9 4.0
(word) mul16u::b (word) mul16u::b
(word) mul16u::b#1 b zp ZP_WORD:20 202.0 (word) mul16u::b#1 b zp ZP_WORD:23 202.0
(word) mul16u::b#2 b zp ZP_WORD:20 105.0 (word) mul16u::b#2 b zp ZP_WORD:23 105.0
(word~) mul16u::b#3 b zp ZP_WORD:20 2.0 (word~) mul16u::b#3 b zp ZP_WORD:23 2.0
(dword) mul16u::mb (dword) mul16u::mb
(dword) mul16u::mb#0 mb zp ZP_DWORD:22 4.0 (dword) mul16u::mb#0 mb zp ZP_DWORD:17 4.0
(dword) mul16u::mb#1 mb zp ZP_DWORD:22 2002.0 (dword) mul16u::mb#1 mb zp ZP_DWORD:17 2002.0
(dword) mul16u::mb#2 mb zp ZP_DWORD:22 429.2857142857143 (dword) mul16u::mb#2 mb zp ZP_DWORD:17 429.2857142857143
(dword) mul16u::res (dword) mul16u::res
(dword) mul16u::res#1 res zp ZP_DWORD:16 2002.0 (dword) mul16u::res#1 res zp ZP_DWORD:25 2002.0
(dword) mul16u::res#2 res zp ZP_DWORD:16 443.7142857142857 (dword) mul16u::res#2 res zp ZP_DWORD:25 443.7142857142857
(dword) mul16u::res#6 res zp ZP_DWORD:16 1001.0 (dword) mul16u::res#6 res zp ZP_DWORD:25 1001.0
(dword) mul16u::return (dword) mul16u::return
(dword) mul16u::return#2 return zp ZP_DWORD:16 4.0 (dword) mul16u::return#2 return zp ZP_DWORD:25 4.0
(dword) mul16u::return#3 return zp ZP_DWORD:16 202.0 (dword) mul16u::return#3 return zp ZP_DWORD:25 202.0
(void()) mul16u_compare() (void()) mul16u_compare()
(label) mul16u_compare::@1 (label) mul16u_compare::@1
(label) mul16u_compare::@10 (label) mul16u_compare::@10
@ -136,25 +147,25 @@
(label) mul16u_compare::@8 (label) mul16u_compare::@8
(label) mul16u_compare::@return (label) mul16u_compare::@return
(word) mul16u_compare::a (word) mul16u_compare::a
(word) mul16u_compare::a#1 a zp ZP_WORD:2 17.862068965517242 (word) mul16u_compare::a#1 a zp ZP_WORD:21 17.862068965517242
(word) mul16u_compare::a#2 a zp ZP_WORD:2 213.0 (word) mul16u_compare::a#2 a zp ZP_WORD:21 213.0
(word) mul16u_compare::a#6 a zp ZP_WORD:2 11.0 (word) mul16u_compare::a#6 a zp ZP_WORD:21 11.0
(word) mul16u_compare::b (word) mul16u_compare::b
(word) mul16u_compare::b#1 b zp ZP_WORD:20 17.862068965517242 (word) mul16u_compare::b#1 b zp ZP_WORD:23 17.862068965517242
(word) mul16u_compare::b#2 b zp ZP_WORD:20 106.5 (word) mul16u_compare::b#2 b zp ZP_WORD:23 106.5
(word) mul16u_compare::b#6 b zp ZP_WORD:20 11.0 (word) mul16u_compare::b#6 b zp ZP_WORD:23 11.0
(byte) mul16u_compare::i (byte) mul16u_compare::i
(byte) mul16u_compare::i#1 i zp ZP_BYTE:26 16.5 (byte) mul16u_compare::i#1 i zp ZP_BYTE:2 16.5
(byte) mul16u_compare::i#12 i zp ZP_BYTE:26 0.7586206896551724 (byte) mul16u_compare::i#12 i zp ZP_BYTE:2 0.7586206896551724
(byte) mul16u_compare::j (byte) mul16u_compare::j
(byte) mul16u_compare::j#1 reg byte y 151.5 (byte) mul16u_compare::j#1 reg byte y 151.5
(byte) mul16u_compare::j#10 reg byte y 8.08 (byte) mul16u_compare::j#10 reg byte y 8.08
(dword) mul16u_compare::mf (dword) mul16u_compare::mf
(dword) mul16u_compare::mf#0 mf zp ZP_DWORD:22 15.692307692307692 (dword) mul16u_compare::mf#0 mf zp ZP_DWORD:17 15.692307692307692
(dword) mul16u_compare::mn (dword) mul16u_compare::mn
(dword) mul16u_compare::mn#0 mn zp ZP_DWORD:16 12.0 (dword) mul16u_compare::mn#0 mn zp ZP_DWORD:25 12.0
(dword) mul16u_compare::ms (dword) mul16u_compare::ms
(dword) mul16u_compare::ms#0 ms zp ZP_DWORD:10 14.523809523809522 (dword) mul16u_compare::ms#0 ms zp ZP_DWORD:11 14.523809523809522
(byte) mul16u_compare::ok (byte) mul16u_compare::ok
(byte) mul16u_compare::ok#3 reg byte x 202.0 (byte) mul16u_compare::ok#3 reg byte x 202.0
(byte) mul16u_compare::ok#4 reg byte x 33.666666666666664 (byte) mul16u_compare::ok#4 reg byte x 33.666666666666664
@ -173,26 +184,54 @@
(label) mul16u_error::@9 (label) mul16u_error::@9
(label) mul16u_error::@return (label) mul16u_error::@return
(word) mul16u_error::a (word) mul16u_error::a
(word) mul16u_error::a#0 a zp ZP_WORD:2 0.5714285714285714 (word) mul16u_error::a#0 a zp ZP_WORD:3 0.5714285714285714
(word) mul16u_error::b (word) mul16u_error::b
(word) mul16u_error::b#0 b zp ZP_WORD:20 0.4 (word) mul16u_error::b#0 b zp ZP_WORD:23 0.4
(dword) mul16u_error::mf (dword) mul16u_error::mf
(dword) mul16u_error::mf#0 mf zp ZP_DWORD:22 0.21052631578947367 (dword) mul16u_error::mf#0 mf zp ZP_DWORD:17 0.21052631578947367
(dword) mul16u_error::mn (dword) mul16u_error::mn
(dword) mul16u_error::mn#0 mn zp ZP_DWORD:16 0.25 (dword) mul16u_error::mn#0 mn zp ZP_DWORD:25 0.25
(dword) mul16u_error::ms (dword) mul16u_error::ms
(dword) mul16u_error::ms#0 ms zp ZP_DWORD:10 0.3076923076923077 (dword) mul16u_error::ms#0 ms zp ZP_DWORD:11 0.3076923076923077
(const string) mul16u_error::str str = (string) "multiply mismatch @" (const string) mul16u_error::str str = (string) "multiply mismatch @"
(const string) mul16u_error::str1 str1 = (string) "*@" (const string) mul16u_error::str1 str1 = (string) "*@"
(const string) mul16u_error::str2 str2 = (string) " slow:@" (const string) mul16u_error::str2 str2 = (string) " slow:@"
(const string) mul16u_error::str3 str3 = (string) " / normal:@" (const string) mul16u_error::str3 str3 = (string) " / normal:@"
(const string) mul16u_error::str4 str4 = (string) " / fast:@" (const string) mul16u_error::str4 str4 = (string) " / fast:@"
(signed dword()) mulf16s((signed word) mulf16s::a , (signed word) mulf16s::b)
(word~) mulf16s::$12 $12 zp ZP_WORD:9 4.0
(word~) mulf16s::$16 $16 zp ZP_WORD:9 4.0
(word~) mulf16s::$17 $17 zp ZP_WORD:9 4.0
(word~) mulf16s::$6 $6 zp ZP_WORD:9 4.0
(label) mulf16s::@1
(label) mulf16s::@2
(label) mulf16s::@3
(label) mulf16s::@4
(label) mulf16s::@6
(label) mulf16s::@return
(signed word) mulf16s::a
(signed word) mulf16s::a#0 a zp ZP_WORD:3 7.357142857142858
(signed word) mulf16s::b
(signed word) mulf16s::b#0 b zp ZP_WORD:5 9.363636363636363
(dword) mulf16s::m
(dword) mulf16s::m#0 m zp ZP_DWORD:17 2.0
(dword) mulf16s::m#1 m zp ZP_DWORD:17 4.0
(dword) mulf16s::m#2 m zp ZP_DWORD:17 4.0
(dword) mulf16s::m#4 m zp ZP_DWORD:17 6.0
(dword) mulf16s::m#5 m zp ZP_DWORD:17 2.5
(signed dword) mulf16s::return
(signed dword) mulf16s::return#0 return zp ZP_DWORD:17 34.33333333333333
(signed dword) mulf16s::return#2 return zp ZP_DWORD:17 202.0
(dword()) mulf16u((word) mulf16u::a , (word) mulf16u::b) (dword()) mulf16u((word) mulf16u::a , (word) mulf16u::b)
(label) mulf16u::@return (label) mulf16u::@return
(word) mulf16u::a (word) mulf16u::a
(word) mulf16u::a#0 a zp ZP_WORD:2 51.5 (word) mulf16u::a#1 a zp ZP_WORD:21 101.0
(word) mulf16u::a#2 a zp ZP_WORD:21 105.0
(word~) mulf16u::a#4 a zp ZP_WORD:21 2.0
(word) mulf16u::b (word) mulf16u::b
(word) mulf16u::b#0 b zp ZP_WORD:20 51.5 (word) mulf16u::b#1 b zp ZP_WORD:23 202.0
(word) mulf16u::b#2 b zp ZP_WORD:23 52.5
(word~) mulf16u::b#4 b zp ZP_WORD:23 4.0
(word*) mulf16u::memA (word*) mulf16u::memA
(const word*) mulf16u::memA#0 memA = ((word*))(byte/word/signed word/dword/signed dword) 248 (const word*) mulf16u::memA#0 memA = ((word*))(byte/word/signed word/dword/signed dword) 248
(word*) mulf16u::memB (word*) mulf16u::memB
@ -200,8 +239,9 @@
(dword*) mulf16u::memR (dword*) mulf16u::memR
(const dword*) mulf16u::memR#0 memR = ((dword*))(byte/word/signed word/dword/signed dword) 252 (const dword*) mulf16u::memR#0 memR = ((dword*))(byte/word/signed word/dword/signed dword) 252
(dword) mulf16u::return (dword) mulf16u::return
(dword) mulf16u::return#0 return zp ZP_DWORD:22 34.33333333333333 (dword) mulf16u::return#0 return zp ZP_DWORD:17 26.25
(dword) mulf16u::return#2 return zp ZP_DWORD:22 202.0 (dword) mulf16u::return#2 return zp ZP_DWORD:17 4.0
(dword) mulf16u::return#3 return zp ZP_DWORD:17 202.0
(void()) mulf_init() (void()) mulf_init()
(byte~) mulf_init::$2 reg byte a 22.0 (byte~) mulf_init::$2 reg byte a 22.0
(byte~) mulf_init::$5 reg byte a 22.0 (byte~) mulf_init::$5 reg byte a 22.0
@ -218,29 +258,29 @@
(byte) mulf_init::c#1 reg byte x 2.357142857142857 (byte) mulf_init::c#1 reg byte x 2.357142857142857
(byte) mulf_init::c#2 reg byte x 22.0 (byte) mulf_init::c#2 reg byte x 22.0
(byte) mulf_init::dir (byte) mulf_init::dir
(byte) mulf_init::dir#2 dir zp ZP_BYTE:26 4.714285714285714 (byte) mulf_init::dir#2 dir zp ZP_BYTE:2 4.714285714285714
(byte) mulf_init::dir#3 dir zp ZP_BYTE:26 7.333333333333333 (byte) mulf_init::dir#3 dir zp ZP_BYTE:2 7.333333333333333
(word) mulf_init::sqr (word) mulf_init::sqr
(word) mulf_init::sqr#1 sqr zp ZP_WORD:6 7.333333333333333 (word) mulf_init::sqr#1 sqr zp ZP_WORD:7 7.333333333333333
(word) mulf_init::sqr#2 sqr zp ZP_WORD:6 22.0 (word) mulf_init::sqr#2 sqr zp ZP_WORD:7 22.0
(word) mulf_init::sqr#3 sqr zp ZP_WORD:6 9.166666666666666 (word) mulf_init::sqr#3 sqr zp ZP_WORD:7 9.166666666666666
(word) mulf_init::sqr#4 sqr zp ZP_WORD:6 6.6000000000000005 (word) mulf_init::sqr#4 sqr zp ZP_WORD:7 6.6000000000000005
(byte*) mulf_init::sqr1_hi (byte*) mulf_init::sqr1_hi
(byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:4 5.5 (byte*) mulf_init::sqr1_hi#1 sqr1_hi zp ZP_WORD:5 5.5
(byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:4 3.0 (byte*) mulf_init::sqr1_hi#2 sqr1_hi zp ZP_WORD:5 3.0
(byte*) mulf_init::sqr1_lo (byte*) mulf_init::sqr1_lo
(byte*) mulf_init::sqr1_lo#1 sqr1_lo zp ZP_WORD:2 16.5 (byte*) mulf_init::sqr1_lo#1 sqr1_lo zp ZP_WORD:3 16.5
(byte*) mulf_init::sqr1_lo#2 sqr1_lo zp ZP_WORD:2 2.5384615384615383 (byte*) mulf_init::sqr1_lo#2 sqr1_lo zp ZP_WORD:3 2.5384615384615383
(byte*) mulf_init::sqr2_hi (byte*) mulf_init::sqr2_hi
(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:4 3.142857142857143 (byte*) mulf_init::sqr2_hi#1 sqr2_hi zp ZP_WORD:5 3.142857142857143
(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:4 11.0 (byte*) mulf_init::sqr2_hi#2 sqr2_hi zp ZP_WORD:5 11.0
(byte*) mulf_init::sqr2_lo (byte*) mulf_init::sqr2_lo
(byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:2 16.5 (byte*) mulf_init::sqr2_lo#1 sqr2_lo zp ZP_WORD:3 16.5
(byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:2 4.125 (byte*) mulf_init::sqr2_lo#2 sqr2_lo zp ZP_WORD:3 4.125
(byte) mulf_init::x_2 (byte) mulf_init::x_2
(byte) mulf_init::x_2#1 x_2 zp ZP_BYTE:26 11.0 (byte) mulf_init::x_2#1 x_2 zp ZP_BYTE:2 11.0
(byte) mulf_init::x_2#2 x_2 zp ZP_BYTE:26 4.888888888888889 (byte) mulf_init::x_2#2 x_2 zp ZP_BYTE:2 4.888888888888889
(byte) mulf_init::x_2#3 x_2 zp ZP_BYTE:26 8.25 (byte) mulf_init::x_2#3 x_2 zp ZP_BYTE:2 8.25
(byte) mulf_init::x_255 (byte) mulf_init::x_255
(byte) mulf_init::x_255#1 reg byte x 5.5 (byte) mulf_init::x_255#1 reg byte x 5.5
(byte) mulf_init::x_255#2 reg byte x 11.0 (byte) mulf_init::x_255#2 reg byte x 11.0
@ -259,40 +299,40 @@
(label) muls16s::@6 (label) muls16s::@6
(label) muls16s::@return (label) muls16s::@return
(signed word) muls16s::a (signed word) muls16s::a
(signed word) muls16s::a#0 a zp ZP_WORD:2 175.58333333333334 (signed word) muls16s::a#0 a zp ZP_WORD:3 175.58333333333334
(signed word) muls16s::b (signed word) muls16s::b
(signed word) muls16s::b#0 b zp ZP_WORD:4 191.1818181818182 (signed word) muls16s::b#0 b zp ZP_WORD:5 191.1818181818182
(signed word) muls16s::i (signed word) muls16s::i
(signed word) muls16s::i#1 i zp ZP_WORD:8 1501.5 (signed word) muls16s::i#1 i zp ZP_WORD:9 1501.5
(signed word) muls16s::i#2 i zp ZP_WORD:8 1001.0 (signed word) muls16s::i#2 i zp ZP_WORD:9 1001.0
(signed word) muls16s::j (signed word) muls16s::j
(signed word) muls16s::j#1 j zp ZP_WORD:8 1501.5 (signed word) muls16s::j#1 j zp ZP_WORD:9 1501.5
(signed word) muls16s::j#2 j zp ZP_WORD:8 1001.0 (signed word) muls16s::j#2 j zp ZP_WORD:9 1001.0
(signed dword) muls16s::m (signed dword) muls16s::m
(signed dword) muls16s::m#1 m zp ZP_DWORD:10 1001.0 (signed dword) muls16s::m#1 m zp ZP_DWORD:11 1001.0
(signed dword) muls16s::m#2 m zp ZP_DWORD:10 1001.0 (signed dword) muls16s::m#2 m zp ZP_DWORD:11 1001.0
(signed dword) muls16s::m#3 m zp ZP_DWORD:10 2002.0 (signed dword) muls16s::m#3 m zp ZP_DWORD:11 2002.0
(signed dword) muls16s::m#5 m zp ZP_DWORD:10 2002.0 (signed dword) muls16s::m#5 m zp ZP_DWORD:11 2002.0
(signed dword) muls16s::return (signed dword) muls16s::return
(signed dword) muls16s::return#0 return zp ZP_DWORD:10 701.0 (signed dword) muls16s::return#0 return zp ZP_DWORD:11 701.0
(signed dword) muls16s::return#2 return zp ZP_DWORD:10 202.0 (signed dword) muls16s::return#2 return zp ZP_DWORD:11 202.0
(dword()) muls16u((word) muls16u::a , (word) muls16u::b) (dword()) muls16u((word) muls16u::a , (word) muls16u::b)
(label) muls16u::@1 (label) muls16u::@1
(label) muls16u::@2 (label) muls16u::@2
(label) muls16u::@return (label) muls16u::@return
(word) muls16u::a (word) muls16u::a
(word) muls16u::a#0 a zp ZP_WORD:2 157.71428571428572 (word) muls16u::a#0 a zp ZP_WORD:21 157.71428571428572
(word) muls16u::b (word) muls16u::b
(word) muls16u::b#0 b zp ZP_WORD:20 183.66666666666669 (word) muls16u::b#0 b zp ZP_WORD:23 183.66666666666669
(word) muls16u::i (word) muls16u::i
(word) muls16u::i#1 i zp ZP_WORD:4 1501.5 (word) muls16u::i#1 i zp ZP_WORD:3 1501.5
(word) muls16u::i#2 i zp ZP_WORD:4 1001.0 (word) muls16u::i#2 i zp ZP_WORD:3 1001.0
(dword) muls16u::m (dword) muls16u::m
(dword) muls16u::m#1 m zp ZP_DWORD:10 1001.0 (dword) muls16u::m#1 m zp ZP_DWORD:11 1001.0
(dword) muls16u::m#3 m zp ZP_DWORD:10 2002.0 (dword) muls16u::m#3 m zp ZP_DWORD:11 2002.0
(dword) muls16u::return (dword) muls16u::return
(dword) muls16u::return#0 return zp ZP_DWORD:10 367.33333333333337 (dword) muls16u::return#0 return zp ZP_DWORD:11 367.33333333333337
(dword) muls16u::return#2 return zp ZP_DWORD:10 202.0 (dword) muls16u::return#2 return zp ZP_DWORD:11 202.0
(void()) print_byte((byte) print_byte::b) (void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0 (byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0 (byte~) print_byte::$2 reg byte a 4.0
@ -309,43 +349,43 @@
(byte) print_char::ch#3 reg byte a 4.0 (byte) print_char::ch#3 reg byte a 4.0
(byte) print_char::ch#4 reg byte a 6.0 (byte) print_char::ch#4 reg byte a 6.0
(byte*) print_char_cursor (byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:14 101.0 (byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:15 101.0
(byte*) print_char_cursor#124 print_char_cursor zp ZP_WORD:14 3.6060606060606064 (byte*) print_char_cursor#128 print_char_cursor zp ZP_WORD:15 3.2454545454545443
(byte*) print_char_cursor#125 print_char_cursor zp ZP_WORD:14 5.75 (byte*) print_char_cursor#129 print_char_cursor zp ZP_WORD:15 5.75
(byte*) print_char_cursor#126 print_char_cursor zp ZP_WORD:14 3.0 (byte*) print_char_cursor#130 print_char_cursor zp ZP_WORD:15 3.0
(byte*) print_char_cursor#128 print_char_cursor zp ZP_WORD:14 6.0 (byte*) print_char_cursor#132 print_char_cursor zp ZP_WORD:15 6.0
(byte*) print_char_cursor#129 print_char_cursor zp ZP_WORD:14 5.0 (byte*) print_char_cursor#133 print_char_cursor zp ZP_WORD:15 5.0
(byte*) print_char_cursor#130 print_char_cursor zp ZP_WORD:14 3.0 (byte*) print_char_cursor#134 print_char_cursor zp ZP_WORD:15 3.0
(byte*) print_char_cursor#132 print_char_cursor zp ZP_WORD:14 2.0 (byte*) print_char_cursor#136 print_char_cursor zp ZP_WORD:15 2.0
(byte*) print_char_cursor#135 print_char_cursor zp ZP_WORD:14 22.0 (byte*) print_char_cursor#139 print_char_cursor zp ZP_WORD:15 22.0
(byte*) print_char_cursor#139 print_char_cursor zp ZP_WORD:14 24.0 (byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:15 24.0
(byte*) print_char_cursor#144 print_char_cursor zp ZP_WORD:14 46.0 (byte*) print_char_cursor#148 print_char_cursor zp ZP_WORD:15 48.0
(byte*~) print_char_cursor#169 print_char_cursor zp ZP_WORD:14 4.0 (byte*~) print_char_cursor#176 print_char_cursor zp ZP_WORD:15 4.0
(byte*~) print_char_cursor#178 print_char_cursor zp ZP_WORD:14 4.0 (byte*~) print_char_cursor#185 print_char_cursor zp ZP_WORD:15 4.0
(byte*~) print_char_cursor#184 print_char_cursor zp ZP_WORD:14 4.0 (byte*~) print_char_cursor#192 print_char_cursor zp ZP_WORD:15 4.0
(byte*) print_char_cursor#20 print_char_cursor zp ZP_WORD:14 0.7317073170731708 (byte*) print_char_cursor#20 print_char_cursor zp ZP_WORD:15 0.7441860465116277
(byte*) print_char_cursor#82 print_char_cursor zp ZP_WORD:14 6.0 (byte*) print_char_cursor#84 print_char_cursor zp ZP_WORD:15 6.0
(void()) print_cls() (void()) print_cls()
(label) print_cls::@1 (label) print_cls::@1
(label) print_cls::@return (label) print_cls::@return
(byte*) print_cls::sc (byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5 (byte*) print_cls::sc#1 sc zp ZP_WORD:3 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5 (byte*) print_cls::sc#2 sc zp ZP_WORD:3 16.5
(void()) print_dword((dword) print_dword::dw) (void()) print_dword((dword) print_dword::dw)
(label) print_dword::@1 (label) print_dword::@1
(label) print_dword::@return (label) print_dword::@return
(dword) print_dword::dw (dword) print_dword::dw
(dword) print_dword::dw#0 dw zp ZP_DWORD:10 4.0 (dword) print_dword::dw#0 dw zp ZP_DWORD:11 4.0
(dword) print_dword::dw#1 dw zp ZP_DWORD:10 4.0 (dword) print_dword::dw#1 dw zp ZP_DWORD:11 4.0
(dword) print_dword::dw#2 dw zp ZP_DWORD:10 4.0 (dword) print_dword::dw#2 dw zp ZP_DWORD:11 4.0
(dword) print_dword::dw#3 dw zp ZP_DWORD:10 4.0 (dword) print_dword::dw#3 dw zp ZP_DWORD:11 4.0
(dword) print_dword::dw#4 dw zp ZP_DWORD:10 3.9999999999999996 (dword) print_dword::dw#4 dw zp ZP_DWORD:11 3.9999999999999996
(byte[]) print_hextab (byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor (byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:6 0.7230769230769231 (byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:7 0.6025641025641025
(byte*) print_line_cursor#22 print_line_cursor zp ZP_WORD:6 24.0 (byte*) print_line_cursor#22 print_line_cursor zp ZP_WORD:7 24.0
(byte*) print_line_cursor#43 print_line_cursor zp ZP_WORD:6 10.0 (byte*) print_line_cursor#43 print_line_cursor zp ZP_WORD:7 10.0
(void()) print_ln() (void()) print_ln()
(label) print_ln::@1 (label) print_ln::@1
(label) print_ln::@return (label) print_ln::@return
@ -356,56 +396,57 @@
(label) print_sdword::@4 (label) print_sdword::@4
(label) print_sdword::@return (label) print_sdword::@return
(signed dword) print_sdword::dw (signed dword) print_sdword::dw
(signed dword) print_sdword::dw#0 dw zp ZP_DWORD:10 4.0 (signed dword) print_sdword::dw#0 dw zp ZP_DWORD:11 4.0
(signed dword) print_sdword::dw#1 dw zp ZP_DWORD:10 4.0 (signed dword) print_sdword::dw#1 dw zp ZP_DWORD:11 4.0
(signed dword) print_sdword::dw#2 dw zp ZP_DWORD:10 4.0 (signed dword) print_sdword::dw#2 dw zp ZP_DWORD:11 4.0
(signed dword) print_sdword::dw#3 dw zp ZP_DWORD:10 2.5 (signed dword) print_sdword::dw#3 dw zp ZP_DWORD:11 4.0
(signed dword) print_sdword::dw#4 dw zp ZP_DWORD:10 6.0 (signed dword) print_sdword::dw#4 dw zp ZP_DWORD:11 3.0
(signed dword) print_sdword::dw#5 dw zp ZP_DWORD:11 6.0
(void()) print_str((byte*) print_str::str) (void()) print_str((byte*) print_str::str)
(label) print_str::@1 (label) print_str::@1
(label) print_str::@2 (label) print_str::@2
(label) print_str::@return (label) print_str::@return
(byte*) print_str::str (byte*) print_str::str
(byte*) print_str::str#0 str zp ZP_WORD:8 202.0 (byte*) print_str::str#0 str zp ZP_WORD:9 202.0
(byte*) print_str::str#14 str zp ZP_WORD:8 101.5 (byte*) print_str::str#15 str zp ZP_WORD:9 101.5
(byte*) print_str::str#16 str zp ZP_WORD:8 2.0 (byte*) print_str::str#17 str zp ZP_WORD:9 2.0
(void()) print_sword((signed word) print_sword::w) (void()) print_sword((signed word) print_sword::w)
(label) print_sword::@1 (label) print_sword::@1
(label) print_sword::@2 (label) print_sword::@2
(label) print_sword::@4 (label) print_sword::@4
(label) print_sword::@return (label) print_sword::@return
(signed word) print_sword::w (signed word) print_sword::w
(signed word) print_sword::w#0 w zp ZP_WORD:2 4.0 (signed word) print_sword::w#0 w zp ZP_WORD:3 4.0
(signed word) print_sword::w#1 w zp ZP_WORD:2 4.0 (signed word) print_sword::w#1 w zp ZP_WORD:3 4.0
(signed word) print_sword::w#2 w zp ZP_WORD:2 4.0 (signed word) print_sword::w#2 w zp ZP_WORD:3 4.0
(signed word) print_sword::w#3 w zp ZP_WORD:2 2.5 (signed word) print_sword::w#3 w zp ZP_WORD:3 2.5
(signed word) print_sword::w#4 w zp ZP_WORD:2 4.0 (signed word) print_sword::w#4 w zp ZP_WORD:3 4.0
(void()) print_word((word) print_word::w) (void()) print_word((word) print_word::w)
(label) print_word::@1 (label) print_word::@1
(label) print_word::@return (label) print_word::@return
(word) print_word::w (word) print_word::w
(word) print_word::w#1 w zp ZP_WORD:2 4.0 (word) print_word::w#1 w zp ZP_WORD:3 4.0
(word~) print_word::w#11 w zp ZP_WORD:2 4.0 (word~) print_word::w#11 w zp ZP_WORD:3 4.0
(word) print_word::w#2 w zp ZP_WORD:2 4.0 (word) print_word::w#2 w zp ZP_WORD:3 4.0
(word) print_word::w#3 w zp ZP_WORD:2 4.0 (word) print_word::w#3 w zp ZP_WORD:3 4.0
(word) print_word::w#4 w zp ZP_WORD:2 4.0 (word) print_word::w#4 w zp ZP_WORD:3 4.0
(word) print_word::w#5 w zp ZP_WORD:2 4.666666666666666 (word) print_word::w#5 w zp ZP_WORD:3 4.666666666666666
reg byte x [ mul16s_compare::i#10 mul16s_compare::i#1 ] zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 mul16u_compare::i#12 mul16u_compare::i#1 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_WORD:2 [ mul16s_compare::a#2 mul16s_compare::a#5 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 mul16u_error::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 mulf16u::a#0 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 mul16u_error::a#0 muls16u::i#2 muls16u::i#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:4 [ mul16s_compare::b#2 mul16s_compare::b#5 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mul16s_error::b#0 muls16u::i#2 muls16u::i#1 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp ZP_WORD:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 mul16s_error::b#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
reg byte y [ mul16s_compare::j#2 mul16s_compare::j#1 ] reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ]
reg byte a [ mul16s_compare::ok#2 ] reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ]
zp ZP_WORD:6 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp ZP_WORD:7 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
zp ZP_WORD:8 [ print_str::str#14 print_str::str#16 print_str::str#0 mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 muls16s::j#2 muls16s::j#1 muls16s::i#2 muls16s::i#1 mul16s::$6 mul16s::$16 mul16s::$12 mul16s::$17 ] zp ZP_WORD:9 [ print_str::str#15 print_str::str#17 print_str::str#0 mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 muls16s::j#2 muls16s::j#1 muls16s::i#2 muls16s::i#1 mulf16s::$6 mulf16s::$16 mulf16s::$12 mulf16s::$17 mul16s::$6 mul16s::$16 mul16s::$12 mul16s::$17 ]
zp ZP_DWORD:10 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#0 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 muls16s::m#5 muls16s::return#0 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 muls16u::return#0 muls16u::m#3 muls16u::m#1 muls16u::return#2 ] zp ZP_DWORD:11 [ print_sdword::dw#5 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_sdword::dw#0 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 muls16s::m#5 muls16s::return#0 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 muls16u::return#0 muls16u::m#3 muls16u::m#1 muls16u::return#2 ]
reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
zp ZP_WORD:14 [ print_char_cursor#82 print_char_cursor#132 print_char_cursor#128 print_char_cursor#129 print_char_cursor#130 print_char_cursor#144 print_char_cursor#125 print_char_cursor#139 print_char_cursor#169 print_char_cursor#124 print_char_cursor#20 print_char_cursor#178 print_char_cursor#135 print_char_cursor#184 print_char_cursor#1 print_char_cursor#126 ] zp ZP_WORD:15 [ print_char_cursor#84 print_char_cursor#136 print_char_cursor#132 print_char_cursor#133 print_char_cursor#134 print_char_cursor#148 print_char_cursor#129 print_char_cursor#143 print_char_cursor#176 print_char_cursor#128 print_char_cursor#20 print_char_cursor#185 print_char_cursor#139 print_char_cursor#192 print_char_cursor#1 print_char_cursor#130 ]
zp ZP_DWORD:16 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 mul16s_compare::mn#0 mul16s_error::mn#0 mul16u_compare::mn#0 mul16u_error::mn#0 ] zp ZP_DWORD:17 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 mul16s_error::mf#0 mul16u_compare::mf#0 mul16u_error::mf#0 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp ZP_WORD:20 [ mul16u::b#2 mul16u::b#3 mul16u::b#1 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 muls16u::b#0 mulf16u::b#0 mul16u_error::b#0 ] zp ZP_WORD:21 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#4 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ]
zp ZP_DWORD:22 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 mulf16u::return#2 mul16u_compare::mf#0 mulf16u::return#0 mul16u_error::mf#0 ] zp ZP_WORD:23 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#4 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#3 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ]
zp ZP_BYTE:26 [ mul16u_compare::i#12 mul16u_compare::i#1 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ] zp ZP_DWORD:25 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 mul16s_compare::mn#0 mul16s_error::mn#0 mul16u_compare::mn#0 mul16u_error::mn#0 ]
reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ] reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ]
reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ]
reg byte x [ mulf_init::c#2 mulf_init::c#1 ] reg byte x [ mulf_init::c#2 mulf_init::c#1 ]

View File

@ -1,13 +1,13 @@
@begin: scope:[] from @begin: scope:[] from
[0] phi() [ ] ( ) [0] phi() [ ] ( )
to:@32 to:@33
@32: scope:[] from @begin @33: scope:[] from @begin
[1] phi() [ ] ( ) [1] phi() [ ] ( )
[2] call main [ ] ( ) [2] call main [ ] ( )
to:@end to:@end
@end: scope:[] from @32 @end: scope:[] from @33
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @32 main: scope:[main] from @33
[4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] )
[5] call print_cls [ ] ( main:2 [ ] ) [5] call print_cls [ ] ( main:2 [ ] )
to:main::@1 to:main::@1

View File

@ -324,7 +324,7 @@ mul8s::@return: scope:[mul8s] from mul8s::@2
(byte[512]) mulf_sqr1_hi#0 ← { fill( 512, 0) } (byte[512]) mulf_sqr1_hi#0 ← { fill( 512, 0) }
(byte[512]) mulf_sqr2_lo#0 ← { fill( 512, 0) } (byte[512]) mulf_sqr2_lo#0 ← { fill( 512, 0) }
(byte[512]) mulf_sqr2_hi#0 ← { fill( 512, 0) } (byte[512]) mulf_sqr2_hi#0 ← { fill( 512, 0) }
to:@23 to:@24
mulf_init: scope:[mulf_init] from main::@1 mulf_init: scope:[mulf_init] from main::@1
(word) mulf_init::sqr#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) mulf_init::sqr#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) mulf_init::x_2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) mulf_init::x_2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -494,17 +494,17 @@ mulf8s::@return: scope:[mulf8s] from mulf8s::@2
(signed word) mulf8s::return#1 ← (signed word) mulf8s::return#3 (signed word) mulf8s::return#1 ← (signed word) mulf8s::return#3
return return
to:@return to:@return
@23: scope:[] from @19 @24: scope:[] from @19
(byte*) print_screen#7 ← phi( @19/(byte*) print_screen#8 ) (byte*) print_screen#7 ← phi( @19/(byte*) print_screen#8 )
(byte*) print_char_cursor#160 ← phi( @19/(byte*) print_char_cursor#168 ) (byte*) print_char_cursor#160 ← phi( @19/(byte*) print_char_cursor#168 )
(byte*) print_line_cursor#67 ← phi( @19/(byte*) print_line_cursor#78 ) (byte*) print_line_cursor#67 ← phi( @19/(byte*) print_line_cursor#78 )
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281 (byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
to:@26 to:@27
main: scope:[main] from @32 main: scope:[main] from @33
(byte*) print_char_cursor#138 ← phi( @32/(byte*) print_char_cursor#148 ) (byte*) print_char_cursor#138 ← phi( @33/(byte*) print_char_cursor#148 )
(byte*) print_line_cursor#46 ← phi( @32/(byte*) print_line_cursor#56 ) (byte*) print_line_cursor#46 ← phi( @33/(byte*) print_line_cursor#56 )
(byte*) print_screen#4 ← phi( @32/(byte*) print_screen#5 ) (byte*) print_screen#4 ← phi( @33/(byte*) print_screen#5 )
(byte*) BGCOL#1 ← phi( @32/(byte*) BGCOL#5 ) (byte*) BGCOL#1 ← phi( @33/(byte*) BGCOL#5 )
*((byte*) BGCOL#1) ← (byte/signed byte/word/signed word/dword/signed dword) 5 *((byte*) BGCOL#1) ← (byte/signed byte/word/signed word/dword/signed dword) 5
call print_cls call print_cls
to:main::@1 to:main::@1
@ -652,16 +652,16 @@ muls8s::@return: scope:[muls8s] from muls8s::@4
(signed word) muls8s::return#1 ← (signed word) muls8s::return#3 (signed word) muls8s::return#1 ← (signed word) muls8s::return#3
return return
to:@return to:@return
@26: scope:[] from @23 @27: scope:[] from @24
(byte*) print_screen#6 ← phi( @23/(byte*) print_screen#7 ) (byte*) print_screen#6 ← phi( @24/(byte*) print_screen#7 )
(byte*) print_char_cursor#159 ← phi( @23/(byte*) print_char_cursor#160 ) (byte*) print_char_cursor#159 ← phi( @24/(byte*) print_char_cursor#160 )
(byte*) print_line_cursor#66 ← phi( @23/(byte*) print_line_cursor#67 ) (byte*) print_line_cursor#66 ← phi( @24/(byte*) print_line_cursor#67 )
(byte*) BGCOL#15 ← phi( @23/(byte*) BGCOL#0 ) (byte*) BGCOL#15 ← phi( @24/(byte*) BGCOL#0 )
(byte[512]) mula_sqr1_lo#0 ← { fill( 512, 0) } (byte[512]) mula_sqr1_lo#0 ← { fill( 512, 0) }
(byte[512]) mula_sqr1_hi#0 ← { fill( 512, 0) } (byte[512]) mula_sqr1_hi#0 ← { fill( 512, 0) }
(byte[512]) mula_sqr2_lo#0 ← { fill( 512, 0) } (byte[512]) mula_sqr2_lo#0 ← { fill( 512, 0) }
(byte[512]) mula_sqr2_hi#0 ← { fill( 512, 0) } (byte[512]) mula_sqr2_hi#0 ← { fill( 512, 0) }
to:@32 to:@33
mulf_init_asm: scope:[mulf_init_asm] from main::@2 mulf_init_asm: scope:[mulf_init_asm] from main::@2
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- }
(byte*) mulf_init_asm::mem#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 255 (byte*) mulf_init_asm::mem#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 255
@ -1382,29 +1382,29 @@ mul8s_error::@return: scope:[mul8s_error] from mul8s_error::@11
(byte*) print_line_cursor#21 ← (byte*) print_line_cursor#43 (byte*) print_line_cursor#21 ← (byte*) print_line_cursor#43
return return
to:@return to:@return
@32: scope:[] from @26 @33: scope:[] from @27
(byte*) print_screen#5 ← phi( @26/(byte*) print_screen#6 ) (byte*) print_screen#5 ← phi( @27/(byte*) print_screen#6 )
(byte*) print_char_cursor#148 ← phi( @26/(byte*) print_char_cursor#159 ) (byte*) print_char_cursor#148 ← phi( @27/(byte*) print_char_cursor#159 )
(byte*) print_line_cursor#56 ← phi( @26/(byte*) print_line_cursor#66 ) (byte*) print_line_cursor#56 ← phi( @27/(byte*) print_line_cursor#66 )
(byte*) BGCOL#5 ← phi( @26/(byte*) BGCOL#15 ) (byte*) BGCOL#5 ← phi( @27/(byte*) BGCOL#15 )
call main call main
to:@33 to:@34
@33: scope:[] from @32 @34: scope:[] from @33
(byte*) print_char_cursor#129 ← phi( @32/(byte*) print_char_cursor#25 ) (byte*) print_char_cursor#129 ← phi( @33/(byte*) print_char_cursor#25 )
(byte*) print_line_cursor#44 ← phi( @32/(byte*) print_line_cursor#9 ) (byte*) print_line_cursor#44 ← phi( @33/(byte*) print_line_cursor#9 )
(byte*) print_line_cursor#22 ← (byte*) print_line_cursor#44 (byte*) print_line_cursor#22 ← (byte*) print_line_cursor#44
(byte*) print_char_cursor#65 ← (byte*) print_char_cursor#129 (byte*) print_char_cursor#65 ← (byte*) print_char_cursor#129
to:@end to:@end
@end: scope:[] from @33 @end: scope:[] from @34
SYMBOL TABLE SSA SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef" (const string) $0 = (string) "0123456789abcdef"
(label) @10 (label) @10
(label) @19 (label) @19
(label) @23 (label) @24
(label) @26 (label) @27
(label) @32
(label) @33 (label) @33
(label) @34
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BGCOL (byte*) BGCOL
@ -3131,13 +3131,13 @@ Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) mul8u::@3 Culled Empty Block (label) mul8u::@3
Culled Empty Block (label) @19 Culled Empty Block (label) @19
Culled Empty Block (label) mulf_init::@6 Culled Empty Block (label) mulf_init::@6
Culled Empty Block (label) @23 Culled Empty Block (label) @24
Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@6
Culled Empty Block (label) muls8u::@3 Culled Empty Block (label) muls8u::@3
Culled Empty Block (label) muls8s::@1 Culled Empty Block (label) muls8s::@1
Culled Empty Block (label) muls8s::@2 Culled Empty Block (label) muls8s::@2
Culled Empty Block (label) muls8s::@7 Culled Empty Block (label) muls8s::@7
Culled Empty Block (label) @26 Culled Empty Block (label) @27
Culled Empty Block (label) mulf_tables_cmp::@9 Culled Empty Block (label) mulf_tables_cmp::@9
Culled Empty Block (label) mulf_tables_cmp::@11 Culled Empty Block (label) mulf_tables_cmp::@11
Culled Empty Block (label) mul8u_compare::@15 Culled Empty Block (label) mul8u_compare::@15
@ -3146,7 +3146,7 @@ Culled Empty Block (label) mul8u_error::@11
Culled Empty Block (label) mul8s_compare::@15 Culled Empty Block (label) mul8s_compare::@15
Culled Empty Block (label) mul8s_compare::@17 Culled Empty Block (label) mul8s_compare::@17
Culled Empty Block (label) mul8s_error::@11 Culled Empty Block (label) mul8s_error::@11
Culled Empty Block (label) @33 Culled Empty Block (label) @34
Successful SSA optimization Pass2CullEmptyBlocks Successful SSA optimization Pass2CullEmptyBlocks
Alias (word) mulf8u::return#0 = (word~) mulf8u::$0 Alias (word) mulf8u::return#0 = (word~) mulf8u::$0
Successful SSA optimization Pass2AliasElimination Successful SSA optimization Pass2AliasElimination
@ -3299,7 +3299,7 @@ Added new block during phi lifting mulf_init::@11(between mulf_init::@4 and mulf
Added new block during phi lifting mulf_init::@12(between mulf_init::@3 and mulf_init::@4) Added new block during phi lifting mulf_init::@12(between mulf_init::@3 and mulf_init::@4)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Adding NOP phi() at start of @begin Adding NOP phi() at start of @begin
Adding NOP phi() at start of @32 Adding NOP phi() at start of @33
Adding NOP phi() at start of @end Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@2
@ -3480,7 +3480,7 @@ Culled Empty Block (label) mulf_init::@9
Culled Empty Block (label) mulf_init::@10 Culled Empty Block (label) mulf_init::@10
Culled Empty Block (label) print_cls::@3 Culled Empty Block (label) print_cls::@3
Adding NOP phi() at start of @begin Adding NOP phi() at start of @begin
Adding NOP phi() at start of @32 Adding NOP phi() at start of @33
Adding NOP phi() at start of @end Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@2
@ -3520,14 +3520,14 @@ Adding NOP phi() at start of print_cls
FINAL CONTROL FLOW GRAPH FINAL CONTROL FLOW GRAPH
@begin: scope:[] from @begin: scope:[] from
[0] phi() [ ] ( ) [0] phi() [ ] ( )
to:@32 to:@33
@32: scope:[] from @begin @33: scope:[] from @begin
[1] phi() [ ] ( ) [1] phi() [ ] ( )
[2] call main [ ] ( ) [2] call main [ ] ( )
to:@end to:@end
@end: scope:[] from @32 @end: scope:[] from @33
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @32 main: scope:[main] from @33
[4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] )
[5] call print_cls [ ] ( main:2 [ ] ) [5] call print_cls [ ] ( main:2 [ ] )
to:main::@1 to:main::@1
@ -4718,15 +4718,15 @@ INITIAL ASM
.label print_line_cursor = 5 .label print_line_cursor = 5
//SEG2 @begin //SEG2 @begin
bbegin: bbegin:
//SEG3 [1] phi from @begin to @32 [phi:@begin->@32] //SEG3 [1] phi from @begin to @33 [phi:@begin->@33]
b32_from_bbegin: b33_from_bbegin:
jmp b32 jmp b33
//SEG4 @32 //SEG4 @33
b32: b33:
//SEG5 [2] call main [ ] ( ) //SEG5 [2] call main [ ] ( )
jsr main jsr main
//SEG6 [3] phi from @32 to @end [phi:@32->@end] //SEG6 [3] phi from @33 to @end [phi:@33->@end]
bend_from_b32: bend_from_b33:
jmp bend jmp bend
//SEG7 @end //SEG7 @end
bend: bend:
@ -7306,15 +7306,15 @@ ASSEMBLER BEFORE OPTIMIZATION
.label print_line_cursor = 4 .label print_line_cursor = 4
//SEG2 @begin //SEG2 @begin
bbegin: bbegin:
//SEG3 [1] phi from @begin to @32 [phi:@begin->@32] //SEG3 [1] phi from @begin to @33 [phi:@begin->@33]
b32_from_bbegin: b33_from_bbegin:
jmp b32 jmp b33
//SEG4 @32 //SEG4 @33
b32: b33:
//SEG5 [2] call main [ ] ( ) //SEG5 [2] call main [ ] ( )
jsr main jsr main
//SEG6 [3] phi from @32 to @end [phi:@32->@end] //SEG6 [3] phi from @33 to @end [phi:@33->@end]
bend_from_b32: bend_from_b33:
jmp bend jmp bend
//SEG7 @end //SEG7 @end
bend: bend:
@ -9248,7 +9248,7 @@ print_cls: {
mula_sqr2_hi: .fill $200, 0 mula_sqr2_hi: .fill $200, 0
ASSEMBLER OPTIMIZATIONS ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b32 Removing instruction jmp b33
Removing instruction jmp bend Removing instruction jmp bend
Removing instruction jmp b1 Removing instruction jmp b1
Removing instruction jmp b2 Removing instruction jmp b2
@ -9416,8 +9416,8 @@ Replacing label b3_from_b4 with b3
Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1
Removing instruction bbegin: Removing instruction bbegin:
Removing instruction b32_from_bbegin: Removing instruction b33_from_bbegin:
Removing instruction bend_from_b32: Removing instruction bend_from_b33:
Removing instruction b1_from_main: Removing instruction b1_from_main:
Removing instruction mulf_init_from_b1: Removing instruction mulf_init_from_b1:
Removing instruction b2_from_b1: Removing instruction b2_from_b1:
@ -9512,7 +9512,7 @@ Removing instruction b12_from_b3:
Removing instruction b4_from_b12: Removing instruction b4_from_b12:
Removing instruction b1_from_b1: Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b32: Removing instruction b33:
Removing instruction bend: Removing instruction bend:
Removing instruction print_cls_from_main: Removing instruction print_cls_from_main:
Removing instruction b1: Removing instruction b1:
@ -9675,7 +9675,7 @@ Removing unreachable instruction jmp b4
Succesful ASM optimization Pass5UnreachableCodeElimination Succesful ASM optimization Pass5UnreachableCodeElimination
FINAL SYMBOL TABLE FINAL SYMBOL TABLE
(label) @32 (label) @33
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BGCOL (byte*) BGCOL
@ -10168,11 +10168,11 @@ Score: 224322
.label print_char_cursor = $a .label print_char_cursor = $a
.label print_line_cursor = 4 .label print_line_cursor = 4
//SEG2 @begin //SEG2 @begin
//SEG3 [1] phi from @begin to @32 [phi:@begin->@32] //SEG3 [1] phi from @begin to @33 [phi:@begin->@33]
//SEG4 @32 //SEG4 @33
//SEG5 [2] call main [ ] ( ) //SEG5 [2] call main [ ] ( )
jsr main jsr main
//SEG6 [3] phi from @32 to @end [phi:@32->@end] //SEG6 [3] phi from @33 to @end [phi:@33->@end]
//SEG7 @end //SEG7 @end
//SEG8 main //SEG8 main
main: { main: {

View File

@ -1,4 +1,4 @@
(label) @32 (label) @33
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BGCOL (byte*) BGCOL