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
// 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) {
dword m = mulf16u((word)a, (word)b);
if(a<0) {
@ -181,7 +181,6 @@ signed dword mulf16s(signed word a, signed word b) {
}
if(b<0) {
>m = (>m)-(word)a;
m = m + 1;
}
return (signed dword)m;
}

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

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@32
@32: scope:[] from @begin
to:@33
@33: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main [ ] ( )
to:@end
@end: scope:[] from @32
@end: scope:[] from @33
[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 [ ] )
[5] call print_cls [ ] ( main:2 [ ] )
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_sqr2_lo#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
(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
@ -494,17 +494,17 @@ mulf8s::@return: scope:[mulf8s] from mulf8s::@2
(signed word) mulf8s::return#1 ← (signed word) mulf8s::return#3
return
to:@return
@23: scope:[] from @19
@24: scope:[] from @19
(byte*) print_screen#7 ← phi( @19/(byte*) print_screen#8 )
(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*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
to:@26
main: scope:[main] from @32
(byte*) print_char_cursor#138 ← phi( @32/(byte*) print_char_cursor#148 )
(byte*) print_line_cursor#46 ← phi( @32/(byte*) print_line_cursor#56 )
(byte*) print_screen#4 ← phi( @32/(byte*) print_screen#5 )
(byte*) BGCOL#1 ← phi( @32/(byte*) BGCOL#5 )
to:@27
main: scope:[main] from @33
(byte*) print_char_cursor#138 ← phi( @33/(byte*) print_char_cursor#148 )
(byte*) print_line_cursor#46 ← phi( @33/(byte*) print_line_cursor#56 )
(byte*) print_screen#4 ← phi( @33/(byte*) print_screen#5 )
(byte*) BGCOL#1 ← phi( @33/(byte*) BGCOL#5 )
*((byte*) BGCOL#1) ← (byte/signed byte/word/signed word/dword/signed dword) 5
call print_cls
to:main::@1
@ -652,16 +652,16 @@ muls8s::@return: scope:[muls8s] from muls8s::@4
(signed word) muls8s::return#1 ← (signed word) muls8s::return#3
return
to:@return
@26: scope:[] from @23
(byte*) print_screen#6 ← phi( @23/(byte*) print_screen#7 )
(byte*) print_char_cursor#159 ← phi( @23/(byte*) print_char_cursor#160 )
(byte*) print_line_cursor#66 ← phi( @23/(byte*) print_line_cursor#67 )
(byte*) BGCOL#15 ← phi( @23/(byte*) BGCOL#0 )
@27: scope:[] from @24
(byte*) print_screen#6 ← phi( @24/(byte*) print_screen#7 )
(byte*) print_char_cursor#159 ← phi( @24/(byte*) print_char_cursor#160 )
(byte*) print_line_cursor#66 ← phi( @24/(byte*) print_line_cursor#67 )
(byte*) BGCOL#15 ← phi( @24/(byte*) BGCOL#0 )
(byte[512]) mula_sqr1_lo#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_hi#0 ← { fill( 512, 0) }
to:@32
to:@33
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!- }
(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
return
to:@return
@32: scope:[] from @26
(byte*) print_screen#5 ← phi( @26/(byte*) print_screen#6 )
(byte*) print_char_cursor#148 ← phi( @26/(byte*) print_char_cursor#159 )
(byte*) print_line_cursor#56 ← phi( @26/(byte*) print_line_cursor#66 )
(byte*) BGCOL#5 ← phi( @26/(byte*) BGCOL#15 )
@33: scope:[] from @27
(byte*) print_screen#5 ← phi( @27/(byte*) print_screen#6 )
(byte*) print_char_cursor#148 ← phi( @27/(byte*) print_char_cursor#159 )
(byte*) print_line_cursor#56 ← phi( @27/(byte*) print_line_cursor#66 )
(byte*) BGCOL#5 ← phi( @27/(byte*) BGCOL#15 )
call main
to:@33
@33: scope:[] from @32
(byte*) print_char_cursor#129 ← phi( @32/(byte*) print_char_cursor#25 )
(byte*) print_line_cursor#44 ← phi( @32/(byte*) print_line_cursor#9 )
to:@34
@34: scope:[] from @33
(byte*) print_char_cursor#129 ← phi( @33/(byte*) print_char_cursor#25 )
(byte*) print_line_cursor#44 ← phi( @33/(byte*) print_line_cursor#9 )
(byte*) print_line_cursor#22 ← (byte*) print_line_cursor#44
(byte*) print_char_cursor#65 ← (byte*) print_char_cursor#129
to:@end
@end: scope:[] from @33
@end: scope:[] from @34
SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef"
(label) @10
(label) @19
(label) @23
(label) @26
(label) @32
(label) @24
(label) @27
(label) @33
(label) @34
(label) @begin
(label) @end
(byte*) BGCOL
@ -3131,13 +3131,13 @@ Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) mul8u::@3
Culled Empty Block (label) @19
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) muls8u::@3
Culled Empty Block (label) muls8s::@1
Culled Empty Block (label) muls8s::@2
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::@11
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::@17
Culled Empty Block (label) mul8s_error::@11
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Successful SSA optimization Pass2CullEmptyBlocks
Alias (word) mulf8u::return#0 = (word~) mulf8u::$0
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 print_cls::@3(between print_cls::@1 and print_cls::@1)
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 main::@1
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) print_cls::@3
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 main::@1
Adding NOP phi() at start of main::@2
@ -3520,14 +3520,14 @@ Adding NOP phi() at start of print_cls
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@32
@32: scope:[] from @begin
to:@33
@33: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main [ ] ( )
to:@end
@end: scope:[] from @32
@end: scope:[] from @33
[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 [ ] )
[5] call print_cls [ ] ( main:2 [ ] )
to:main::@1
@ -4718,15 +4718,15 @@ INITIAL ASM
.label print_line_cursor = 5
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @32 [phi:@begin->@32]
b32_from_bbegin:
jmp b32
//SEG4 @32
b32:
//SEG3 [1] phi from @begin to @33 [phi:@begin->@33]
b33_from_bbegin:
jmp b33
//SEG4 @33
b33:
//SEG5 [2] call main [ ] ( )
jsr main
//SEG6 [3] phi from @32 to @end [phi:@32->@end]
bend_from_b32:
//SEG6 [3] phi from @33 to @end [phi:@33->@end]
bend_from_b33:
jmp bend
//SEG7 @end
bend:
@ -7306,15 +7306,15 @@ ASSEMBLER BEFORE OPTIMIZATION
.label print_line_cursor = 4
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @32 [phi:@begin->@32]
b32_from_bbegin:
jmp b32
//SEG4 @32
b32:
//SEG3 [1] phi from @begin to @33 [phi:@begin->@33]
b33_from_bbegin:
jmp b33
//SEG4 @33
b33:
//SEG5 [2] call main [ ] ( )
jsr main
//SEG6 [3] phi from @32 to @end [phi:@32->@end]
bend_from_b32:
//SEG6 [3] phi from @33 to @end [phi:@33->@end]
bend_from_b33:
jmp bend
//SEG7 @end
bend:
@ -9248,7 +9248,7 @@ print_cls: {
mula_sqr2_hi: .fill $200, 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b32
Removing instruction jmp b33
Removing instruction jmp bend
Removing instruction jmp b1
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
Removing instruction bbegin:
Removing instruction b32_from_bbegin:
Removing instruction bend_from_b32:
Removing instruction b33_from_bbegin:
Removing instruction bend_from_b33:
Removing instruction b1_from_main:
Removing instruction mulf_init_from_b1:
Removing instruction b2_from_b1:
@ -9512,7 +9512,7 @@ Removing instruction b12_from_b3:
Removing instruction b4_from_b12:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b32:
Removing instruction b33:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
@ -9675,7 +9675,7 @@ Removing unreachable instruction jmp b4
Succesful ASM optimization Pass5UnreachableCodeElimination
FINAL SYMBOL TABLE
(label) @32
(label) @33
(label) @begin
(label) @end
(byte*) BGCOL
@ -10168,11 +10168,11 @@ Score: 224322
.label print_char_cursor = $a
.label print_line_cursor = 4
//SEG2 @begin
//SEG3 [1] phi from @begin to @32 [phi:@begin->@32]
//SEG4 @32
//SEG3 [1] phi from @begin to @33 [phi:@begin->@33]
//SEG4 @33
//SEG5 [2] call 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
//SEG8 main
main: {

View File

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