1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-10-21 17:24:39 +00:00

Added missing fragment.

This commit is contained in:
jespergravgaard 2020-05-07 08:42:27 +02:00
parent 21ee39aafa
commit 42aa2d9a8f
8 changed files with 275 additions and 238 deletions

View File

@ -0,0 +1,4 @@
lsr {m1}+1
ror {m1}
lsr {m1}+1
ror {m1}

View File

@ -11,11 +11,16 @@ void main() {
memset(SCREEN, ' ', 1000); memset(SCREEN, ' ', 1000);
unsigned int count = 0; unsigned int count = 0;
char* sc = SCREEN; char* sc = SCREEN;
for(char y=0;y<25;y++) { for(signed char y=0;y<25;y++) {
for(char x=0;x<40;x++) { for(signed char x=0;x<40;x++) {
signed char xd = (signed char)x*2-39; // xd = x-19.5
signed char yd = (signed char)y*2-24; // Multiply everything by 2 to allow integer math to calculate with .5 precision
signed char xd = x*2-39;
// yd = y-12
signed char yd = y*2-24;
// dist_sq = xd*xd + yd*yd
signed int dist_sq = mul8s(xd,xd) + mul8s(yd,yd); signed int dist_sq = mul8s(xd,xd) + mul8s(yd,yd);
// is dist_sq < 9*9 (distance to center is less than 9)
if(dist_sq<2*9*2*9) { if(dist_sq<2*9*2*9) {
*sc = '*'; *sc = '*';
count++; count++;

View File

@ -1,15 +1,13 @@
### Line Buffer
*Line Buffer*
Used for rendering lines into. Organized with linear addressed columns of 8 bits, allowing the line routine to addess the y-coordinate using X/Y-addressing. Used for rendering lines into. Organized with linear addressed columns of 8 bits, allowing the line routine to addess the y-coordinate using X/Y-addressing.
*Screen Buffer* ### Screen Buffer
Used for filling & showing to the user. There are 2 screen buffers allowing for double buffering. Used for filling & showing to the user. There are 2 screen buffers allowing for double buffering.
Memory organization is be adapted to the specific display. This means the same line routines can be used for charsets, bitmaps, sprites etc. Memory organization is be adapted to the specific display. This means the same line routines can be used for charsets, bitmaps, sprites etc.
*Algorithm* ### Algorithm
1. Move points 1. Move points
2. Clear line buffer 2. Clear line buffer
@ -18,7 +16,7 @@ Memory organization is be adapted to the specific display. This means the same
5. EOR-fill from line buffer into screen buffer 5. EOR-fill from line buffer into screen buffer
6. Mark screen buffer for showing, swap screen buffer 6. Mark screen buffer for showing, swap screen buffer
*Line Drawing* ### Line Drawing
Optimized line drawing routines for the 8 different cases. (xd positive/negative, yd , xd-yd positive/negative) Optimized line drawing routines for the 8 different cases. (xd positive/negative, yd , xd-yd positive/negative)
@ -29,11 +27,11 @@ Optimized line drawing routines for the 8 different cases. (xd positive/negative
- unrolled line routines can be called by writing an RTS at code of the stop x-position and JSR'ing into the code for the start X-position. - unrolled line routines can be called by writing an RTS at code of the stop x-position and JSR'ing into the code for the start X-position.
- The RTS must be fixed again after return. - The RTS must be fixed again after return.
*EOR filling* ### EOR filling
Unrolled EOR-filler from the line buffer. The screen buffer does not need to be cleared because the filler always fills all bytes. Unrolled EOR-filler from the line buffer. The screen buffer does not need to be cleared because the filler always fills all bytes.
*Effective Canvas Shape* ### Effective Canvas Shape
Both the line canvas and screen canvas can benefit from identifying the effective canvas shape where an object can be rendered. Both the line canvas and screen canvas can benefit from identifying the effective canvas shape where an object can be rendered.
For instance a freely 3D-rotated object may only occupy a circular shaped canvas. For instance a freely 3D-rotated object may only occupy a circular shaped canvas.
@ -41,5 +39,3 @@ By only clearing & filling this effective canvas these time consuming routines a
It might also be worth dynamically detecting the canvas shape for each rendered frame - to allow even faster clear/fill. It might also be worth dynamically detecting the canvas shape for each rendered frame - to allow even faster clear/fill.
This will require an efficient way of identifying min/max y-value in for each column that consumes less time than the time saved by not clearing/filling. This will require an efficient way of identifying min/max y-value in for each column that consumes less time than the time saved by not clearing/filling.

View File

@ -81,14 +81,14 @@ void main() {
line(canvas, x0, y0, x1, y1); line(canvas, x0, y0, x1, y1);
char x2 = COSTAB[p2_idx]; char x2 = COSTAB[p2_idx];
char y2 = SINTAB[p2_idx]; char y2 = SINTAB[p2_idx];
//line(canvas, x1, y1, x2, y2); line(canvas, x1, y1, x2, y2);
//line(canvas, x2, y2, x0, y0); line(canvas, x2, y2, x0, y0);
// Move idx // Move idx
//p0_idx++; p0_idx++;
//p1_idx++; p1_idx++;
//p2_idx++; p2_idx++;
// Fill canvas // Fill canvas
//eorfill(canvas); eorfill(canvas);
// Swap canvas to show on screen (using XOR) // Swap canvas to show on screen (using XOR)
canvas_show_memory ^= toD018(SCREEN,CANVAS1)^toD018(SCREEN,CANVAS2); canvas_show_memory ^= toD018(SCREEN,CANVAS1)^toD018(SCREEN,CANVAS2);
// swap canvas being rendered to (using XOR) // swap canvas being rendered to (using XOR)
@ -100,7 +100,9 @@ void main() {
printf("(%02x,%02x)-(%02x,%02x)", x0, y0, x1, y1); printf("(%02x,%02x)-(%02x,%02x)", x0, y0, x1, y1);
// Wait until the canvas on screen has been switched before starting work on the next frame // Wait until the canvas on screen has been switched before starting work on the next frame
canvas_show_flag = 1; canvas_show_flag = 1;
VICII->BORDER_COLOR = RED;
while(canvas_show_flag) {} while(canvas_show_flag) {}
VICII->BORDER_COLOR = BLACK;
} }
} }

View File

@ -69,10 +69,14 @@ main: {
sta.z count+1 sta.z count+1
sta.z y sta.z y
__b1: __b1:
// for(char y=0;y<25;y++) // for(signed char y=0;y<25;y++)
lda.z y lda.z y
cmp #$19 sec
bcc __b2 sbc #$19
bvc !+
eor #$80
!:
bmi __b2
// gotoxy(0,0) // gotoxy(0,0)
jsr gotoxy jsr gotoxy
// printf("%u chars",count) // printf("%u chars",count)
@ -89,24 +93,28 @@ main: {
lda #0 lda #0
sta.z x sta.z x
__b3: __b3:
// for(char x=0;x<40;x++) // for(signed char x=0;x<40;x++)
lda.z x lda.z x
cmp #$28 sec
bcc __b4 sbc #$28
// for(char y=0;y<25;y++) bvc !+
eor #$80
!:
bmi __b4
// for(signed char y=0;y<25;y++)
inc.z y inc.z y
jmp __b1 jmp __b1
__b4: __b4:
// (signed char)x*2 // x*2
lda.z x lda.z x
asl asl
// xd = (signed char)x*2-39 // xd = x*2-39
tax tax
axs #$27 axs #$27
// (signed char)y*2 // y*2
lda.z y lda.z y
asl asl
// yd = (signed char)y*2-24 // yd = y*2-24
sec sec
sbc #$18 sbc #$18
sta.z yd sta.z yd
@ -158,7 +166,7 @@ main: {
bne !+ bne !+
inc.z sc+1 inc.z sc+1
!: !:
// for(char x=0;x<40;x++) // for(signed char x=0;x<40;x++)
inc.z x inc.z x
jmp __b3 jmp __b3
s: .text " chars" s: .text " chars"

View File

@ -22,8 +22,8 @@ main: scope:[main] from @2
main::@1: scope:[main] from main main::@5 main::@1: scope:[main] from main main::@5
[10] (byte*) main::sc#8 ← phi( main::@5/(byte*) main::sc#10 main/(const nomodify byte*) SCREEN ) [10] (byte*) main::sc#8 ← phi( main::@5/(byte*) main::sc#10 main/(const nomodify byte*) SCREEN )
[10] (word) main::count#11 ← phi( main::@5/(word) main::count#10 main/(word) 0 ) [10] (word) main::count#11 ← phi( main::@5/(word) main::count#10 main/(word) 0 )
[10] (byte) main::y#2 ← phi( main::@5/(byte) main::y#1 main/(byte) 0 ) [10] (signed byte) main::y#2 ← phi( main::@5/(signed byte) main::y#1 main/(signed byte) 0 )
[11] if((byte) main::y#2<(byte) $19) goto main::@3 [11] if((signed byte) main::y#2<(signed byte) $19) goto main::@3
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@2: scope:[main] from main::@1
[12] phi() [12] phi()
@ -43,16 +43,16 @@ main::@return: scope:[main] from main::@9
main::@3: scope:[main] from main::@1 main::@6 main::@3: scope:[main] from main::@1 main::@6
[19] (word) main::count#10 ← phi( main::@1/(word) main::count#11 main::@6/(word) main::count#12 ) [19] (word) main::count#10 ← phi( main::@1/(word) main::count#11 main::@6/(word) main::count#12 )
[19] (byte*) main::sc#10 ← phi( main::@1/(byte*) main::sc#8 main::@6/(byte*) main::sc#1 ) [19] (byte*) main::sc#10 ← phi( main::@1/(byte*) main::sc#8 main::@6/(byte*) main::sc#1 )
[19] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@6/(byte) main::x#1 ) [19] (signed byte) main::x#2 ← phi( main::@1/(signed byte) 0 main::@6/(signed byte) main::x#1 )
[20] if((byte) main::x#2<(byte) $28) goto main::@4 [20] if((signed byte) main::x#2<(signed byte) $28) goto main::@4
to:main::@5 to:main::@5
main::@5: scope:[main] from main::@3 main::@5: scope:[main] from main::@3
[21] (byte) main::y#1 ← ++ (byte) main::y#2 [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#2
to:main::@1 to:main::@1
main::@4: scope:[main] from main::@3 main::@4: scope:[main] from main::@3
[22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 [22] (signed byte~) main::$5 ← (signed byte) main::x#2 << (byte) 1
[23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27
[24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 [24] (signed byte~) main::$7 ← (signed byte) main::y#2 << (byte) 1
[25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18
[26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0 [26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0
[27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0 [27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0
@ -76,7 +76,7 @@ main::@7: scope:[main] from main::@11
main::@6: scope:[main] from main::@11 main::@7 main::@6: scope:[main] from main::@11 main::@7
[38] (word) main::count#12 ← phi( main::@11/(word) main::count#10 main::@7/(word) main::count#1 ) [38] (word) main::count#12 ← phi( main::@11/(word) main::count#10 main::@7/(word) main::count#1 )
[39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10 [39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10
[40] (byte) main::x#1 ← ++ (byte) main::x#2 [40] (signed byte) main::x#1 ← ++ (signed byte) main::x#2
to:main::@3 to:main::@3
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)

View File

@ -971,20 +971,20 @@ main: scope:[main] from @2
main::@9: scope:[main] from main main::@9: scope:[main] from main
(word) main::count#0 ← (word) 0 (word) main::count#0 ← (word) 0
(byte*) main::sc#0 ← (const nomodify byte*) SCREEN (byte*) main::sc#0 ← (const nomodify byte*) SCREEN
(byte) main::y#0 ← (byte) 0 (signed byte) main::y#0 ← (signed byte) 0
to:main::@1 to:main::@1
main::@1: scope:[main] from main::@6 main::@9 main::@1: scope:[main] from main::@6 main::@9
(byte*) main::sc#9 ← phi( main::@6/(byte*) main::sc#10 main::@9/(byte*) main::sc#0 ) (byte*) main::sc#9 ← phi( main::@6/(byte*) main::sc#10 main::@9/(byte*) main::sc#0 )
(word) main::count#6 ← phi( main::@6/(word) main::count#8 main::@9/(word) main::count#0 ) (word) main::count#6 ← phi( main::@6/(word) main::count#8 main::@9/(word) main::count#0 )
(byte) main::y#2 ← phi( main::@6/(byte) main::y#1 main::@9/(byte) main::y#0 ) (signed byte) main::y#2 ← phi( main::@6/(signed byte) main::y#1 main::@9/(signed byte) main::y#0 )
(bool~) main::$3 ← (byte) main::y#2 < (number) $19 (bool~) main::$3 ← (signed byte) main::y#2 < (number) $19
if((bool~) main::$3) goto main::@2 if((bool~) main::$3) goto main::@2
to:main::@3 to:main::@3
main::@2: scope:[main] from main::@1 main::@2: scope:[main] from main::@1
(word) main::count#11 ← phi( main::@1/(word) main::count#6 ) (word) main::count#11 ← phi( main::@1/(word) main::count#6 )
(byte*) main::sc#8 ← phi( main::@1/(byte*) main::sc#9 ) (byte*) main::sc#8 ← phi( main::@1/(byte*) main::sc#9 )
(byte) main::y#6 ← phi( main::@1/(byte) main::y#2 ) (signed byte) main::y#6 ← phi( main::@1/(signed byte) main::y#2 )
(byte) main::x#0 ← (byte) 0 (signed byte) main::x#0 ← (signed byte) 0
to:main::@4 to:main::@4
main::@3: scope:[main] from main::@1 main::@3: scope:[main] from main::@1
(word) main::count#4 ← phi( main::@1/(word) main::count#6 ) (word) main::count#4 ← phi( main::@1/(word) main::count#6 )
@ -1012,22 +1012,20 @@ main::@12: scope:[main] from main::@11
main::@4: scope:[main] from main::@2 main::@7 main::@4: scope:[main] from main::@2 main::@7
(word) main::count#10 ← phi( main::@2/(word) main::count#11 main::@7/(word) main::count#12 ) (word) main::count#10 ← phi( main::@2/(word) main::count#11 main::@7/(word) main::count#12 )
(byte*) main::sc#7 ← phi( main::@2/(byte*) main::sc#8 main::@7/(byte*) main::sc#1 ) (byte*) main::sc#7 ← phi( main::@2/(byte*) main::sc#8 main::@7/(byte*) main::sc#1 )
(byte) main::y#5 ← phi( main::@2/(byte) main::y#6 main::@7/(byte) main::y#7 ) (signed byte) main::y#5 ← phi( main::@2/(signed byte) main::y#6 main::@7/(signed byte) main::y#7 )
(byte) main::x#2 ← phi( main::@2/(byte) main::x#0 main::@7/(byte) main::x#1 ) (signed byte) main::x#2 ← phi( main::@2/(signed byte) main::x#0 main::@7/(signed byte) main::x#1 )
(bool~) main::$4 ← (byte) main::x#2 < (number) $28 (bool~) main::$4 ← (signed byte) main::x#2 < (number) $28
if((bool~) main::$4) goto main::@5 if((bool~) main::$4) goto main::@5
to:main::@6 to:main::@6
main::@5: scope:[main] from main::@4 main::@5: scope:[main] from main::@4
(word) main::count#9 ← phi( main::@4/(word) main::count#10 ) (word) main::count#9 ← phi( main::@4/(word) main::count#10 )
(byte*) main::sc#6 ← phi( main::@4/(byte*) main::sc#7 ) (byte*) main::sc#6 ← phi( main::@4/(byte*) main::sc#7 )
(byte) main::y#3 ← phi( main::@4/(byte) main::y#5 ) (signed byte) main::y#3 ← phi( main::@4/(signed byte) main::y#5 )
(byte) main::x#3 ← phi( main::@4/(byte) main::x#2 ) (signed byte) main::x#3 ← phi( main::@4/(signed byte) main::x#2 )
(signed byte~) main::$14 ← (signed byte)(byte) main::x#3 (number~) main::$5 ← (signed byte) main::x#3 * (number) 2
(number~) main::$5 ← (signed byte~) main::$14 * (number) 2
(number~) main::$6 ← (number~) main::$5 - (number) $27 (number~) main::$6 ← (number~) main::$5 - (number) $27
(signed byte) main::xd#0 ← (number~) main::$6 (signed byte) main::xd#0 ← (number~) main::$6
(signed byte~) main::$15 ← (signed byte)(byte) main::y#3 (number~) main::$7 ← (signed byte) main::y#3 * (number) 2
(number~) main::$7 ← (signed byte~) main::$15 * (number) 2
(number~) main::$8 ← (number~) main::$7 - (number) $18 (number~) main::$8 ← (number~) main::$7 - (number) $18
(signed byte) main::yd#0 ← (number~) main::$8 (signed byte) main::yd#0 ← (number~) main::$8
(signed byte) mul8s::a#0 ← (signed byte) main::xd#0 (signed byte) mul8s::a#0 ← (signed byte) main::xd#0
@ -1036,9 +1034,9 @@ main::@5: scope:[main] from main::@4
(signed word) mul8s::return#2 ← (signed word) mul8s::return#1 (signed word) mul8s::return#2 ← (signed word) mul8s::return#1
to:main::@13 to:main::@13
main::@13: scope:[main] from main::@5 main::@13: scope:[main] from main::@5
(byte) main::y#10 ← phi( main::@5/(byte) main::y#3 ) (signed byte) main::y#10 ← phi( main::@5/(signed byte) main::y#3 )
(word) main::count#7 ← phi( main::@5/(word) main::count#9 ) (word) main::count#7 ← phi( main::@5/(word) main::count#9 )
(byte) main::x#7 ← phi( main::@5/(byte) main::x#3 ) (signed byte) main::x#7 ← phi( main::@5/(signed byte) main::x#3 )
(byte*) main::sc#5 ← phi( main::@5/(byte*) main::sc#6 ) (byte*) main::sc#5 ← phi( main::@5/(byte*) main::sc#6 )
(signed byte) main::yd#1 ← phi( main::@5/(signed byte) main::yd#0 ) (signed byte) main::yd#1 ← phi( main::@5/(signed byte) main::yd#0 )
(signed word) mul8s::return#5 ← phi( main::@5/(signed word) mul8s::return#2 ) (signed word) mul8s::return#5 ← phi( main::@5/(signed word) mul8s::return#2 )
@ -1049,9 +1047,9 @@ main::@13: scope:[main] from main::@5
(signed word) mul8s::return#3 ← (signed word) mul8s::return#1 (signed word) mul8s::return#3 ← (signed word) mul8s::return#1
to:main::@14 to:main::@14
main::@14: scope:[main] from main::@13 main::@14: scope:[main] from main::@13
(byte) main::y#8 ← phi( main::@13/(byte) main::y#10 ) (signed byte) main::y#8 ← phi( main::@13/(signed byte) main::y#10 )
(word) main::count#5 ← phi( main::@13/(word) main::count#7 ) (word) main::count#5 ← phi( main::@13/(word) main::count#7 )
(byte) main::x#5 ← phi( main::@13/(byte) main::x#7 ) (signed byte) main::x#5 ← phi( main::@13/(signed byte) main::x#7 )
(byte*) main::sc#4 ← phi( main::@13/(byte*) main::sc#5 ) (byte*) main::sc#4 ← phi( main::@13/(byte*) main::sc#5 )
(signed word) mul8s::return#6 ← phi( main::@13/(signed word) mul8s::return#3 ) (signed word) mul8s::return#6 ← phi( main::@13/(signed word) mul8s::return#3 )
(signed word~) main::$10 ← (signed word) mul8s::return#6 (signed word~) main::$10 ← (signed word) mul8s::return#6
@ -1064,20 +1062,20 @@ main::@14: scope:[main] from main::@13
main::@6: scope:[main] from main::@4 main::@6: scope:[main] from main::@4
(byte*) main::sc#10 ← phi( main::@4/(byte*) main::sc#7 ) (byte*) main::sc#10 ← phi( main::@4/(byte*) main::sc#7 )
(word) main::count#8 ← phi( main::@4/(word) main::count#10 ) (word) main::count#8 ← phi( main::@4/(word) main::count#10 )
(byte) main::y#4 ← phi( main::@4/(byte) main::y#5 ) (signed byte) main::y#4 ← phi( main::@4/(signed byte) main::y#5 )
(byte) main::y#1 ← ++ (byte) main::y#4 (signed byte) main::y#1 ← ++ (signed byte) main::y#4
to:main::@1 to:main::@1
main::@7: scope:[main] from main::@14 main::@8 main::@7: scope:[main] from main::@14 main::@8
(word) main::count#12 ← phi( main::@14/(word) main::count#5 main::@8/(word) main::count#1 ) (word) main::count#12 ← phi( main::@14/(word) main::count#5 main::@8/(word) main::count#1 )
(byte) main::y#7 ← phi( main::@14/(byte) main::y#8 main::@8/(byte) main::y#9 ) (signed byte) main::y#7 ← phi( main::@14/(signed byte) main::y#8 main::@8/(signed byte) main::y#9 )
(byte) main::x#4 ← phi( main::@14/(byte) main::x#5 main::@8/(byte) main::x#6 ) (signed byte) main::x#4 ← phi( main::@14/(signed byte) main::x#5 main::@8/(signed byte) main::x#6 )
(byte*) main::sc#2 ← phi( main::@14/(byte*) main::sc#4 main::@8/(byte*) main::sc#3 ) (byte*) main::sc#2 ← phi( main::@14/(byte*) main::sc#4 main::@8/(byte*) main::sc#3 )
(byte*) main::sc#1 ← ++ (byte*) main::sc#2 (byte*) main::sc#1 ← ++ (byte*) main::sc#2
(byte) main::x#1 ← ++ (byte) main::x#4 (signed byte) main::x#1 ← ++ (signed byte) main::x#4
to:main::@4 to:main::@4
main::@8: scope:[main] from main::@14 main::@8: scope:[main] from main::@14
(byte) main::y#9 ← phi( main::@14/(byte) main::y#8 ) (signed byte) main::y#9 ← phi( main::@14/(signed byte) main::y#8 )
(byte) main::x#6 ← phi( main::@14/(byte) main::x#5 ) (signed byte) main::x#6 ← phi( main::@14/(signed byte) main::x#5 )
(word) main::count#3 ← phi( main::@14/(word) main::count#5 ) (word) main::count#3 ← phi( main::@14/(word) main::count#5 )
(byte*) main::sc#3 ← phi( main::@14/(byte*) main::sc#4 ) (byte*) main::sc#3 ← phi( main::@14/(byte*) main::sc#4 )
*((byte*) main::sc#3) ← (byte) '*' *((byte*) main::sc#3) ← (byte) '*'
@ -1220,8 +1218,6 @@ SYMBOL TABLE SSA
(signed word~) main::$11 (signed word~) main::$11
(bool~) main::$12 (bool~) main::$12
(bool~) main::$13 (bool~) main::$13
(signed byte~) main::$14
(signed byte~) main::$15
(bool~) main::$3 (bool~) main::$3
(bool~) main::$4 (bool~) main::$4
(number~) main::$5 (number~) main::$5
@ -1273,29 +1269,29 @@ SYMBOL TABLE SSA
(byte*) main::sc#7 (byte*) main::sc#7
(byte*) main::sc#8 (byte*) main::sc#8
(byte*) main::sc#9 (byte*) main::sc#9
(byte) main::x (signed byte) main::x
(byte) main::x#0 (signed byte) main::x#0
(byte) main::x#1 (signed byte) main::x#1
(byte) main::x#2 (signed byte) main::x#2
(byte) main::x#3 (signed byte) main::x#3
(byte) main::x#4 (signed byte) main::x#4
(byte) main::x#5 (signed byte) main::x#5
(byte) main::x#6 (signed byte) main::x#6
(byte) main::x#7 (signed byte) main::x#7
(signed byte) main::xd (signed byte) main::xd
(signed byte) main::xd#0 (signed byte) main::xd#0
(byte) main::y (signed byte) main::y
(byte) main::y#0 (signed byte) main::y#0
(byte) main::y#1 (signed byte) main::y#1
(byte) main::y#10 (signed byte) main::y#10
(byte) main::y#2 (signed byte) main::y#2
(byte) main::y#3 (signed byte) main::y#3
(byte) main::y#4 (signed byte) main::y#4
(byte) main::y#5 (signed byte) main::y#5
(byte) main::y#6 (signed byte) main::y#6
(byte) main::y#7 (signed byte) main::y#7
(byte) main::y#8 (signed byte) main::y#8
(byte) main::y#9 (signed byte) main::y#9
(signed byte) main::yd (signed byte) main::yd
(signed byte) main::yd#0 (signed byte) main::yd#0
(signed byte) main::yd#1 (signed byte) main::yd#1
@ -2070,16 +2066,16 @@ Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$30
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$31 ← (number) 0 != (byte) printf_number_buffer::format_upper_case#1 Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$31 ← (number) 0 != (byte) printf_number_buffer::format_upper_case#1
Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$32 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#3 Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$32 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#3
Adding number conversion cast (unumber) $3e8 in (word) memset::num#2 ← (number) $3e8 Adding number conversion cast (unumber) $3e8 in (word) memset::num#2 ← (number) $3e8
Adding number conversion cast (unumber) $19 in (bool~) main::$3 ← (byte) main::y#2 < (number) $19 Adding number conversion cast (snumber) $19 in (bool~) main::$3 ← (signed byte) main::y#2 < (number) $19
Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#2 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#2 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#2 ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) main::$4 ← (byte) main::x#2 < (number) $28 Adding number conversion cast (snumber) $28 in (bool~) main::$4 ← (signed byte) main::x#2 < (number) $28
Adding number conversion cast (snumber) 2 in (number~) main::$5 ← (signed byte~) main::$14 * (number) 2 Adding number conversion cast (snumber) 2 in (number~) main::$5 ← (signed byte) main::x#3 * (number) 2
Adding number conversion cast (snumber) main::$5 in (number~) main::$5 ← (signed byte~) main::$14 * (snumber)(number) 2 Adding number conversion cast (snumber) main::$5 in (number~) main::$5 ← (signed byte) main::x#3 * (snumber)(number) 2
Adding number conversion cast (snumber) $27 in (number~) main::$6 ← (snumber~) main::$5 - (number) $27 Adding number conversion cast (snumber) $27 in (number~) main::$6 ← (snumber~) main::$5 - (number) $27
Adding number conversion cast (snumber) main::$6 in (number~) main::$6 ← (snumber~) main::$5 - (snumber)(number) $27 Adding number conversion cast (snumber) main::$6 in (number~) main::$6 ← (snumber~) main::$5 - (snumber)(number) $27
Adding number conversion cast (snumber) 2 in (number~) main::$7 ← (signed byte~) main::$15 * (number) 2 Adding number conversion cast (snumber) 2 in (number~) main::$7 ← (signed byte) main::y#3 * (number) 2
Adding number conversion cast (snumber) main::$7 in (number~) main::$7 ← (signed byte~) main::$15 * (snumber)(number) 2 Adding number conversion cast (snumber) main::$7 in (number~) main::$7 ← (signed byte) main::y#3 * (snumber)(number) 2
Adding number conversion cast (snumber) $18 in (number~) main::$8 ← (snumber~) main::$7 - (number) $18 Adding number conversion cast (snumber) $18 in (number~) main::$8 ← (snumber~) main::$7 - (number) $18
Adding number conversion cast (snumber) main::$8 in (number~) main::$8 ← (snumber~) main::$7 - (snumber)(number) $18 Adding number conversion cast (snumber) main::$8 in (number~) main::$8 ← (snumber~) main::$7 - (snumber)(number) $18
Adding number conversion cast (snumber) 2*9*2*9 in (bool~) main::$12 ← (signed word) main::dist_sq#0 < (number) 2*(number) 9*(number) 2*(number) 9 Adding number conversion cast (snumber) 2*9*2*9 in (bool~) main::$12 ← (signed word) main::dist_sq#0 < (number) 2*(number) 9*(number) 2*(number) 9
@ -2228,10 +2224,10 @@ Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) $19 Finalized signed number type (signed byte) $19
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) $28
Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) $27 Finalized signed number type (signed byte) $27
Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2
@ -2244,9 +2240,9 @@ Inferred type updated to byte in (unumber~) cputln::$0 ← (byte) $28 - (byte) c
Inferred type updated to byte in (unumber~) utoa::$4 ← (byte) utoa::max_digits#5 - (byte) 1 Inferred type updated to byte in (unumber~) utoa::$4 ← (byte) utoa::max_digits#5 - (byte) 1
Inferred type updated to byte in (unumber~) printf_uint::$0 ← (byte) 0 Inferred type updated to byte in (unumber~) printf_uint::$0 ← (byte) 0
Inferred type updated to byte for (unumber~) printf_uint::$2 Inferred type updated to byte for (unumber~) printf_uint::$2
Inferred type updated to signed byte in (snumber~) main::$5 ← (signed byte~) main::$14 * (signed byte) 2 Inferred type updated to signed byte in (snumber~) main::$5 ← (signed byte) main::x#3 * (signed byte) 2
Inferred type updated to signed byte in (snumber~) main::$6 ← (signed byte~) main::$5 - (signed byte) $27 Inferred type updated to signed byte in (snumber~) main::$6 ← (signed byte~) main::$5 - (signed byte) $27
Inferred type updated to signed byte in (snumber~) main::$7 ← (signed byte~) main::$15 * (signed byte) 2 Inferred type updated to signed byte in (snumber~) main::$7 ← (signed byte) main::y#3 * (signed byte) 2
Inferred type updated to signed byte in (snumber~) main::$8 ← (signed byte~) main::$7 - (signed byte) $18 Inferred type updated to signed byte in (snumber~) main::$8 ← (signed byte~) main::$7 - (signed byte) $18
Inversing boolean not [33] (bool~) memset::$1 ← (word) memset::num#3 <= (byte) 0 from [32] (bool~) memset::$0 ← (word) memset::num#3 > (byte) 0 Inversing boolean not [33] (bool~) memset::$1 ← (word) memset::num#3 <= (byte) 0 from [32] (bool~) memset::$0 ← (word) memset::num#3 > (byte) 0
Inversing boolean not [91] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [90] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0 Inversing boolean not [91] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [90] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0
@ -2264,7 +2260,7 @@ Inversing boolean not [386] (bool~) printf_number_buffer::$23 ← (signed byte)
Inversing boolean not [394] (bool~) printf_number_buffer::$7 ← (byte) 0 == (byte) printf_number_buffer::buffer_sign#2 from [393] (bool~) printf_number_buffer::$30 ← (byte) 0 != (byte) printf_number_buffer::buffer_sign#2 Inversing boolean not [394] (bool~) printf_number_buffer::$7 ← (byte) 0 == (byte) printf_number_buffer::buffer_sign#2 from [393] (bool~) printf_number_buffer::$30 ← (byte) 0 != (byte) printf_number_buffer::buffer_sign#2
Inversing boolean not [411] (bool~) printf_number_buffer::$12 ← (byte) 0 == (byte) printf_number_buffer::format_upper_case#1 from [410] (bool~) printf_number_buffer::$31 ← (byte) 0 != (byte) printf_number_buffer::format_upper_case#1 Inversing boolean not [411] (bool~) printf_number_buffer::$12 ← (byte) 0 == (byte) printf_number_buffer::format_upper_case#1 from [410] (bool~) printf_number_buffer::$31 ← (byte) 0 != (byte) printf_number_buffer::format_upper_case#1
Inversing boolean not [423] (bool~) printf_number_buffer::$14 ← (byte) 0 == (byte) printf_number_buffer::format_zero_padding#3 from [422] (bool~) printf_number_buffer::$32 ← (byte) 0 != (byte) printf_number_buffer::format_zero_padding#3 Inversing boolean not [423] (bool~) printf_number_buffer::$14 ← (byte) 0 == (byte) printf_number_buffer::format_zero_padding#3 from [422] (bool~) printf_number_buffer::$32 ← (byte) 0 != (byte) printf_number_buffer::format_zero_padding#3
Inversing boolean not [493] (bool~) main::$13 ← (signed word) main::dist_sq#0 >= (signed word)(number) 2*(number) 9*(number) 2*(number) 9 from [492] (bool~) main::$12 ← (signed word) main::dist_sq#0 < (signed word)(number) 2*(number) 9*(number) 2*(number) 9 Inversing boolean not [491] (bool~) main::$13 ← (signed word) main::dist_sq#0 >= (signed word)(number) 2*(number) 9*(number) 2*(number) 9 from [490] (bool~) main::$12 ← (signed word) main::dist_sq#0 < (signed word)(number) 2*(number) 9*(number) 2*(number) 9
Successful SSA optimization Pass2UnaryNotSimplification Successful SSA optimization Pass2UnaryNotSimplification
Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7 Alias candidate removed (volatile)conio_cursor_text = gotoxy::$6 cputln::$1 cscroll::$7
Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8 Alias candidate removed (volatile)conio_cursor_color = gotoxy::$7 cputln::$2 cscroll::$8
@ -2478,7 +2474,7 @@ Identical Phi Values (byte) printf_number_buffer::format_zero_padding#1 (byte) p
Identical Phi Values (byte*) printf_number_buffer::buffer_digits#1 (byte*) printf_number_buffer::buffer_digits#0 Identical Phi Values (byte*) printf_number_buffer::buffer_digits#1 (byte*) printf_number_buffer::buffer_digits#0
Identical Phi Values (byte) printf_number_buffer::buffer_sign#1 (byte) printf_number_buffer::buffer_sign#0 Identical Phi Values (byte) printf_number_buffer::buffer_sign#1 (byte) printf_number_buffer::buffer_sign#0
Identical Phi Values (byte) printf_number_buffer::format_upper_case#1 (byte) printf_number_buffer::format_upper_case#0 Identical Phi Values (byte) printf_number_buffer::format_upper_case#1 (byte) printf_number_buffer::format_upper_case#0
Identical Phi Values (byte) main::y#10 (byte) main::y#2 Identical Phi Values (signed byte) main::y#10 (signed byte) main::y#2
Successful SSA optimization Pass2IdenticalPhiElimination Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (void*) memset::return#0 (void*) memset::str#4 Identical Phi Values (void*) memset::return#0 (void*) memset::str#4
Successful SSA optimization Pass2IdenticalPhiElimination Successful SSA optimization Pass2IdenticalPhiElimination
@ -2512,9 +2508,9 @@ Simple Condition (bool~) printf_number_buffer::$20 [290] if((byte) 0==(byte) pri
Simple Condition (bool~) printf_number_buffer::$23 [295] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@1 Simple Condition (bool~) printf_number_buffer::$23 [295] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@1
Simple Condition (bool~) printf_number_buffer::$7 [299] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@3 Simple Condition (bool~) printf_number_buffer::$7 [299] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@3
Simple Condition (bool~) printf_number_buffer::$12 [309] if((byte) 0==(byte) printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5 Simple Condition (bool~) printf_number_buffer::$12 [309] if((byte) 0==(byte) printf_number_buffer::format_upper_case#0) goto printf_number_buffer::@5
Simple Condition (bool~) main::$3 [337] if((byte) main::y#2<(byte) $19) goto main::@2 Simple Condition (bool~) main::$3 [337] if((signed byte) main::y#2<(signed byte) $19) goto main::@2
Simple Condition (bool~) main::$4 [354] if((byte) main::x#2<(byte) $28) goto main::@5 Simple Condition (bool~) main::$4 [354] if((signed byte) main::x#2<(signed byte) $28) goto main::@5
Simple Condition (bool~) main::$13 [373] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@7 Simple Condition (bool~) main::$13 [371] if((signed word) main::dist_sq#0>=(signed word)(number) 2*(number) 9*(number) 2*(number) 9) goto main::@7
Successful SSA optimization Pass2ConditionalJumpSimplification Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting && if()-condition to two if()s [3] (bool~) toupper::$2 ← (bool~) toupper::$0 && (bool~) toupper::$1 Rewriting && if()-condition to two if()s [3] (bool~) toupper::$2 ← (bool~) toupper::$0 && (bool~) toupper::$1
Rewriting ! if()-condition to reversed if() [218] (bool~) utoa::$8 ← ! (bool~) utoa::$7 Rewriting ! if()-condition to reversed if() [218] (bool~) utoa::$8 ← ! (bool~) utoa::$7
@ -2584,8 +2580,8 @@ Constant (const byte) memset::c#2 = ' '
Constant (const word) memset::num#2 = $3e8 Constant (const word) memset::num#2 = $3e8
Constant (const word) main::count#0 = 0 Constant (const word) main::count#0 = 0
Constant (const byte*) main::sc#0 = SCREEN Constant (const byte*) main::sc#0 = SCREEN
Constant (const byte) main::y#0 = 0 Constant (const signed byte) main::y#0 = 0
Constant (const byte) main::x#0 = 0 Constant (const signed byte) main::x#0 = 0
Constant (const byte) gotoxy::x#2 = 0 Constant (const byte) gotoxy::x#2 = 0
Constant (const byte) gotoxy::y#2 = 0 Constant (const byte) gotoxy::y#2 = 0
Constant (const byte) printf_uint::format_min_length#0 = 0 Constant (const byte) printf_uint::format_min_length#0 = 0
@ -2772,18 +2768,18 @@ Simple Condition (bool~) utoa::$12 [120] if((byte) 0!=(byte) utoa::started#2) go
Simple Condition (bool~) printf_number_buffer::$1 [157] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@23 Simple Condition (bool~) printf_number_buffer::$1 [157] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@23
Simple Condition (bool~) printf_number_buffer::$33 [162] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@24 Simple Condition (bool~) printf_number_buffer::$33 [162] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@24
Simple Condition (bool~) printf_number_buffer::$34 [170] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@26 Simple Condition (bool~) printf_number_buffer::$34 [170] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@26
Simple Condition (bool~) utoa::$6 [209] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@14 Simple Condition (bool~) utoa::$6 [207] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@14
Simple Condition (bool~) printf_number_buffer::$35 [211] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8 Simple Condition (bool~) printf_number_buffer::$35 [209] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8
Simple Condition (bool~) printf_number_buffer::$2 [212] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@22 Simple Condition (bool~) printf_number_buffer::$2 [210] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@22
Simple Condition (bool~) printf_number_buffer::$36 [214] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10 Simple Condition (bool~) printf_number_buffer::$36 [212] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10
Simple Condition (bool~) printf_number_buffer::$37 [216] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12 Simple Condition (bool~) printf_number_buffer::$37 [214] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12
Simple Condition (bool~) printf_number_buffer::$14 [217] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@25 Simple Condition (bool~) printf_number_buffer::$14 [215] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@25
Successful SSA optimization Pass2ConditionalJumpSimplification Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [157] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2 Negating conditional jump and destination [157] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2
Negating conditional jump and destination [162] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4 Negating conditional jump and destination [162] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4
Negating conditional jump and destination [170] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return Negating conditional jump and destination [170] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return
Negating conditional jump and destination [212] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2 Negating conditional jump and destination [210] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2
Negating conditional jump and destination [217] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return Negating conditional jump and destination [215] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [114] (byte~) utoa::$4 ← (const byte) utoa::max_digits#1 - (byte) 1 Constant right-side identified [114] (byte~) utoa::$4 ← (const byte) utoa::max_digits#1 - (byte) 1
Constant right-side identified [159] (byte) printf_padding::length#0 ← (byte)(const signed byte) printf_number_buffer::padding#0 Constant right-side identified [159] (byte) printf_padding::length#0 ← (byte)(const signed byte) printf_number_buffer::padding#0
@ -2800,11 +2796,11 @@ if() condition always true - replacing block destination [58] if((const byte) go
if() condition always false - eliminating [157] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2 if() condition always false - eliminating [157] if((byte) 0!=(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@2
if() condition always true - replacing block destination [162] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4 if() condition always true - replacing block destination [162] if((byte) 0==(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4
if() condition always true - replacing block destination [170] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return if() condition always true - replacing block destination [170] if((byte) 0==(const byte) printf_number_buffer::format_justify_left#0) goto printf_number_buffer::@return
if() condition always false - eliminating [211] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8 if() condition always false - eliminating [209] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@8
if() condition always false - eliminating [212] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2 if() condition always false - eliminating [210] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2
if() condition always false - eliminating [214] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10 if() condition always false - eliminating [212] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@10
if() condition always false - eliminating [216] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12 if() condition always false - eliminating [214] if((signed byte) 0!=(const signed byte) printf_number_buffer::padding#0) goto printf_number_buffer::@12
if() condition always false - eliminating [217] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return if() condition always false - eliminating [215] if((byte) 0!=(const byte) printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@return
Successful SSA optimization Pass2ConstantIfs Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in
Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in Simplifying constant evaluating to zero (byte)(const signed byte) printf_number_buffer::padding#0 in
@ -2906,15 +2902,13 @@ Inlining Noop Cast [15] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#4 k
Inlining Noop Cast [41] (byte~) mul8s::$13 ← (byte)(signed byte) mul8s::b#2 keeping mul8s::b#2 Inlining Noop Cast [41] (byte~) mul8s::$13 ← (byte)(signed byte) mul8s::b#2 keeping mul8s::b#2
Inlining Noop Cast [45] (signed word) mul8s::return#0 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 Inlining Noop Cast [45] (signed word) mul8s::return#0 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4
Inlining Noop Cast [47] (byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#2 keeping mul8s::a#2 Inlining Noop Cast [47] (byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#2 keeping mul8s::a#2
Inlining Noop Cast [146] (signed byte~) main::$14 ← (signed byte)(byte) main::x#2 keeping main::x#2
Inlining Noop Cast [149] (signed byte~) main::$15 ← (signed byte)(byte) main::y#2 keeping main::y#2
Successful SSA optimization Pass2NopCastInlining Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [155] (signed word) mul8s::return#2 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 Inlining Noop Cast [153] (signed word) mul8s::return#2 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4
Inlining Noop Cast [160] (signed word) mul8s::return#3 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 Inlining Noop Cast [158] (signed word) mul8s::return#3 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4
Successful SSA optimization Pass2NopCastInlining Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [104] (byte~) utoa::$10 ← (byte) utoa::digit#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [104] (byte~) utoa::$10 ← (byte) utoa::digit#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [147] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 * (signed byte) 2 Rewriting multiplication to use shift [146] (signed byte~) main::$5 ← (signed byte) main::x#2 * (signed byte) 2
Rewriting multiplication to use shift [150] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 * (signed byte) 2 Rewriting multiplication to use shift [148] (signed byte~) main::$7 ← (signed byte) main::y#2 * (signed byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const void*) memcpy::destination#0 Inlining constant with var siblings (const void*) memcpy::destination#0
Inlining constant with var siblings (const void*) memcpy::source#0 Inlining constant with var siblings (const void*) memcpy::source#0
@ -2941,8 +2935,8 @@ Inlining constant with var siblings (const byte*) utoa::buffer#5
Inlining constant with var siblings (const byte) utoa_append::digit#0 Inlining constant with var siblings (const byte) utoa_append::digit#0
Inlining constant with var siblings (const word) main::count#0 Inlining constant with var siblings (const word) main::count#0
Inlining constant with var siblings (const byte*) main::sc#0 Inlining constant with var siblings (const byte*) main::sc#0
Inlining constant with var siblings (const byte) main::y#0 Inlining constant with var siblings (const signed byte) main::y#0
Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const signed byte) main::x#0
Constant inlined utoa_append::digit#0 = (byte) 0 Constant inlined utoa_append::digit#0 = (byte) 0
Constant inlined utoa::digit_values#1 = (const word*) RADIX_DECIMAL_VALUES Constant inlined utoa::digit_values#1 = (const word*) RADIX_DECIMAL_VALUES
Constant inlined cputs::s#1 = (const byte*) printf_number_buffer::buffer_digits#0 Constant inlined cputs::s#1 = (const byte*) printf_number_buffer::buffer_digits#0
@ -2965,8 +2959,8 @@ Constant inlined gotoxy::$7 = (const nomodify byte*) CONIO_SCREEN_COLORS
Constant inlined utoa::started#1 = (byte) 1 Constant inlined utoa::started#1 = (byte) 1
Constant inlined main::sc#0 = (const nomodify byte*) SCREEN Constant inlined main::sc#0 = (const nomodify byte*) SCREEN
Constant inlined utoa::started#0 = (byte) 0 Constant inlined utoa::started#0 = (byte) 0
Constant inlined main::x#0 = (byte) 0 Constant inlined main::x#0 = (signed byte) 0
Constant inlined main::y#0 = (byte) 0 Constant inlined main::y#0 = (signed byte) 0
Constant inlined memcpy::source#0 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(byte) $28 Constant inlined memcpy::source#0 = (void*)(const nomodify byte*) CONIO_SCREEN_TEXT+(byte) $28
Constant inlined memcpy::num#1 = (word)(number) $19*(number) $28-(number) $28 Constant inlined memcpy::num#1 = (word)(number) $19*(number) $28-(number) $28
Constant inlined memcpy::num#0 = (word)(number) $19*(number) $28-(number) $28 Constant inlined memcpy::num#0 = (word)(number) $19*(number) $28-(number) $28
@ -3191,8 +3185,8 @@ main: scope:[main] from @2
main::@1: scope:[main] from main main::@5 main::@1: scope:[main] from main main::@5
[10] (byte*) main::sc#8 ← phi( main::@5/(byte*) main::sc#10 main/(const nomodify byte*) SCREEN ) [10] (byte*) main::sc#8 ← phi( main::@5/(byte*) main::sc#10 main/(const nomodify byte*) SCREEN )
[10] (word) main::count#11 ← phi( main::@5/(word) main::count#10 main/(word) 0 ) [10] (word) main::count#11 ← phi( main::@5/(word) main::count#10 main/(word) 0 )
[10] (byte) main::y#2 ← phi( main::@5/(byte) main::y#1 main/(byte) 0 ) [10] (signed byte) main::y#2 ← phi( main::@5/(signed byte) main::y#1 main/(signed byte) 0 )
[11] if((byte) main::y#2<(byte) $19) goto main::@3 [11] if((signed byte) main::y#2<(signed byte) $19) goto main::@3
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@2: scope:[main] from main::@1
[12] phi() [12] phi()
@ -3212,16 +3206,16 @@ main::@return: scope:[main] from main::@9
main::@3: scope:[main] from main::@1 main::@6 main::@3: scope:[main] from main::@1 main::@6
[19] (word) main::count#10 ← phi( main::@1/(word) main::count#11 main::@6/(word) main::count#12 ) [19] (word) main::count#10 ← phi( main::@1/(word) main::count#11 main::@6/(word) main::count#12 )
[19] (byte*) main::sc#10 ← phi( main::@1/(byte*) main::sc#8 main::@6/(byte*) main::sc#1 ) [19] (byte*) main::sc#10 ← phi( main::@1/(byte*) main::sc#8 main::@6/(byte*) main::sc#1 )
[19] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@6/(byte) main::x#1 ) [19] (signed byte) main::x#2 ← phi( main::@1/(signed byte) 0 main::@6/(signed byte) main::x#1 )
[20] if((byte) main::x#2<(byte) $28) goto main::@4 [20] if((signed byte) main::x#2<(signed byte) $28) goto main::@4
to:main::@5 to:main::@5
main::@5: scope:[main] from main::@3 main::@5: scope:[main] from main::@3
[21] (byte) main::y#1 ← ++ (byte) main::y#2 [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#2
to:main::@1 to:main::@1
main::@4: scope:[main] from main::@3 main::@4: scope:[main] from main::@3
[22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 [22] (signed byte~) main::$5 ← (signed byte) main::x#2 << (byte) 1
[23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27
[24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 [24] (signed byte~) main::$7 ← (signed byte) main::y#2 << (byte) 1
[25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18
[26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0 [26] (signed byte) mul8s::a#0 ← (signed byte) main::xd#0
[27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0 [27] (signed byte) mul8s::b#0 ← (signed byte) main::xd#0
@ -3245,7 +3239,7 @@ main::@7: scope:[main] from main::@11
main::@6: scope:[main] from main::@11 main::@7 main::@6: scope:[main] from main::@11 main::@7
[38] (word) main::count#12 ← phi( main::@11/(word) main::count#10 main::@7/(word) main::count#1 ) [38] (word) main::count#12 ← phi( main::@11/(word) main::count#10 main::@7/(word) main::count#1 )
[39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10 [39] (byte*) main::sc#1 ← ++ (byte*) main::sc#10
[40] (byte) main::x#1 ← ++ (byte) main::x#2 [40] (signed byte) main::x#1 ← ++ (signed byte) main::x#2
to:main::@3 to:main::@3
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) (signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)
@ -3610,14 +3604,14 @@ VARIABLE REGISTER WEIGHTS
(byte*) main::sc#1 1001.0 (byte*) main::sc#1 1001.0
(byte*) main::sc#10 160.25 (byte*) main::sc#10 160.25
(byte*) main::sc#8 101.0 (byte*) main::sc#8 101.0
(byte) main::x (signed byte) main::x
(byte) main::x#1 2002.0 (signed byte) main::x#1 2002.0
(byte) main::x#2 150.14999999999998 (signed byte) main::x#2 200.2
(signed byte) main::xd (signed byte) main::xd
(signed byte) main::xd#0 750.75 (signed byte) main::xd#0 750.75
(byte) main::y (signed byte) main::y
(byte) main::y#1 202.0 (signed byte) main::y#1 202.0
(byte) main::y#2 13.173913043478262 (signed byte) main::y#2 56.69565217391305
(signed byte) main::yd (signed byte) main::yd
(signed byte) main::yd#0 500.5 (signed byte) main::yd#0 500.5
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
@ -4056,16 +4050,20 @@ main: {
sta.z count sta.z count
lda #>0 lda #>0
sta.z count+1 sta.z count+1
// [10] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 // [10] phi (signed byte) main::y#2 = (signed byte) 0 [phi:main->main::@1#2] -- vbsz1=vbsc1
lda #0 lda #0
sta.z y sta.z y
jmp __b1 jmp __b1
// main::@1 // main::@1
__b1: __b1:
// [11] if((byte) main::y#2<(byte) $19) goto main::@3 -- vbuz1_lt_vbuc1_then_la1 // [11] if((signed byte) main::y#2<(signed byte) $19) goto main::@3 -- vbsz1_lt_vbsc1_then_la1
lda.z y lda.z y
cmp #$19 sec
bcc __b3_from___b1 sbc #$19
bvc !+
eor #$80
!:
bmi __b3_from___b1
// [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1: __b2_from___b1:
jmp __b2 jmp __b2
@ -4110,30 +4108,34 @@ main: {
__b3_from___b1: __b3_from___b1:
// [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy // [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy // [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy
// [19] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1 // [19] phi (signed byte) main::x#2 = (signed byte) 0 [phi:main::@1->main::@3#2] -- vbsz1=vbsc1
lda #0 lda #0
sta.z x sta.z x
jmp __b3 jmp __b3
// main::@3 // main::@3
__b3: __b3:
// [20] if((byte) main::x#2<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 // [20] if((signed byte) main::x#2<(signed byte) $28) goto main::@4 -- vbsz1_lt_vbsc1_then_la1
lda.z x lda.z x
cmp #$28 sec
bcc __b4 sbc #$28
bvc !+
eor #$80
!:
bmi __b4
jmp __b5 jmp __b5
// main::@5 // main::@5
__b5: __b5:
// [21] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1 // [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#2 -- vbsz1=_inc_vbsz1
inc.z y inc.z y
// [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
__b1_from___b5: __b1_from___b5:
// [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy // [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy
// [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy // [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy
// [10] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy // [10] phi (signed byte) main::y#2 = (signed byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy
jmp __b1 jmp __b1
// main::@4 // main::@4
__b4: __b4:
// [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 -- vbsz1=vbsz2_rol_1 // [22] (signed byte~) main::$5 ← (signed byte) main::x#2 << (byte) 1 -- vbsz1=vbsz2_rol_1
lda.z x lda.z x
asl asl
sta.z __5 sta.z __5
@ -4141,7 +4143,7 @@ main: {
lax.z __5 lax.z __5
axs #$27 axs #$27
stx.z xd stx.z xd
// [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 -- vbsz1=vbsz2_rol_1 // [24] (signed byte~) main::$7 ← (signed byte) main::y#2 << (byte) 1 -- vbsz1=vbsz2_rol_1
lda.z y lda.z y
asl asl
sta.z __7 sta.z __7
@ -4230,13 +4232,13 @@ main: {
bne !+ bne !+
inc.z sc+1 inc.z sc+1
!: !:
// [40] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 // [40] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1
inc.z x inc.z x
// [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3] // [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
__b3_from___b6: __b3_from___b6:
// [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy // [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy // [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy
// [19] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy // [19] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy
jmp __b3 jmp __b3
s: .text " chars" s: .text " chars"
.byte 0 .byte 0
@ -5173,11 +5175,13 @@ Statement [1] (byte) conio_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_b
Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [14] (word) printf_uint::uvalue#0 ← (word) main::count#11 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a Statement [11] if((signed byte) main::y#2<(signed byte) $19) goto main::@3 [ main::y#2 main::count#11 main::sc#8 printf_buffer ] ( main:6 [ main::y#2 main::count#11 main::sc#8 printf_buffer ] { } ) always clobbers reg byte a
Statement [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#2 main::y#1 ] Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::y#2 main::y#1 ]
Statement [14] (word) printf_uint::uvalue#0 ← (word) main::count#11 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a
Statement [20] if((signed byte) main::x#2<(signed byte) $28) goto main::@4 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::x#2 main::x#1 ] Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::x#2 main::x#1 ]
Statement [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a Statement [22] (signed byte~) main::$5 ← (signed byte) main::x#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
Statement [24] (signed byte~) main::$7 ← (signed byte) main::y#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:53 [ main::xd#0 ] Removing always clobbered register reg byte a as potential for zp[1]:53 [ main::xd#0 ]
Statement [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a Statement [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:55 [ main::yd#0 ] Removing always clobbered register reg byte a as potential for zp[1]:55 [ main::yd#0 ]
@ -5254,9 +5258,11 @@ Statement [1] (byte) conio_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_b
Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [2] (byte) conio_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [3] (byte*) conio_cursor_text ← (const nomodify byte*) CONIO_SCREEN_TEXT [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a Statement [4] (byte*) conio_cursor_color ← (const nomodify byte*) CONIO_SCREEN_COLORS [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a
Statement [11] if((signed byte) main::y#2<(signed byte) $19) goto main::@3 [ main::y#2 main::count#11 main::sc#8 printf_buffer ] ( main:6 [ main::y#2 main::count#11 main::sc#8 printf_buffer ] { } ) always clobbers reg byte a
Statement [14] (word) printf_uint::uvalue#0 ← (word) main::count#11 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a Statement [14] (word) printf_uint::uvalue#0 ← (word) main::count#11 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] ( main:6 [ conio_cursor_x conio_cursor_y conio_cursor_text conio_cursor_color printf_uint::uvalue#0 printf_buffer ] { { printf_uint::uvalue#0 = main::count#11 } } ) always clobbers reg byte a
Statement [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a Statement [20] if((signed byte) main::x#2<(signed byte) $28) goto main::@4 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 printf_buffer ] { } ) always clobbers reg byte a
Statement [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a Statement [22] (signed byte~) main::$5 ← (signed byte) main::x#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$5 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
Statement [24] (signed byte~) main::$7 ← (signed byte) main::y#2 << (byte) 1 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::xd#0 main::$7 printf_buffer ] { { mul8s::b#0 = mul8s::b#2 mul8s::a#2 mul8s::a#0 main::xd#0 } } ) always clobbers reg byte a
Statement [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a Statement [29] (signed word~) main::$9 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::yd#0 main::$9 printf_buffer ] { { mul8s::b#1 = mul8s::b#2 mul8s::a#2 mul8s::a#1 main::yd#0 } } ) always clobbers reg byte a
Statement [33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] { } ) always clobbers reg byte a Statement [33] (signed word~) main::$10 ← (signed word)(word) mul8s::m#4 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::$9 main::$10 printf_buffer ] { } ) always clobbers reg byte a
Statement [34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] { } ) always clobbers reg byte a Statement [34] (signed word) main::dist_sq#0 ← (signed word~) main::$9 + (signed word~) main::$10 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] ( main:6 [ main::y#2 main::count#10 main::sc#10 main::x#2 main::dist_sq#0 printf_buffer ] { } ) always clobbers reg byte a
@ -5391,7 +5397,7 @@ Uplift Scope [cputc] 1,252,506: zp[1]:19 [ cputc::c#3 cputc::c#0 cputc::c#2 ]
Uplift Scope [cputs] 215,003.5: zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] 100,001: zp[1]:70 [ cputs::c#1 ] Uplift Scope [cputs] 215,003.5: zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] 100,001: zp[1]:70 [ cputs::c#1 ]
Uplift Scope [mul8s] 67,506.75: zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] 20,002: zp[1]:65 [ mul8s::$6 ] 20,002: zp[1]:66 [ mul8s::$11 ] 20,002: zp[1]:67 [ mul8s::$9 ] 20,002: zp[1]:68 [ mul8s::$12 ] 5,095.18: zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] 2,925.31: zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ] Uplift Scope [mul8s] 67,506.75: zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] 20,002: zp[1]:65 [ mul8s::$6 ] 20,002: zp[1]:66 [ mul8s::$11 ] 20,002: zp[1]:67 [ mul8s::$9 ] 20,002: zp[1]:68 [ mul8s::$12 ] 5,095.18: zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] 2,925.31: zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
Uplift Scope [utoa] 38,003.93: zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 31,411.36: zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 22,859.43: zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] 20,002: zp[1]:89 [ utoa::$10 ] 15,001.5: zp[1]:38 [ utoa::started#2 utoa::started#4 ] 6,000.6: zp[2]:90 [ utoa::digit_value#0 ] 2,002: zp[1]:86 [ utoa::$11 ] 2,002: zp[2]:87 [ utoa::buffer#3 ] Uplift Scope [utoa] 38,003.93: zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 31,411.36: zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] 22,859.43: zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] 20,002: zp[1]:89 [ utoa::$10 ] 15,001.5: zp[1]:38 [ utoa::started#2 utoa::started#4 ] 6,000.6: zp[2]:90 [ utoa::digit_value#0 ] 2,002: zp[1]:86 [ utoa::$11 ] 2,002: zp[2]:87 [ utoa::buffer#3 ]
Uplift Scope [main] 3,234.31: zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] 2,152.15: zp[1]:7 [ main::x#2 main::x#1 ] 2,002: zp[1]:52 [ main::$5 ] 2,002: zp[1]:54 [ main::$7 ] 2,002: zp[2]:58 [ main::$10 ] 2,002: zp[2]:60 [ main::dist_sq#0 ] 1,262.25: zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ] 750.75: zp[1]:53 [ main::xd#0 ] 500.5: zp[1]:55 [ main::yd#0 ] 400.4: zp[2]:56 [ main::$9 ] 215.17: zp[1]:2 [ main::y#2 main::y#1 ] Uplift Scope [main] 3,234.31: zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] 2,202.2: zp[1]:7 [ main::x#2 main::x#1 ] 2,002: zp[1]:52 [ main::$5 ] 2,002: zp[1]:54 [ main::$7 ] 2,002: zp[2]:58 [ main::$10 ] 2,002: zp[2]:60 [ main::dist_sq#0 ] 1,262.25: zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ] 750.75: zp[1]:53 [ main::xd#0 ] 500.5: zp[1]:55 [ main::yd#0 ] 400.4: zp[2]:56 [ main::$9 ] 258.7: zp[1]:2 [ main::y#2 main::y#1 ]
Uplift Scope [printf_number_buffer] 701: zp[1]:85 [ printf_number_buffer::buffer_sign#0 ] Uplift Scope [printf_number_buffer] 701: zp[1]:85 [ printf_number_buffer::buffer_sign#0 ]
Uplift Scope [printf_uint] 37.33: zp[2]:50 [ printf_uint::uvalue#0 ] Uplift Scope [printf_uint] 37.33: zp[2]:50 [ printf_uint::uvalue#0 ]
Uplift Scope [gotoxy] Uplift Scope [gotoxy]
@ -5400,43 +5406,43 @@ Uplift Scope [printf_format_number]
Uplift Scope [printf_buffer_number] Uplift Scope [printf_buffer_number]
Uplift Scope [printf_format_string] Uplift Scope [printf_format_string]
Uplifting [memcpy] best 118348 combination zp[2]:31 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:33 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:83 [ memcpy::src_end#0 ] zp[2]:27 [ memcpy::source#2 ] zp[2]:29 [ memcpy::destination#2 ] Uplifting [memcpy] best 119063 combination zp[2]:31 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:33 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:83 [ memcpy::src_end#0 ] zp[2]:27 [ memcpy::source#2 ] zp[2]:29 [ memcpy::destination#2 ]
Uplifting [memset] best 118329 combination zp[2]:25 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:81 [ memset::end#0 ] reg byte x [ memset::c#5 ] zp[2]:20 [ memset::num#3 ] zp[2]:22 [ memset::str#4 ] Uplifting [memset] best 119044 combination zp[2]:25 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:81 [ memset::end#0 ] reg byte x [ memset::c#5 ] zp[2]:20 [ memset::num#3 ] zp[2]:22 [ memset::str#4 ]
Uplifting [mul8u] best 109320 combination zp[2]:13 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:15 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:63 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] Uplifting [mul8u] best 110035 combination zp[2]:13 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:15 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:63 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ]
Uplifting [cscroll] best 109320 combination zp[2]:77 [ cscroll::$7 ] zp[2]:79 [ cscroll::$8 ] Uplifting [cscroll] best 110035 combination zp[2]:77 [ cscroll::$7 ] zp[2]:79 [ cscroll::$8 ]
Uplifting [cputln] best 109320 combination zp[2]:73 [ cputln::$1 ] zp[2]:75 [ cputln::$2 ] zp[2]:71 [ cputln::ln_offset#0 ] Uplifting [cputln] best 110035 combination zp[2]:73 [ cputln::$1 ] zp[2]:75 [ cputln::$2 ] zp[2]:71 [ cputln::ln_offset#0 ]
Uplifting [utoa_append] best 108717 combination zp[2]:41 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:94 [ utoa_append::sub#0 ] zp[2]:96 [ utoa_append::return#0 ] zp[2]:92 [ utoa_append::buffer#0 ] Uplifting [utoa_append] best 109432 combination zp[2]:41 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:94 [ utoa_append::sub#0 ] zp[2]:96 [ utoa_append::return#0 ] zp[2]:92 [ utoa_append::buffer#0 ]
Uplifting [] best 108717 combination zp[1]:45 [ conio_cursor_y ] zp[2]:48 [ conio_cursor_color ] zp[2]:46 [ conio_cursor_text ] zp[1]:44 [ conio_cursor_x ] mem[12] [ printf_buffer ] Uplifting [] best 109432 combination zp[1]:45 [ conio_cursor_y ] zp[2]:48 [ conio_cursor_color ] zp[2]:46 [ conio_cursor_text ] zp[1]:44 [ conio_cursor_x ] mem[12] [ printf_buffer ]
Uplifting [cputc] best 108678 combination reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ] Uplifting [cputc] best 109393 combination reg byte a [ cputc::c#3 cputc::c#0 cputc::c#2 ]
Uplifting [cputs] best 108588 combination zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] reg byte a [ cputs::c#1 ] Uplifting [cputs] best 109303 combination zp[2]:17 [ cputs::s#3 cputs::s#4 cputs::s#0 ] reg byte a [ cputs::c#1 ]
Uplifting [mul8s] best 108564 combination zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] reg byte a [ mul8s::$6 ] reg byte a [ mul8s::$11 ] reg byte a [ mul8s::$9 ] reg byte a [ mul8s::$12 ] zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ] Uplifting [mul8s] best 109279 combination zp[2]:10 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] reg byte a [ mul8s::$6 ] reg byte a [ mul8s::$11 ] reg byte a [ mul8s::$9 ] reg byte a [ mul8s::$12 ] zp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
Limited combination testing to 100 combinations of 2304 possible. Limited combination testing to 100 combinations of 2304 possible.
Uplifting [utoa] best 108430 combination zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:90 [ utoa::digit_value#0 ] reg byte a [ utoa::$11 ] zp[2]:87 [ utoa::buffer#3 ] Uplifting [utoa] best 109145 combination zp[2]:39 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:36 [ utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 ] zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:90 [ utoa::digit_value#0 ] reg byte a [ utoa::$11 ] zp[2]:87 [ utoa::buffer#3 ]
Uplifting [main] best 106730 combination zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] zp[1]:7 [ main::x#2 main::x#1 ] reg byte a [ main::$5 ] reg byte a [ main::$7 ] zp[2]:58 [ main::$10 ] zp[2]:60 [ main::dist_sq#0 ] zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ] reg byte x [ main::xd#0 ] zp[1]:55 [ main::yd#0 ] zp[2]:56 [ main::$9 ] zp[1]:2 [ main::y#2 main::y#1 ] Uplifting [main] best 107445 combination zp[2]:3 [ main::count#11 main::count#10 main::count#12 main::count#1 ] zp[1]:7 [ main::x#2 main::x#1 ] reg byte a [ main::$5 ] reg byte a [ main::$7 ] zp[2]:58 [ main::$10 ] zp[2]:60 [ main::dist_sq#0 ] zp[2]:5 [ main::sc#8 main::sc#10 main::sc#1 ] reg byte x [ main::xd#0 ] zp[1]:55 [ main::yd#0 ] zp[2]:56 [ main::$9 ] zp[1]:2 [ main::y#2 main::y#1 ]
Limited combination testing to 100 combinations of 576 possible. Limited combination testing to 100 combinations of 576 possible.
Uplifting [printf_number_buffer] best 106721 combination reg byte a [ printf_number_buffer::buffer_sign#0 ] Uplifting [printf_number_buffer] best 107436 combination reg byte a [ printf_number_buffer::buffer_sign#0 ]
Uplifting [printf_uint] best 106721 combination zp[2]:50 [ printf_uint::uvalue#0 ] Uplifting [printf_uint] best 107436 combination zp[2]:50 [ printf_uint::uvalue#0 ]
Uplifting [gotoxy] best 106721 combination Uplifting [gotoxy] best 107436 combination
Uplifting [RADIX] best 106721 combination Uplifting [RADIX] best 107436 combination
Uplifting [printf_format_number] best 106721 combination Uplifting [printf_format_number] best 107436 combination
Uplifting [printf_buffer_number] best 106721 combination Uplifting [printf_buffer_number] best 107436 combination
Uplifting [printf_format_string] best 106721 combination Uplifting [printf_format_string] best 107436 combination
Attempting to uplift remaining variables inzp[1]:45 [ conio_cursor_y ] Attempting to uplift remaining variables inzp[1]:45 [ conio_cursor_y ]
Uplifting [] best 106721 combination zp[1]:45 [ conio_cursor_y ] Uplifting [] best 107436 combination zp[1]:45 [ conio_cursor_y ]
Attempting to uplift remaining variables inzp[1]:44 [ conio_cursor_x ] Attempting to uplift remaining variables inzp[1]:44 [ conio_cursor_x ]
Uplifting [] best 106721 combination zp[1]:44 [ conio_cursor_x ] Uplifting [] best 107436 combination zp[1]:44 [ conio_cursor_x ]
Attempting to uplift remaining variables inzp[1]:35 [ utoa::digit#2 utoa::digit#1 ] Attempting to uplift remaining variables inzp[1]:35 [ utoa::digit#2 utoa::digit#1 ]
Uplifting [utoa] best 106721 combination zp[1]:35 [ utoa::digit#2 utoa::digit#1 ] Uplifting [utoa] best 107436 combination zp[1]:35 [ utoa::digit#2 utoa::digit#1 ]
Attempting to uplift remaining variables inzp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] Attempting to uplift remaining variables inzp[1]:9 [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
Uplifting [mul8s] best 106520 combination reg byte y [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ] Uplifting [mul8s] best 107235 combination reg byte y [ mul8s::b#2 mul8s::b#1 mul8s::b#0 ]
Attempting to uplift remaining variables inzp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ] Attempting to uplift remaining variables inzp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
Uplifting [mul8s] best 106520 combination zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ] Uplifting [mul8s] best 107235 combination zp[1]:8 [ mul8s::a#2 mul8s::a#1 mul8s::a#0 ]
Attempting to uplift remaining variables inzp[1]:7 [ main::x#2 main::x#1 ] Attempting to uplift remaining variables inzp[1]:7 [ main::x#2 main::x#1 ]
Uplifting [main] best 106520 combination zp[1]:7 [ main::x#2 main::x#1 ] Uplifting [main] best 107235 combination zp[1]:7 [ main::x#2 main::x#1 ]
Attempting to uplift remaining variables inzp[1]:55 [ main::yd#0 ] Attempting to uplift remaining variables inzp[1]:55 [ main::yd#0 ]
Uplifting [main] best 106520 combination zp[1]:55 [ main::yd#0 ] Uplifting [main] best 107235 combination zp[1]:55 [ main::yd#0 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::y#2 main::y#1 ] Attempting to uplift remaining variables inzp[1]:2 [ main::y#2 main::y#1 ]
Uplifting [main] best 106520 combination zp[1]:2 [ main::y#2 main::y#1 ] Uplifting [main] best 107235 combination zp[1]:2 [ main::y#2 main::y#1 ]
Coalescing zero page register [ zp[2]:46 [ conio_cursor_text ] ] with [ zp[2]:73 [ cputln::$1 ] ] - score: 2 Coalescing zero page register [ zp[2]:46 [ conio_cursor_text ] ] with [ zp[2]:73 [ cputln::$1 ] ] - score: 2
Coalescing zero page register [ zp[2]:46 [ conio_cursor_text cputln::$1 ] ] with [ zp[2]:77 [ cscroll::$7 ] ] - score: 2 Coalescing zero page register [ zp[2]:46 [ conio_cursor_text cputln::$1 ] ] with [ zp[2]:77 [ cscroll::$7 ] ] - score: 2
Coalescing zero page register [ zp[2]:48 [ conio_cursor_color ] ] with [ zp[2]:75 [ cputln::$2 ] ] - score: 2 Coalescing zero page register [ zp[2]:48 [ conio_cursor_color ] ] with [ zp[2]:75 [ cputln::$2 ] ] - score: 2
@ -5581,16 +5587,20 @@ main: {
sta.z count sta.z count
lda #>0 lda #>0
sta.z count+1 sta.z count+1
// [10] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 // [10] phi (signed byte) main::y#2 = (signed byte) 0 [phi:main->main::@1#2] -- vbsz1=vbsc1
lda #0 lda #0
sta.z y sta.z y
jmp __b1 jmp __b1
// main::@1 // main::@1
__b1: __b1:
// [11] if((byte) main::y#2<(byte) $19) goto main::@3 -- vbuz1_lt_vbuc1_then_la1 // [11] if((signed byte) main::y#2<(signed byte) $19) goto main::@3 -- vbsz1_lt_vbsc1_then_la1
lda.z y lda.z y
cmp #$19 sec
bcc __b3_from___b1 sbc #$19
bvc !+
eor #$80
!:
bmi __b3_from___b1
// [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1: __b2_from___b1:
jmp __b2 jmp __b2
@ -5631,36 +5641,40 @@ main: {
__b3_from___b1: __b3_from___b1:
// [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy // [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy // [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy
// [19] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1 // [19] phi (signed byte) main::x#2 = (signed byte) 0 [phi:main::@1->main::@3#2] -- vbsz1=vbsc1
lda #0 lda #0
sta.z x sta.z x
jmp __b3 jmp __b3
// main::@3 // main::@3
__b3: __b3:
// [20] if((byte) main::x#2<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 // [20] if((signed byte) main::x#2<(signed byte) $28) goto main::@4 -- vbsz1_lt_vbsc1_then_la1
lda.z x lda.z x
cmp #$28 sec
bcc __b4 sbc #$28
bvc !+
eor #$80
!:
bmi __b4
jmp __b5 jmp __b5
// main::@5 // main::@5
__b5: __b5:
// [21] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1 // [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#2 -- vbsz1=_inc_vbsz1
inc.z y inc.z y
// [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
__b1_from___b5: __b1_from___b5:
// [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy // [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy
// [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy // [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy
// [10] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy // [10] phi (signed byte) main::y#2 = (signed byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy
jmp __b1 jmp __b1
// main::@4 // main::@4
__b4: __b4:
// [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 -- vbsaa=vbsz1_rol_1 // [22] (signed byte~) main::$5 ← (signed byte) main::x#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
lda.z x lda.z x
asl asl
// [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 -- vbsxx=vbsaa_minus_vbsc1 // [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 -- vbsxx=vbsaa_minus_vbsc1
tax tax
axs #$27 axs #$27
// [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 -- vbsaa=vbsz1_rol_1 // [24] (signed byte~) main::$7 ← (signed byte) main::y#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
lda.z y lda.z y
asl asl
// [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 -- vbsz1=vbsaa_minus_vbsc1 // [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 -- vbsz1=vbsaa_minus_vbsc1
@ -5742,13 +5756,13 @@ main: {
bne !+ bne !+
inc.z sc+1 inc.z sc+1
!: !:
// [40] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 // [40] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1
inc.z x inc.z x
// [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3] // [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
__b3_from___b6: __b3_from___b6:
// [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy // [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy // [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy
// [19] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy // [19] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy
jmp __b3 jmp __b3
s: .text " chars" s: .text " chars"
.byte 0 .byte 0
@ -6847,14 +6861,14 @@ FINAL SYMBOL TABLE
(byte*) main::sc#1 sc zp[2]:4 1001.0 (byte*) main::sc#1 sc zp[2]:4 1001.0
(byte*) main::sc#10 sc zp[2]:4 160.25 (byte*) main::sc#10 sc zp[2]:4 160.25
(byte*) main::sc#8 sc zp[2]:4 101.0 (byte*) main::sc#8 sc zp[2]:4 101.0
(byte) main::x (signed byte) main::x
(byte) main::x#1 x zp[1]:12 2002.0 (signed byte) main::x#1 x zp[1]:12 2002.0
(byte) main::x#2 x zp[1]:12 150.14999999999998 (signed byte) main::x#2 x zp[1]:12 200.2
(signed byte) main::xd (signed byte) main::xd
(signed byte) main::xd#0 reg byte x 750.75 (signed byte) main::xd#0 reg byte x 750.75
(byte) main::y (signed byte) main::y
(byte) main::y#1 y zp[1]:11 202.0 (signed byte) main::y#1 y zp[1]:11 202.0
(byte) main::y#2 y zp[1]:11 13.173913043478262 (signed byte) main::y#2 y zp[1]:11 56.69565217391305
(signed byte) main::yd (signed byte) main::yd
(signed byte) main::yd#0 yd zp[1]:17 500.5 (signed byte) main::yd#0 yd zp[1]:17 500.5
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
@ -7075,7 +7089,7 @@ mem[12] [ printf_buffer ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 85370 Score: 86085
// File Comments // File Comments
// Plot a r=9 circle on the screen using chars - count how many chars are used // Plot a r=9 circle on the screen using chars - count how many chars are used
@ -7170,15 +7184,19 @@ main: {
lda #<0 lda #<0
sta.z count sta.z count
sta.z count+1 sta.z count+1
// [10] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 // [10] phi (signed byte) main::y#2 = (signed byte) 0 [phi:main->main::@1#2] -- vbsz1=vbsc1
sta.z y sta.z y
// main::@1 // main::@1
__b1: __b1:
// for(char y=0;y<25;y++) // for(signed char y=0;y<25;y++)
// [11] if((byte) main::y#2<(byte) $19) goto main::@3 -- vbuz1_lt_vbuc1_then_la1 // [11] if((signed byte) main::y#2<(signed byte) $19) goto main::@3 -- vbsz1_lt_vbsc1_then_la1
lda.z y lda.z y
cmp #$19 sec
bcc __b2 sbc #$19
bvc !+
eor #$80
!:
bmi __b2
// [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
// main::@2 // main::@2
// gotoxy(0,0) // gotoxy(0,0)
@ -7210,40 +7228,44 @@ main: {
__b2: __b2:
// [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy // [19] phi (word) main::count#10 = (word) main::count#11 [phi:main::@1->main::@3#0] -- register_copy
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy // [19] phi (byte*) main::sc#10 = (byte*) main::sc#8 [phi:main::@1->main::@3#1] -- register_copy
// [19] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1 // [19] phi (signed byte) main::x#2 = (signed byte) 0 [phi:main::@1->main::@3#2] -- vbsz1=vbsc1
lda #0 lda #0
sta.z x sta.z x
// main::@3 // main::@3
__b3: __b3:
// for(char x=0;x<40;x++) // for(signed char x=0;x<40;x++)
// [20] if((byte) main::x#2<(byte) $28) goto main::@4 -- vbuz1_lt_vbuc1_then_la1 // [20] if((signed byte) main::x#2<(signed byte) $28) goto main::@4 -- vbsz1_lt_vbsc1_then_la1
lda.z x lda.z x
cmp #$28 sec
bcc __b4 sbc #$28
bvc !+
eor #$80
!:
bmi __b4
// main::@5 // main::@5
// for(char y=0;y<25;y++) // for(signed char y=0;y<25;y++)
// [21] (byte) main::y#1 ← ++ (byte) main::y#2 -- vbuz1=_inc_vbuz1 // [21] (signed byte) main::y#1 ← ++ (signed byte) main::y#2 -- vbsz1=_inc_vbsz1
inc.z y inc.z y
// [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
// [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy // [10] phi (byte*) main::sc#8 = (byte*) main::sc#10 [phi:main::@5->main::@1#0] -- register_copy
// [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy // [10] phi (word) main::count#11 = (word) main::count#10 [phi:main::@5->main::@1#1] -- register_copy
// [10] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy // [10] phi (signed byte) main::y#2 = (signed byte) main::y#1 [phi:main::@5->main::@1#2] -- register_copy
jmp __b1 jmp __b1
// main::@4 // main::@4
__b4: __b4:
// (signed char)x*2 // x*2
// [22] (signed byte~) main::$5 ← (signed byte)(byte) main::x#2 << (byte) 1 -- vbsaa=vbsz1_rol_1 // [22] (signed byte~) main::$5 ← (signed byte) main::x#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
lda.z x lda.z x
asl asl
// xd = (signed char)x*2-39 // xd = x*2-39
// [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 -- vbsxx=vbsaa_minus_vbsc1 // [23] (signed byte) main::xd#0 ← (signed byte~) main::$5 - (signed byte) $27 -- vbsxx=vbsaa_minus_vbsc1
tax tax
axs #$27 axs #$27
// (signed char)y*2 // y*2
// [24] (signed byte~) main::$7 ← (signed byte)(byte) main::y#2 << (byte) 1 -- vbsaa=vbsz1_rol_1 // [24] (signed byte~) main::$7 ← (signed byte) main::y#2 << (byte) 1 -- vbsaa=vbsz1_rol_1
lda.z y lda.z y
asl asl
// yd = (signed char)y*2-24 // yd = y*2-24
// [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 -- vbsz1=vbsaa_minus_vbsc1 // [25] (signed byte) main::yd#0 ← (signed byte~) main::$7 - (signed byte) $18 -- vbsz1=vbsaa_minus_vbsc1
sec sec
sbc #$18 sbc #$18
@ -7321,13 +7343,13 @@ main: {
bne !+ bne !+
inc.z sc+1 inc.z sc+1
!: !:
// for(char x=0;x<40;x++) // for(signed char x=0;x<40;x++)
// [40] (byte) main::x#1 ← ++ (byte) main::x#2 -- vbuz1=_inc_vbuz1 // [40] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 -- vbsz1=_inc_vbsz1
inc.z x inc.z x
// [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3] // [19] phi from main::@6 to main::@3 [phi:main::@6->main::@3]
// [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy // [19] phi (word) main::count#10 = (word) main::count#12 [phi:main::@6->main::@3#0] -- register_copy
// [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy // [19] phi (byte*) main::sc#10 = (byte*) main::sc#1 [phi:main::@6->main::@3#1] -- register_copy
// [19] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy // [19] phi (signed byte) main::x#2 = (signed byte) main::x#1 [phi:main::@6->main::@3#2] -- register_copy
jmp __b3 jmp __b3
s: .text " chars" s: .text " chars"
.byte 0 .byte 0

View File

@ -89,14 +89,14 @@
(byte*) main::sc#1 sc zp[2]:4 1001.0 (byte*) main::sc#1 sc zp[2]:4 1001.0
(byte*) main::sc#10 sc zp[2]:4 160.25 (byte*) main::sc#10 sc zp[2]:4 160.25
(byte*) main::sc#8 sc zp[2]:4 101.0 (byte*) main::sc#8 sc zp[2]:4 101.0
(byte) main::x (signed byte) main::x
(byte) main::x#1 x zp[1]:12 2002.0 (signed byte) main::x#1 x zp[1]:12 2002.0
(byte) main::x#2 x zp[1]:12 150.14999999999998 (signed byte) main::x#2 x zp[1]:12 200.2
(signed byte) main::xd (signed byte) main::xd
(signed byte) main::xd#0 reg byte x 750.75 (signed byte) main::xd#0 reg byte x 750.75
(byte) main::y (signed byte) main::y
(byte) main::y#1 y zp[1]:11 202.0 (signed byte) main::y#1 y zp[1]:11 202.0
(byte) main::y#2 y zp[1]:11 13.173913043478262 (signed byte) main::y#2 y zp[1]:11 56.69565217391305
(signed byte) main::yd (signed byte) main::yd
(signed byte) main::yd#0 yd zp[1]:17 500.5 (signed byte) main::yd#0 yd zp[1]:17 500.5
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)