1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-09 21:37:31 +00:00

Implemented signed word multiplication & test.

This commit is contained in:
jespergravgaard 2018-02-16 01:13:57 +01:00
parent 34d3c732da
commit 8f21ffc0e4
64 changed files with 14092 additions and 8253 deletions

View File

@ -214,6 +214,12 @@ class AsmFragmentTemplateSynthesisRule {
mapSToU.put("vwsc1", "vwuc1");
mapSToU.put("vwsc2", "vwuc2");
mapSToU.put("vwsc3", "vwuc3");
mapSToU.put("vdsz1", "vduz1");
mapSToU.put("vdsz2", "vduz2");
mapSToU.put("vdsz3", "vduz3");
mapSToU.put("vdsc1", "vduc1");
mapSToU.put("vdsc2", "vduc2");
mapSToU.put("vdsc3", "vduc3");
mapSToU.put("pbsz1", "pbuz1");
mapSToU.put("pbsz2", "pbuz2");
mapSToU.put("pbsz3", "pbuz3");
@ -491,12 +497,31 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(vbuz.|vbuaa|vbuxx|vbuyy)=_(lo|hi)_vws(z.|c.)", null, null, "$1=_$2_vwu$3", null, mapSToU));
synths.add(new AsmFragmentTemplateSynthesisRule("(vbs..)=(vbs..)_(plus)_(vbs..)", null, null, "$1=$2_$3_$4", null, mapSToU));
synths.add(new AsmFragmentTemplateSynthesisRule("(vws..)=(vws..)_(plus)_(vws..)", null, null, "$1=$2_$3_$4", null, mapSToU));
synths.add(new AsmFragmentTemplateSynthesisRule("(vds..)=(vds..)_(plus)_(vds..)", null, null, "$1=$2_$3_$4", null, mapSToU));
// Use constant word ASM to synthesize unsigned constant byte ASM ( ...vb.c... -> vw.c... )
synths.add(new AsmFragmentTemplateSynthesisRule("(vwuz.)=(vwuz.)_(plus|minus|band|bxor|bor)_vb.c(.)", null, null, "$1=$2_$3_vwuc$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vwuz.)=vb.c(.)_(plus|minus|band|bxor|bor)_(vwuz.)", null, null, "$1=vwuc$2_$3_$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vwsz.)=(vwsz.)_(plus|minus|band|bxor|bor)_vb.c(.)", null, null, "$1=$2_$3_vwsc$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vwsz.)=vb.c(.)_(plus|minus|band|bxor|bor)_(vwsz.)", null, null, "$1=vwsc$2_$3_$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vwuz.)=vb.c(.)", null, null, "$1=vwuc$2", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vwsz.)=vb.c(.)", null, null, "$1=vwsc$2", null, null));
// Use constant dword ASM to synthesize unsigned constant word ASM ( ...vw.c... -> vd.c... )
synths.add(new AsmFragmentTemplateSynthesisRule("(vduz.)=(vduz.)_(plus|minus|band|bxor|bor)_vw.c(.)", null, null, "$1=$2_$3_vduc$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vduz.)=vw.c(.)_(plus|minus|band|bxor|bor)_(vduz.)", null, null, "$1=vduc$2_$3_$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vdsz.)=(vdsz.)_(plus|minus|band|bxor|bor)_vw.c(.)", null, null, "$1=$2_$3_vdsc$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vdsz.)=vw.c(.)_(plus|minus|band|bxor|bor)_(vdsz.)", null, null, "$1=vdsc$2_$3_$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vduz.)=vw.c(.)", null, null, "$1=vduc$2", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vdsz.)=vw.c(.)", null, null, "$1=vdsc$2", null, null));
// Use constant dword ASM to synthesize unsigned constant byte ASM ( ...vb.c... -> vd.c... )
synths.add(new AsmFragmentTemplateSynthesisRule("(vduz.)=(vduz.)_(plus|minus|band|bxor|bor)_vb.c(.)", null, null, "$1=$2_$3_vduc$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vduz.)=vb.c(.)_(plus|minus|band|bxor|bor)_(vduz.)", null, null, "$1=vduc$2_$3_$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vdsz.)=(vdsz.)_(plus|minus|band|bxor|bor)_vb.c(.)", null, null, "$1=$2_$3_vdsc$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vdsz.)=vb.c(.)_(plus|minus|band|bxor|bor)_(vdsz.)", null, null, "$1=vdsc$2_$3_$4", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vduz.)=vb.c(.)", null, null, "$1=vduc$2", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("(vdsz.)=vb.c(.)", null, null, "$1=vdsc$2", null, null));
// Use Z1/Z2 ASM to synthesize Z1-only code ( ...z1...z1... -> ...z1...z2... )
synths.add(new AsmFragmentTemplateSynthesisRule("(v..)z1=(v..)z1_(plus|minus|band|bxor|bor)_(.*)", oneZ2, null, "$1z1=$2z2_$3_$4", null, mapZ, false));

View File

@ -0,0 +1,17 @@
sec
lda {z2}
eor #$ff
adc #$0
sta {z1}
lda {z2}+1
eor #$ff
adc #$0
sta {z1}+1
lda {z2}+2
eor #$ff
adc #$0
sta {z1}+2
lda {z2}+3
eor #$ff
adc #$0
sta {z1}+3

View File

@ -0,0 +1,8 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
lda {z2}+2
sta {z1}+2
lda {z2}+3
sta {z1}+3

View File

@ -0,0 +1,19 @@
lda {z2}+1
ora #$7f
bmi !+
lda #0
!:
sta $ff
sec
lda {z1}
sbc {z2}
sta {z1}
lda {z1}+1
sbc {z2}+1
sta {z1}+1
lda {z1}+2
sbc $ff
sta {z1}+2
lda {z1}+3
sbc $ff
sta {z1}+3

View File

@ -0,0 +1,20 @@
lda {z2}+1
ora #$7f
bmi !+
lda #0
!:
sta $ff
lda {z1}
clc
adc {z2}
sta {z1}
lda {z1}+1
adc {z2}+1
sta {z1}+1
lda {z1}+2
adc $ff
sta {z1}+2
lda {z1}+3
adc $ff
sta {z1}+3

View File

@ -0,0 +1,2 @@
lda {z1}+3
bpl {la1}

View File

@ -0,0 +1,8 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
lda {z2}+2
sta {z1}+2
lda {z2}+3
sta {z1}+3

View File

@ -0,0 +1,13 @@
lda {z1}
sec
sbc {z2}
sta {z1}
lda {z1}+1
sbc {z2}+1
sta {z1}+1
lda {z1}+2
sbc {z2}+2
sta {z1}+2
lda {z1}+3
sbc {z2}+3
sta {z1}+3

View File

@ -0,0 +1,4 @@
lda {z2}
sta {z1}+2
lda {z2}+1
sta {z1}+3

View File

@ -1,7 +1,7 @@
clc
lda {z1}
adc {z2}
adc #<{c1}
sta {z1}
lda {z1}+1
adc {z2}+1
adc #>{c1}
sta {z1}+1

View File

@ -0,0 +1,6 @@
lda {z1}+1
bmi {la1}
bne !+
lda {z1}
beq {la1}
!:

View File

@ -0,0 +1,5 @@
lda {z1}
bne !+
dec {z1}+1
!:
dec {z1}

View File

@ -0,0 +1,7 @@
clc
lda {z1}
adc #<{c1}
sta {z1}
lda {z1}+1
adc #>{c1}
sta {z1}+1

View File

@ -49,6 +49,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits

View File

@ -14,6 +14,7 @@ void main() {
mul8u_compare();
mul8s_compare();
mul16u_compare();
mul16s_compare();
}
// Slow multiplication of unsigned bytes
@ -29,7 +30,7 @@ word muls8u(byte a, byte b) {
}
// Slow multiplication of signed bytes
// Perform a signed multiplication by repeated addition/
// Perform a signed multiplication by repeated addition/subtraction
signed word muls8s(signed byte a, signed byte b) {
signed word m = 0;
if(a<0) {
@ -56,6 +57,24 @@ dword muls16u(word a, word b) {
return m;
}
// Slow multiplication of signed words
// Perform a signed multiplication by repeated addition/subtraction
signed dword muls16s(signed word a, signed word b) {
signed dword m = 0;
if(a<0) {
for(signed word i = 0; i!=a; i--) {
m = m - b;
}
} else if (a>0) {
for(signed word j = 0; j!=a; j++) {
m = m + b;
}
}
return m;
}
// ASM based multiplication tables
// <(( x * x )/4)
byte[512] align($100) mula_sqr1_lo;
@ -249,3 +268,40 @@ void mul16u_error(word a, word b, dword ms, dword mn) {
print_dword(mn);
print_ln();
}
// Perform many possible word multiplications (slow and fast) and compare the results
void mul16s_compare() {
signed word a = -$7fff;
signed word b = -$7fff;
for(byte i: 0..15) {
for(byte j: 0..15) {
a=a+3371;
b=b+4093;
signed dword ms = muls16s(a, b);
signed dword mn = mul16s(a,b);
byte ok = 1;
if(ms!=mn) {
ok = 0;
}
if(ok==0) {
*BGCOL = 2;
mul16s_error(a,b, ms, mn);
return;
}
}
}
print_str("signed word multiply results match!@");
print_ln();
}
void mul16s_error(signed word a, signed word b, signed dword ms, signed dword mn) {
print_str("signed word multiply mismatch @");
print_sword(a);
print_str("*@");
print_sword(b);
print_str(" slow:@");
print_sdword(ms);
print_str(" / normal:@");
print_sdword(mn);
print_ln();
}

View File

@ -342,8 +342,8 @@ init_plot_tables: {
and #7
cmp #7
bne b4
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1

View File

@ -5160,8 +5160,8 @@ init_plot_tables: {
//SEG323 init_plot_tables::@7
b7:
//SEG324 [174] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1
@ -6420,8 +6420,8 @@ init_plot_tables: {
//SEG323 init_plot_tables::@7
b7:
//SEG324 [174] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1
@ -7732,8 +7732,8 @@ init_plot_tables: {
bne b4
//SEG323 init_plot_tables::@7
//SEG324 [174] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1

View File

@ -120,8 +120,8 @@ init_plot_tables: {
and #7
cmp #7
bne b4
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1

View File

@ -2055,8 +2055,8 @@ init_plot_tables: {
//SEG92 init_plot_tables::@7
b7:
//SEG93 [57] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1
@ -2542,8 +2542,8 @@ init_plot_tables: {
//SEG92 init_plot_tables::@7
b7:
//SEG93 [57] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1
@ -3094,8 +3094,8 @@ init_plot_tables: {
bne b4
//SEG92 init_plot_tables::@7
//SEG93 [57] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ( main:2::init_plot_tables:10 [ init_plot_tables::y#2 init_plot_tables::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1
lda yoffs
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1

View File

@ -15,9 +15,9 @@ main: {
sta y
ldy #yd/2
tax
lda #0+0*$28
lda #<0+0*$28
sta idx
txa
lda #>0+0*$28
sta idx+1
b1:
lda #<screen
@ -43,12 +43,12 @@ main: {
bcc b2
beq b2
inc y
lda #$28
clc
adc idx
lda idx
adc #<$28
sta idx
lda #0
adc idx+1
lda idx+1
adc #>$28
sta idx+1
tya
sec

View File

@ -608,9 +608,9 @@ main: {
lda #0
sta x
//SEG14 [5] phi (word) main::idx#3 = (byte/signed byte/word/signed word/dword/signed dword) 0+(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 [phi:main->main::@1#3] -- vwuz1=vbuc1
lda #0+0*$28
lda #<0+0*$28
sta idx
lda #0
lda #>0+0*$28
sta idx+1
jmp b1
//SEG15 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
@ -655,12 +655,12 @@ main: {
//SEG27 [11] (byte) main::y#1 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::x#1 main::idx#1 main::e#1 main::y#1 ] ( main:2 [ main::x#1 main::idx#1 main::e#1 main::y#1 ] ) -- vbuz1=vbuz1_plus_1
inc y
//SEG28 [12] (word) main::idx#2 ← (word) main::idx#1 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ( main:2 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ) -- vwuz1=vwuz1_plus_vbuc1
lda #$28
clc
adc idx
lda idx
adc #<$28
sta idx
lda #0
adc idx+1
lda idx+1
adc #>$28
sta idx+1
//SEG29 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ( main:2 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ) -- vbuz1=vbuz1_minus_vbuc1
lda e
@ -756,9 +756,9 @@ main: {
//SEG13 [5] phi (byte) main::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#2] -- vbuxx=vbuc1
ldx #0
//SEG14 [5] phi (word) main::idx#3 = (byte/signed byte/word/signed word/dword/signed dword) 0+(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 [phi:main->main::@1#3] -- vwuz1=vbuc1
lda #0+0*$28
lda #<0+0*$28
sta idx
lda #0
lda #>0+0*$28
sta idx+1
jmp b1
//SEG15 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
@ -803,12 +803,12 @@ main: {
//SEG27 [11] (byte) main::y#1 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::x#1 main::idx#1 main::e#1 main::y#1 ] ( main:2 [ main::x#1 main::idx#1 main::e#1 main::y#1 ] ) -- vbuz1=vbuz1_plus_1
inc y
//SEG28 [12] (word) main::idx#2 ← (word) main::idx#1 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ( main:2 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ) -- vwuz1=vwuz1_plus_vbuc1
lda #$28
clc
adc idx
lda idx
adc #<$28
sta idx
lda #0
adc idx+1
lda idx+1
adc #>$28
sta idx+1
//SEG29 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ( main:2 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ) -- vbuyy=vbuyy_minus_vbuc1
tya
@ -843,7 +843,6 @@ Removing instruction jmp b2
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldx #0 with TAX
Replacing instruction lda #0 with TXA
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b1_from_b2 with b1
@ -946,9 +945,9 @@ main: {
//SEG13 [5] phi (byte) main::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#2] -- vbuxx=vbuc1
tax
//SEG14 [5] phi (word) main::idx#3 = (byte/signed byte/word/signed word/dword/signed dword) 0+(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 [phi:main->main::@1#3] -- vwuz1=vbuc1
lda #0+0*$28
lda #<0+0*$28
sta idx
txa
lda #>0+0*$28
sta idx+1
//SEG15 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
//SEG16 [5] phi (byte) main::y#2 = (byte) main::y#4 [phi:main::@2->main::@1#0] -- register_copy
@ -988,12 +987,12 @@ main: {
//SEG27 [11] (byte) main::y#1 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::x#1 main::idx#1 main::e#1 main::y#1 ] ( main:2 [ main::x#1 main::idx#1 main::e#1 main::y#1 ] ) -- vbuz1=vbuz1_plus_1
inc y
//SEG28 [12] (word) main::idx#2 ← (word) main::idx#1 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ( main:2 [ main::x#1 main::e#1 main::y#1 main::idx#2 ] ) -- vwuz1=vwuz1_plus_vbuc1
lda #$28
clc
adc idx
lda idx
adc #<$28
sta idx
lda #0
adc idx+1
lda idx+1
adc #>$28
sta idx+1
//SEG29 [13] (byte) main::e#2 ← (byte) main::e#1 - (const byte) main::xd#0 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ( main:2 [ main::x#1 main::y#1 main::idx#2 main::e#2 ] ) -- vbuyy=vbuyy_minus_vbuc1
tya

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@14
@14: scope:[] from @begin
to:@15
@15: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
[3] phi() [ ] ( )
main: scope:[main] from @14
main: scope:[main] from @15
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -112,6 +112,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -211,6 +220,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -397,6 +419,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -560,6 +592,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@6: scope:[] from @5
to:@7
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@7: scope:[] from @6
to:@8
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -570,8 +621,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -579,8 +630,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -598,11 +649,11 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@9: scope:[] from @8
@10: scope:[] from @9
(byte*) BGCOL ← ((byte*)) (word/dword/signed dword) 53281
(byte) GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:@10
to:@11
main: scope:[main] from
(void~) main::$0 ← call print_cls
*((byte*) BGCOL) ← (byte) GREEN
@ -612,8 +663,8 @@ main: scope:[main] from
main::@return: scope:[main] from main
return
to:@return
@10: scope:[] from @9
to:@11
@11: scope:[] from @10
to:@12
test_bytes: scope:[test_bytes] from
(byte) test_bytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0
(void~) test_bytes::$0 ← call assert_byte (string) "0=0@" (byte) test_bytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0
@ -628,8 +679,8 @@ test_bytes: scope:[test_bytes] from
test_bytes::@return: scope:[test_bytes] from test_bytes
return
to:@return
@11: scope:[] from @10
to:@12
@12: scope:[] from @11
to:@13
assert_byte: scope:[assert_byte] from
(void~) assert_byte::$0 ← call print_str (byte*) assert_byte::msg
(void~) assert_byte::$1 ← call print_str (string) " @"
@ -652,8 +703,8 @@ assert_byte::@4: scope:[assert_byte] from
assert_byte::@return: scope:[assert_byte] from assert_byte::@2
return
to:@return
@12: scope:[] from @11
to:@13
@13: scope:[] from @12
to:@14
test_sbytes: scope:[test_sbytes] from
(signed byte) test_sbytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0
(void~) test_sbytes::$0 ← call assert_sbyte (string) "0=0@" (signed byte) test_sbytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0
@ -676,8 +727,8 @@ test_sbytes: scope:[test_sbytes] from
test_sbytes::@return: scope:[test_sbytes] from test_sbytes
return
to:@return
@13: scope:[] from @12
to:@14
@14: scope:[] from @13
to:@15
assert_sbyte: scope:[assert_sbyte] from
(void~) assert_sbyte::$0 ← call print_str (byte*) assert_sbyte::msg
(void~) assert_sbyte::$1 ← call print_str (string) " @"
@ -700,13 +751,14 @@ assert_sbyte::@4: scope:[assert_sbyte] from
assert_sbyte::@return: scope:[assert_sbyte] from assert_sbyte::@2
return
to:@return
@14: scope:[] from @13
@15: scope:[] from @14
call main
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_sdword
Removing unused procedure print_dword
Removing unused procedure print_word
Removing unused procedure print_byte
@ -758,11 +810,12 @@ Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @10
Removing empty block @9
Removing empty block @11
Removing empty block assert_byte::@4
Removing empty block @12
Removing empty block assert_byte::@4
Removing empty block @13
Removing empty block @14
Removing empty block assert_sbyte::@4
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
@ -794,7 +847,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@9
to:@10
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
(byte*) char_cursor#80 ← phi( assert_byte/(byte*) char_cursor#70 assert_byte::@1/(byte*) char_cursor#71 assert_byte::@3/(byte*) char_cursor#72 assert_byte::@5/(byte*) char_cursor#15 assert_sbyte/(byte*) char_cursor#75 assert_sbyte::@1/(byte*) char_cursor#76 assert_sbyte::@3/(byte*) char_cursor#77 assert_sbyte::@5/(byte*) char_cursor#27 )
(byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(byte*) print_str::str#3 assert_byte::@3/(byte*) print_str::str#4 assert_byte::@5/(byte*) print_str::str#2 assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(byte*) print_str::str#7 assert_sbyte::@3/(byte*) print_str::str#8 assert_sbyte::@5/(byte*) print_str::str#6 )
@ -862,16 +915,16 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#6 ← (byte*) char_cursor#38
return
to:@return
@9: scope:[] from @begin
@10: scope:[] from @begin
(byte*) char_cursor#81 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#58 ← phi( @begin/(byte*) line_cursor#0 )
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:@14
main: scope:[main] from @14
(byte*) char_cursor#68 ← phi( @14/(byte*) char_cursor#79 )
(byte*) line_cursor#48 ← phi( @14/(byte*) line_cursor#53 )
to:@15
main: scope:[main] from @15
(byte*) char_cursor#68 ← phi( @15/(byte*) char_cursor#79 )
(byte*) line_cursor#48 ← phi( @15/(byte*) line_cursor#53 )
call print_cls param-assignment
to:main::@1
main::@1: scope:[main] from main
@ -1165,23 +1218,23 @@ assert_sbyte::@return: scope:[assert_sbyte] from assert_sbyte::@9
(byte*) line_cursor#22 ← (byte*) line_cursor#45
return
to:@return
@14: scope:[] from @9
(byte*) char_cursor#79 ← phi( @9/(byte*) char_cursor#81 )
(byte*) line_cursor#53 ← phi( @9/(byte*) line_cursor#58 )
@15: scope:[] from @10
(byte*) char_cursor#79 ← phi( @10/(byte*) char_cursor#81 )
(byte*) line_cursor#53 ← phi( @10/(byte*) line_cursor#58 )
call main param-assignment
to:@15
@15: scope:[] from @14
(byte*) char_cursor#65 ← phi( @14/(byte*) char_cursor#10 )
(byte*) line_cursor#46 ← phi( @14/(byte*) line_cursor#8 )
to:@16
@16: scope:[] from @15
(byte*) char_cursor#65 ← phi( @15/(byte*) char_cursor#10 )
(byte*) line_cursor#46 ← phi( @15/(byte*) line_cursor#8 )
(byte*) line_cursor#23 ← (byte*) line_cursor#46
(byte*) char_cursor#33 ← (byte*) char_cursor#65
to:@end
@end: scope:[] from @15
@end: scope:[] from @16
SYMBOL TABLE SSA
(label) @14
(label) @10
(label) @15
(label) @9
(label) @16
(label) @begin
(label) @end
(byte*) BGCOL
@ -1892,7 +1945,7 @@ Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0
Succesful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) main::@3
Culled Empty Block (label) test_bytes::@3
Culled Empty Block (label) assert_byte::@7
@ -1902,7 +1955,7 @@ Culled Empty Block (label) test_sbytes::@5
Culled Empty Block (label) assert_sbyte::@7
Culled Empty Block (label) assert_sbyte::@8
Culled Empty Block (label) assert_sbyte::@9
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: print_str::str#11 print_str::str#1
Not aliassing across scopes: char_cursor#80 char_cursor#70
@ -2032,12 +2085,12 @@ Constant inlined print_str::str#8 = (const string) assert_sbyte::str2
Constant inlined print_str::str#7 = (const string) assert_sbyte::str1
Constant inlined print_str::str#6 = (const string) assert_sbyte::str
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @14 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @15 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @14 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return print_ln::@3 test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @15 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return print_ln::@3 test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @14
Adding NOP phi() at start of @15
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
@ -2093,9 +2146,9 @@ Coalesced [87] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 10 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @14 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @15 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @14
Adding NOP phi() at start of @15
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
@ -2124,14 +2177,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@14
@14: scope:[] from @begin
to:@15
@15: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
[3] phi() [ ] ( )
main: scope:[main] from @14
main: scope:[main] from @15
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -2288,46 +2341,46 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@14 dominated by @begin @14
@end dominated by @end @begin @14
main dominated by main @begin @14
main::@1 dominated by main main::@1 @begin @14
main::@2 dominated by main main::@1 main::@2 @begin @14
main::@return dominated by main::@return main main::@1 main::@2 @begin @14
test_sbytes dominated by main test_sbytes main::@1 main::@2 @begin @14
test_sbytes::@1 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1
test_sbytes::@2 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2
test_sbytes::@3 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3
test_sbytes::@4 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
test_sbytes::@return dominated by test_sbytes::@return main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
assert_sbyte dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14
assert_sbyte::@5 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5
assert_sbyte::@6 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@6
assert_sbyte::@3 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@3 assert_sbyte::@6
assert_sbyte::@2 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@return dominated by assert_sbyte assert_sbyte::@return main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@1 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@1 assert_sbyte::@6
print_str dominated by main main::@1 @begin @14 print_str
print_str::@1 dominated by main print_str::@1 main::@1 @begin @14 print_str
print_str::@return dominated by print_str::@return main print_str::@1 main::@1 @begin @14 print_str
print_str::@2 dominated by main print_str::@1 print_str::@2 main::@1 @begin @14 print_str
print_ln dominated by main main::@1 @begin @14 print_ln
print_ln::@1 dominated by print_ln::@1 main main::@1 @begin @14 print_ln
print_ln::@return dominated by print_ln::@1 main print_ln::@return main::@1 @begin @14 print_ln
test_bytes dominated by test_bytes main main::@1 @begin @14
test_bytes::@1 dominated by test_bytes main main::@1 @begin @14 test_bytes::@1
test_bytes::@2 dominated by test_bytes main main::@1 @begin @14 test_bytes::@2 test_bytes::@1
test_bytes::@return dominated by test_bytes main main::@1 @begin @14 test_bytes::@2 test_bytes::@1 test_bytes::@return
assert_byte dominated by test_bytes main main::@1 @begin @14 assert_byte
assert_byte::@5 dominated by test_bytes main assert_byte::@5 main::@1 @begin @14 assert_byte
assert_byte::@6 dominated by test_bytes main assert_byte::@5 assert_byte::@6 main::@1 @begin @14 assert_byte
assert_byte::@3 dominated by test_bytes assert_byte::@3 main assert_byte::@5 assert_byte::@6 main::@1 @begin @14 assert_byte
assert_byte::@2 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 @begin @14 assert_byte
assert_byte::@return dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 assert_byte::@return @begin @14 assert_byte
assert_byte::@1 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@1 main::@1 @begin @14 assert_byte
print_cls dominated by main @begin @14 print_cls
print_cls::@1 dominated by main @begin @14 print_cls::@1 print_cls
print_cls::@return dominated by main print_cls::@return @begin @14 print_cls::@1 print_cls
@15 dominated by @begin @15
@end dominated by @end @begin @15
main dominated by main @begin @15
main::@1 dominated by main main::@1 @begin @15
main::@2 dominated by main main::@1 main::@2 @begin @15
main::@return dominated by main::@return main main::@1 main::@2 @begin @15
test_sbytes dominated by main test_sbytes main::@1 main::@2 @begin @15
test_sbytes::@1 dominated by main test_sbytes main::@1 main::@2 @begin @15 test_sbytes::@1
test_sbytes::@2 dominated by main test_sbytes main::@1 main::@2 @begin @15 test_sbytes::@1 test_sbytes::@2
test_sbytes::@3 dominated by main test_sbytes main::@1 main::@2 @begin @15 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3
test_sbytes::@4 dominated by main test_sbytes main::@1 main::@2 @begin @15 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
test_sbytes::@return dominated by test_sbytes::@return main test_sbytes main::@1 main::@2 @begin @15 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
assert_sbyte dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @15
assert_sbyte::@5 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @15 assert_sbyte::@5
assert_sbyte::@6 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @15 assert_sbyte::@5 assert_sbyte::@6
assert_sbyte::@3 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @15 assert_sbyte::@5 assert_sbyte::@3 assert_sbyte::@6
assert_sbyte::@2 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @15 assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@return dominated by assert_sbyte assert_sbyte::@return main test_sbytes main::@1 main::@2 @begin @15 assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@1 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @15 assert_sbyte::@5 assert_sbyte::@1 assert_sbyte::@6
print_str dominated by main main::@1 @begin @15 print_str
print_str::@1 dominated by main print_str::@1 main::@1 @begin @15 print_str
print_str::@return dominated by print_str::@return main print_str::@1 main::@1 @begin @15 print_str
print_str::@2 dominated by main print_str::@1 print_str::@2 main::@1 @begin @15 print_str
print_ln dominated by main main::@1 @begin @15 print_ln
print_ln::@1 dominated by print_ln::@1 main main::@1 @begin @15 print_ln
print_ln::@return dominated by print_ln::@1 main print_ln::@return main::@1 @begin @15 print_ln
test_bytes dominated by test_bytes main main::@1 @begin @15
test_bytes::@1 dominated by test_bytes main main::@1 @begin @15 test_bytes::@1
test_bytes::@2 dominated by test_bytes main main::@1 @begin @15 test_bytes::@2 test_bytes::@1
test_bytes::@return dominated by test_bytes main main::@1 @begin @15 test_bytes::@2 test_bytes::@1 test_bytes::@return
assert_byte dominated by test_bytes main main::@1 @begin @15 assert_byte
assert_byte::@5 dominated by test_bytes main assert_byte::@5 main::@1 @begin @15 assert_byte
assert_byte::@6 dominated by test_bytes main assert_byte::@5 assert_byte::@6 main::@1 @begin @15 assert_byte
assert_byte::@3 dominated by test_bytes assert_byte::@3 main assert_byte::@5 assert_byte::@6 main::@1 @begin @15 assert_byte
assert_byte::@2 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 @begin @15 assert_byte
assert_byte::@return dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 assert_byte::@return @begin @15 assert_byte
assert_byte::@1 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@1 main::@1 @begin @15 assert_byte
print_cls dominated by main @begin @15 print_cls
print_cls::@1 dominated by main @begin @15 print_cls::@1 print_cls
print_cls::@return dominated by main print_cls::@return @begin @15 print_cls::@1 print_cls
NATURAL LOOPS
Found back edge: Loop head: print_str::@1 tails: print_str::@2 blocks: null
@ -2461,17 +2514,17 @@ INITIAL ASM
.label line_cursor = $a
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
b14_from_bbegin:
jmp b14
//SEG4 @14
b14:
//SEG3 [1] phi from @begin to @15 [phi:@begin->@15]
b15_from_bbegin:
jmp b15
//SEG4 @15
b15:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @14 to main [phi:@14->main]
main_from_b14:
//SEG6 [4] phi from @15 to main [phi:@15->main]
main_from_b15:
jsr main
//SEG7 [3] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
//SEG7 [3] phi from @15 to @end [phi:@15->@end]
bend_from_b15:
jmp bend
//SEG8 @end
bend:
@ -3099,17 +3152,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 7
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
b14_from_bbegin:
jmp b14
//SEG4 @14
b14:
//SEG3 [1] phi from @begin to @15 [phi:@begin->@15]
b15_from_bbegin:
jmp b15
//SEG4 @15
b15:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @14 to main [phi:@14->main]
main_from_b14:
//SEG6 [4] phi from @15 to main [phi:@15->main]
main_from_b15:
jsr main
//SEG7 [3] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
//SEG7 [3] phi from @15 to @end [phi:@15->@end]
bend_from_b15:
jmp bend
//SEG8 @end
bend:
@ -3626,7 +3679,7 @@ print_cls: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b14
Removing instruction jmp b15
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
@ -3670,9 +3723,9 @@ Replacing label b2_from_b1 with b2
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b14_from_bbegin:
Removing instruction main_from_b14:
Removing instruction bend_from_b14:
Removing instruction b15_from_bbegin:
Removing instruction main_from_b15:
Removing instruction bend_from_b15:
Removing instruction b2_from_b1:
Removing instruction test_sbytes_from_b2:
Removing instruction b1_from_test_sbytes:
@ -3703,7 +3756,7 @@ Removing instruction b1_from_b6:
Removing instruction print_str_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b14:
Removing instruction b15:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
@ -3743,7 +3796,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @14
(label) @15
(label) @begin
(label) @end
(byte*) BGCOL
@ -3880,12 +3933,12 @@ Score: 1846
.label char_cursor = 5
.label line_cursor = 7
//SEG2 @begin
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
//SEG4 @14
//SEG3 [1] phi from @begin to @15 [phi:@begin->@15]
//SEG4 @15
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @14 to main [phi:@14->main]
//SEG6 [4] phi from @15 to main [phi:@15->main]
jsr main
//SEG7 [3] phi from @14 to @end [phi:@14->@end]
//SEG7 [3] phi from @15 to @end [phi:@15->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @14
(label) @15
(label) @begin
(label) @end
(byte*) BGCOL

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -65,6 +65,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -165,6 +174,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -260,6 +282,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -393,6 +425,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@6: scope:[] from @5
to:@7
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@7: scope:[] from @6
to:@8
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -403,8 +454,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -412,8 +463,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -431,9 +482,9 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@9: scope:[] from @8
@10: scope:[] from @9
(byte[]) txt ← (string) "camelot@"
to:@10
to:@11
main: scope:[main] from
(void~) main::$0 ← call print_cls
(byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -451,13 +502,14 @@ main::@2: scope:[main] from main::@1
main::@return: scope:[main] from main::@2
return
to:@return
@10: scope:[] from @9
@11: scope:[] from @10
call main
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_sdword
Removing unused procedure print_dword
Removing unused procedure print_word
Removing unused procedure print_byte
@ -478,6 +530,7 @@ Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @9
Removing empty block main::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
@ -497,7 +550,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@9
to:@10
print_str: scope:[print_str] from main::@1
(byte*) char_cursor#27 ← phi( main::@1/(byte*) char_cursor#25 )
(byte*) print_str::str#4 ← phi( main::@1/(byte*) print_str::str#1 )
@ -565,14 +618,14 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#6 ← (byte*) char_cursor#16
return
to:@return
@9: scope:[] from @begin
@10: scope:[] from @begin
(byte*) char_cursor#28 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#22 ← phi( @begin/(byte*) line_cursor#0 )
(byte[]) txt#0 ← (const string) $0
to:@10
main: scope:[main] from @10
(byte*) char_cursor#24 ← phi( @10/(byte*) char_cursor#26 )
(byte*) line_cursor#18 ← phi( @10/(byte*) line_cursor#20 )
to:@11
main: scope:[main] from @11
(byte*) char_cursor#24 ← phi( @11/(byte*) char_cursor#26 )
(byte*) line_cursor#18 ← phi( @11/(byte*) line_cursor#20 )
call print_cls param-assignment
to:main::@3
main::@3: scope:[main] from main
@ -614,24 +667,24 @@ main::@return: scope:[main] from main::@5
(byte*) char_cursor#10 ← (byte*) char_cursor#20
return
to:@return
@10: scope:[] from @9
(byte*) char_cursor#26 ← phi( @9/(byte*) char_cursor#28 )
(byte*) line_cursor#20 ← phi( @9/(byte*) line_cursor#22 )
call main param-assignment
to:@11
@11: scope:[] from @10
(byte*) char_cursor#21 ← phi( @10/(byte*) char_cursor#10 )
(byte*) line_cursor#16 ← phi( @10/(byte*) line_cursor#7 )
(byte*) char_cursor#26 ← phi( @10/(byte*) char_cursor#28 )
(byte*) line_cursor#20 ← phi( @10/(byte*) line_cursor#22 )
call main param-assignment
to:@12
@12: scope:[] from @11
(byte*) char_cursor#21 ← phi( @11/(byte*) char_cursor#10 )
(byte*) line_cursor#16 ← phi( @11/(byte*) line_cursor#7 )
(byte*) line_cursor#8 ← (byte*) line_cursor#16
(byte*) char_cursor#11 ← (byte*) char_cursor#21
to:@end
@end: scope:[] from @11
@end: scope:[] from @12
SYMBOL TABLE SSA
(const string) $0 = (string) "camelot@"
(label) @10
(label) @11
(label) @9
(label) @12
(label) @begin
(label) @end
(byte*) SCREEN
@ -817,9 +870,9 @@ Consolidated array index constant in *(txt#0+1)
Succesful SSA optimization Pass2ConstantAdditionElimination
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) main::@3
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: char_cursor#12 char_cursor#25
Not aliassing across scopes: line_cursor#9 line_cursor#19
@ -842,13 +895,13 @@ Constant inlined print_cls::$0 = (const byte*) SCREEN#0+(word/signed word/dword/
Constant inlined print_cls::sc#0 = (const byte*) SCREEN#0
Constant inlined $0 = (const string) txt#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @11 @end main main::@1 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting main::@6(between main::@5 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @11 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
@ -877,9 +930,9 @@ Coalesced [38] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 5 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @11 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
@ -897,14 +950,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -971,24 +1024,24 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@10 dominated by @begin @10
@end dominated by @begin @end @10
main dominated by @begin main @10
main::@1 dominated by @begin main main::@1 @10
main::@4 dominated by @begin main main::@1 @10 main::@4
main::@5 dominated by @begin main main::@1 main::@5 @10 main::@4
main::@return dominated by main::@return @begin main main::@1 main::@5 @10 main::@4
main::@6 dominated by @begin main main::@1 main::@5 main::@6 @10 main::@4
print_ln dominated by @begin main print_ln main::@1 @10 main::@4
print_ln::@1 dominated by print_ln::@1 @begin main print_ln main::@1 @10 main::@4
print_ln::@return dominated by print_ln::@1 @begin main print_ln print_ln::@return main::@1 @10 main::@4
print_str dominated by @begin main print_str main::@1 @10
print_str::@1 dominated by @begin main print_str::@1 print_str main::@1 @10
print_str::@return dominated by @begin print_str::@return main print_str::@1 print_str main::@1 @10
print_str::@2 dominated by @begin main print_str::@1 print_str::@2 print_str main::@1 @10
print_cls dominated by @begin main print_cls @10
print_cls::@1 dominated by @begin print_cls::@1 main print_cls @10
print_cls::@return dominated by @begin print_cls::@1 main print_cls print_cls::@return @10
@11 dominated by @11 @begin
@end dominated by @11 @begin @end
main dominated by @11 @begin main
main::@1 dominated by @11 @begin main main::@1
main::@4 dominated by @11 @begin main main::@1 main::@4
main::@5 dominated by @11 @begin main main::@1 main::@5 main::@4
main::@return dominated by @11 main::@return @begin main main::@1 main::@5 main::@4
main::@6 dominated by @11 @begin main main::@1 main::@5 main::@6 main::@4
print_ln dominated by @11 @begin main print_ln main::@1 main::@4
print_ln::@1 dominated by @11 print_ln::@1 @begin main print_ln main::@1 main::@4
print_ln::@return dominated by @11 print_ln::@1 @begin main print_ln print_ln::@return main::@1 main::@4
print_str dominated by @11 @begin main print_str main::@1
print_str::@1 dominated by @11 @begin main print_str::@1 print_str main::@1
print_str::@return dominated by @11 @begin print_str::@return main print_str::@1 print_str main::@1
print_str::@2 dominated by @11 @begin main print_str::@1 print_str::@2 print_str main::@1
print_cls dominated by @11 @begin main print_cls
print_cls::@1 dominated by @11 @begin print_cls::@1 main print_cls
print_cls::@return dominated by @11 @begin print_cls::@1 main print_cls print_cls::@return
NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@6 blocks: null
@ -1075,17 +1128,17 @@ INITIAL ASM
.label line_cursor = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -1333,17 +1386,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 2
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -1536,7 +1589,7 @@ print_cls: {
txt: .text "camelot@"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b4
@ -1556,9 +1609,9 @@ Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b10_from_bbegin:
Removing instruction main_from_b10:
Removing instruction bend_from_b10:
Removing instruction b11_from_bbegin:
Removing instruction main_from_b11:
Removing instruction bend_from_b11:
Removing instruction print_str_from_b1:
Removing instruction b4_from_b1:
Removing instruction print_ln_from_b4:
@ -1566,7 +1619,7 @@ Removing instruction b1_from_print_ln:
Removing instruction b1_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b10:
Removing instruction b11:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1_from_main:
@ -1585,7 +1638,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN
@ -1645,12 +1698,12 @@ Score: 11128
.label char_cursor = 6
.label line_cursor = 2
//SEG2 @begin
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
//SEG4 @10
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
//SEG4 @11
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
//SEG6 [4] phi from @11 to main [phi:@11->main]
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -5,11 +5,11 @@
.label w2 = 2
jsr main
main: {
lda #0
lda #<0
sta w1
sta w1+1
jsr incw1
lda #0
lda #<0
sta w2
sta w2+1
jsr incw2

View File

@ -442,9 +442,9 @@ main: {
//SEG11 [16] phi from main to incw1 [phi:main->incw1]
incw1_from_main:
//SEG12 [16] phi (word) w1#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->incw1#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta w1
lda #0
lda #>0
sta w1+1
jsr incw1
//SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
@ -456,9 +456,9 @@ main: {
//SEG16 [13] phi from main::@1 to incw2 [phi:main::@1->incw2]
incw2_from_b1:
//SEG17 [13] phi (word) w2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta w2
lda #0
lda #>0
sta w2+1
jsr incw2
//SEG18 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
@ -559,9 +559,9 @@ main: {
//SEG11 [16] phi from main to incw1 [phi:main->incw1]
incw1_from_main:
//SEG12 [16] phi (word) w1#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->incw1#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta w1
lda #0
lda #>0
sta w1+1
jsr incw1
//SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
@ -573,9 +573,9 @@ main: {
//SEG16 [13] phi from main::@1 to incw2 [phi:main::@1->incw2]
incw2_from_b1:
//SEG17 [13] phi (word) w2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta w2
lda #0
lda #>0
sta w2+1
jsr incw2
//SEG18 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
@ -641,8 +641,8 @@ Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #>0
Removing instruction lda #>0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction bbegin:
Removing instruction b3_from_bbegin:
@ -713,7 +713,7 @@ main: {
//SEG10 [5] call incw1 param-assignment [ w1#11 ] ( main:2 [ w1#11 ] )
//SEG11 [16] phi from main to incw1 [phi:main->incw1]
//SEG12 [16] phi (word) w1#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->incw1#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta w1
sta w1+1
jsr incw1
@ -722,7 +722,7 @@ main: {
//SEG15 [7] call incw2 param-assignment [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] )
//SEG16 [13] phi from main::@1 to incw2 [phi:main::@1->incw2]
//SEG17 [13] phi (word) w2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta w2
sta w2+1
jsr incw2

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_str param-assignment [ char_cursor#13 ] ( main:2 [ char_cursor#13 ] )
to:main::@1

View File

@ -67,6 +67,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -166,6 +175,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -263,6 +285,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -395,6 +427,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@6: scope:[] from @5
to:@7
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@7: scope:[] from @6
to:@8
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -405,8 +456,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -414,8 +465,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -433,11 +484,11 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@9: scope:[] from @8
@10: scope:[] from @9
(byte[]) msg ← (string) "hello world! @"
(byte[]) msg2 ← (string) "hello c64! @"
(byte[]) msg3 ← (string) "hello 2017! @"
to:@10
to:@11
main: scope:[main] from
(void~) main::$0 ← call print_str (byte[]) msg
(void~) main::$1 ← call print_ln
@ -449,15 +500,16 @@ main: scope:[main] from
main::@return: scope:[main] from main
return
to:@return
@10: scope:[] from @9
@11: scope:[] from @10
call main
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_sdword
Removing unused procedure print_cls
Removing unused procedure print_dword
Removing unused procedure print_word
Removing unused procedure print_byte
Removing unused procedure print_char
@ -482,6 +534,7 @@ Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @9
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
print_ln modifies line_cursor
@ -498,7 +551,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@9
to:@10
print_str: scope:[print_str] from main main::@2 main::@4
(byte*) char_cursor#29 ← phi( main/(byte*) char_cursor#27 main::@2/(byte*) char_cursor#6 main::@4/(byte*) char_cursor#8 )
(byte*) print_str::str#6 ← phi( main/(byte*) print_str::str#1 main::@2/(byte*) print_str::str#2 main::@4/(byte*) print_str::str#3 )
@ -544,16 +597,16 @@ print_ln::@return: scope:[print_ln] from print_ln::@2
(byte*) char_cursor#4 ← (byte*) char_cursor#16
return
to:@return
@9: scope:[] from @begin
@10: scope:[] from @begin
(byte*) line_cursor#22 ← phi( @begin/(byte*) line_cursor#0 )
(byte*) char_cursor#30 ← phi( @begin/(byte*) char_cursor#0 )
(byte[]) msg#0 ← (const string) $0
(byte[]) msg2#0 ← (const string) $1
(byte[]) msg3#0 ← (const string) $2
to:@10
main: scope:[main] from @10
(byte*) line_cursor#21 ← phi( @10/(byte*) line_cursor#20 )
(byte*) char_cursor#27 ← phi( @10/(byte*) char_cursor#28 )
to:@11
main: scope:[main] from @11
(byte*) line_cursor#21 ← phi( @11/(byte*) line_cursor#20 )
(byte*) char_cursor#27 ← phi( @11/(byte*) char_cursor#28 )
(byte*) print_str::str#1 ← (byte[]) msg#0
call print_str param-assignment
to:main::@1
@ -604,18 +657,18 @@ main::@return: scope:[main] from main::@6
(byte*) line_cursor#6 ← (byte*) line_cursor#14
return
to:@return
@10: scope:[] from @9
(byte*) line_cursor#20 ← phi( @9/(byte*) line_cursor#22 )
(byte*) char_cursor#28 ← phi( @9/(byte*) char_cursor#30 )
call main param-assignment
to:@11
@11: scope:[] from @10
(byte*) line_cursor#15 ← phi( @10/(byte*) line_cursor#6 )
(byte*) char_cursor#24 ← phi( @10/(byte*) char_cursor#11 )
(byte*) line_cursor#20 ← phi( @10/(byte*) line_cursor#22 )
(byte*) char_cursor#28 ← phi( @10/(byte*) char_cursor#30 )
call main param-assignment
to:@12
@12: scope:[] from @11
(byte*) line_cursor#15 ← phi( @11/(byte*) line_cursor#6 )
(byte*) char_cursor#24 ← phi( @11/(byte*) char_cursor#11 )
(byte*) char_cursor#12 ← (byte*) char_cursor#24
(byte*) line_cursor#7 ← (byte*) line_cursor#15
to:@end
@end: scope:[] from @11
@end: scope:[] from @12
SYMBOL TABLE SSA
(const string) $0 = (string) "hello world! @"
@ -623,7 +676,7 @@ SYMBOL TABLE SSA
(const string) $2 = (string) "hello 2017! @"
(label) @10
(label) @11
(label) @9
(label) @12
(label) @begin
(label) @end
(byte*) SCREEN
@ -808,9 +861,9 @@ Constant (const string) print_str::str#2 = msg2#0
Constant (const string) print_str::str#3 = msg3#0
Succesful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) main::@6
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Succesful SSA optimization Pass2CullEmptyBlocks
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) print_str::str#1
@ -829,11 +882,11 @@ Constant inlined $0 = (const string) msg#0
Constant inlined $1 = (const string) msg2#0
Constant inlined $2 = (const string) msg3#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @10 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Block Sequence Planned @begin @11 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Block Sequence Planned @begin @10 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2
Block Sequence Planned @begin @11 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -862,9 +915,9 @@ Coalesced [33] print_str::str#8 ← print_str::str#0
Coalesced [34] char_cursor#34 ← char_cursor#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Block Sequence Planned @begin @10 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Block Sequence Planned @begin @11 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -881,14 +934,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_str param-assignment [ char_cursor#13 ] ( main:2 [ char_cursor#13 ] )
to:main::@1
@ -946,22 +999,22 @@ print_str::@2: scope:[print_str] from print_str::@1
DOMINATORS
@begin dominated by @begin
@10 dominated by @begin @10
@end dominated by @begin @end @10
main dominated by @begin main @10
main::@1 dominated by @begin main main::@1 @10
main::@2 dominated by @begin main main::@1 main::@2 @10
main::@3 dominated by @begin main main::@1 main::@2 main::@3 @10
main::@4 dominated by @begin main main::@1 main::@2 main::@3 @10 main::@4
main::@5 dominated by @begin main main::@1 main::@2 main::@5 main::@3 @10 main::@4
main::@return dominated by main::@return @begin main main::@1 main::@2 main::@5 main::@3 @10 main::@4
print_ln dominated by @begin main print_ln main::@1 @10
print_ln::@1 dominated by print_ln::@1 @begin main print_ln main::@1 @10
print_ln::@return dominated by print_ln::@1 @begin main print_ln print_ln::@return main::@1 @10
print_str dominated by @begin main print_str @10
print_str::@1 dominated by @begin main print_str::@1 print_str @10
print_str::@return dominated by @begin print_str::@return main print_str::@1 print_str @10
print_str::@2 dominated by @begin main print_str::@1 print_str::@2 print_str @10
@11 dominated by @11 @begin
@end dominated by @11 @begin @end
main dominated by @11 @begin main
main::@1 dominated by @11 @begin main main::@1
main::@2 dominated by @11 @begin main main::@1 main::@2
main::@3 dominated by @11 @begin main main::@1 main::@2 main::@3
main::@4 dominated by @11 @begin main main::@1 main::@2 main::@3 main::@4
main::@5 dominated by @11 @begin main main::@1 main::@2 main::@5 main::@3 main::@4
main::@return dominated by @11 main::@return @begin main main::@1 main::@2 main::@5 main::@3 main::@4
print_ln dominated by @11 @begin main print_ln main::@1
print_ln::@1 dominated by @11 print_ln::@1 @begin main print_ln main::@1
print_ln::@return dominated by @11 print_ln::@1 @begin main print_ln print_ln::@return main::@1
print_str dominated by @11 @begin main print_str
print_str::@1 dominated by @11 @begin main print_str::@1 print_str
print_str::@return dominated by @11 @begin print_str::@return main print_str::@1 print_str
print_str::@2 dominated by @11 @begin main print_str::@1 print_str::@2 print_str
NATURAL LOOPS
Found back edge: Loop head: print_ln::@1 tails: print_ln::@1 blocks: null
@ -1028,17 +1081,17 @@ INITIAL ASM
.label line_cursor = 2
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -1243,17 +1296,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 2
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -1426,7 +1479,7 @@ print_str: {
msg3: .text "hello 2017! @"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
@ -1445,9 +1498,9 @@ Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b2 with b1
Removing instruction bbegin:
Removing instruction b10_from_bbegin:
Removing instruction main_from_b10:
Removing instruction bend_from_b10:
Removing instruction b11_from_bbegin:
Removing instruction main_from_b11:
Removing instruction bend_from_b11:
Removing instruction b1_from_main:
Removing instruction print_ln_from_b1:
Removing instruction b3_from_b2:
@ -1459,7 +1512,7 @@ Removing instruction b1_from_b1:
Removing instruction b1_from_print_str:
Removing instruction b1_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b10:
Removing instruction b11:
Removing instruction bend:
Removing instruction print_str_from_main:
Removing instruction b1:
@ -1475,7 +1528,7 @@ Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN
@ -1532,12 +1585,12 @@ Score: 1039
.label char_cursor = 6
.label line_cursor = 2
//SEG2 @begin
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
//SEG4 @10
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
//SEG4 @11
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
//SEG6 [4] phi from @11 to main [phi:@11->main]
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -64,8 +64,8 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
lda current_chargen
clc
lda current_chargen
adc #<CHARGEN
sta current_chargen
lda current_chargen+1

View File

@ -3340,8 +3340,8 @@ scroll_bit: {
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
lda current_chargen
adc #<CHARGEN
sta current_chargen
lda current_chargen+1
@ -3931,8 +3931,8 @@ scroll_bit: {
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
lda current_chargen
adc #<CHARGEN
sta current_chargen
lda current_chargen+1

View File

@ -26,21 +26,22 @@
jsr main
main: {
jsr init
lda #$64
lda #<$64
sta yvel_init
lda #0
lda #>$64
sta yvel_init+1
lda #$c8
lda #<$c8
sta xvel
lda #0
lda #>$c8
sta xvel+1
lda #<0
sta ypos
sta ypos+1
sta xpos
sta xpos+1
lda #$64
lda #<$64
sta yvel_12
lda #0
lda #>$64
sta yvel_12+1
b2:
lda RASTER
@ -80,37 +81,37 @@ anim: {
eor #$80
!:
bpl b2
lda #$c8
lda #<$c8
sta yvel
lda #0
lda #>$c8
sta yvel+1
b2:
lda yvel
sta yvel_22
lda yvel+1
sta yvel_22+1
lda #0
lda #<0
sta ypos
sta ypos+1
sta xpos
sta xpos+1
b1:
lda yvel_10
clc
lda yvel_10
adc #<g
sta yvel_10
lda yvel_10+1
adc #>g
sta yvel_10+1
clc
lda xpos
clc
adc xvel
sta xpos
lda xpos+1
adc xvel+1
sta xpos+1
clc
lda ypos
clc
adc yvel_10
sta ypos
lda ypos+1
@ -129,8 +130,8 @@ anim: {
rol $ff
rol _10
rol _10+1
lda sprite_x
clc
lda sprite_x
adc #<$a0
sta sprite_x
lda sprite_x+1

View File

@ -1592,29 +1592,29 @@ main: {
//SEG11 [6] phi from main to main::@2 [phi:main->main::@2]
b2_from_main:
//SEG12 [6] phi (signed word) yvel_init#13 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#0] -- vwsz1=vbuc1
lda #$64
lda #<$64
sta yvel_init
lda #0
lda #>$64
sta yvel_init+1
//SEG13 [6] phi (signed word) xvel#12 = (byte/word/signed word/dword/signed dword) 200 [phi:main->main::@2#1] -- vwsz1=vbuc1
lda #$c8
lda #<$c8
sta xvel
lda #0
lda #>$c8
sta xvel+1
//SEG14 [6] phi (signed word) ypos#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#2] -- vwsz1=vbuc1
lda #0
lda #<0
sta ypos
lda #0
lda #>0
sta ypos+1
//SEG15 [6] phi (signed word) xpos#12 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#3] -- vwsz1=vbuc1
lda #0
lda #<0
sta xpos
lda #0
lda #>0
sta xpos+1
//SEG16 [6] phi (signed word) yvel#12 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#4] -- vwsz1=vbuc1
lda #$64
lda #<$64
sta yvel_12
lda #0
lda #>$64
sta yvel_12+1
jmp b2
//SEG17 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
@ -1697,9 +1697,9 @@ anim: {
//SEG39 [16] phi from anim::@3 to anim::@2 [phi:anim::@3->anim::@2]
b2_from_b3:
//SEG40 [16] phi (signed word) yvel#4 = (byte/word/signed word/dword/signed dword) 200 [phi:anim::@3->anim::@2#0] -- vwsz1=vbuc1
lda #$c8
lda #<$c8
sta yvel
lda #0
lda #>$c8
sta yvel+1
jmp b2
//SEG41 anim::@2
@ -1713,15 +1713,15 @@ anim: {
b1_from_b2:
//SEG44 [18] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@2->anim::@1#0] -- register_copy
//SEG45 [18] phi (signed word) ypos#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#1] -- vwsz1=vbuc1
lda #0
lda #<0
sta ypos
lda #0
lda #>0
sta ypos+1
//SEG46 [18] phi (signed word) xvel#10 = (signed word) xvel#14 [phi:anim::@2->anim::@1#2] -- register_copy
//SEG47 [18] phi (signed word) xpos#9 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#3] -- vwsz1=vbuc1
lda #0
lda #<0
sta xpos
lda #0
lda #>0
sta xpos+1
//SEG48 [18] phi (signed word) yvel#9 = (signed word~) yvel#22 [phi:anim::@2->anim::@1#4] -- register_copy
jmp b1
@ -1736,24 +1736,24 @@ anim: {
//SEG55 anim::@1
b1:
//SEG56 [19] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ( main:2::anim:9 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ) -- vwsz1=vwsz1_plus_vwsc1
lda yvel_10
clc
lda yvel_10
adc #<g
sta yvel_10
lda yvel_10+1
adc #>g
sta yvel_10+1
//SEG57 [20] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ( main:2::anim:9 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ) -- vwsz1=vwsz1_plus_vwsz2
clc
lda xpos
clc
adc xvel
sta xpos
lda xpos+1
adc xvel+1
sta xpos+1
//SEG58 [21] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) -- vwsz1=vwsz1_plus_vwsz2
clc
lda ypos
clc
adc yvel_10
sta ypos
lda ypos+1
@ -2062,29 +2062,29 @@ main: {
//SEG11 [6] phi from main to main::@2 [phi:main->main::@2]
b2_from_main:
//SEG12 [6] phi (signed word) yvel_init#13 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#0] -- vwsz1=vbuc1
lda #$64
lda #<$64
sta yvel_init
lda #0
lda #>$64
sta yvel_init+1
//SEG13 [6] phi (signed word) xvel#12 = (byte/word/signed word/dword/signed dword) 200 [phi:main->main::@2#1] -- vwsz1=vbuc1
lda #$c8
lda #<$c8
sta xvel
lda #0
lda #>$c8
sta xvel+1
//SEG14 [6] phi (signed word) ypos#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#2] -- vwsz1=vbuc1
lda #0
lda #<0
sta ypos
lda #0
lda #>0
sta ypos+1
//SEG15 [6] phi (signed word) xpos#12 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#3] -- vwsz1=vbuc1
lda #0
lda #<0
sta xpos
lda #0
lda #>0
sta xpos+1
//SEG16 [6] phi (signed word) yvel#12 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#4] -- vwsz1=vbuc1
lda #$64
lda #<$64
sta yvel_12
lda #0
lda #>$64
sta yvel_12+1
jmp b2
//SEG17 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
@ -2164,9 +2164,9 @@ anim: {
//SEG39 [16] phi from anim::@3 to anim::@2 [phi:anim::@3->anim::@2]
b2_from_b3:
//SEG40 [16] phi (signed word) yvel#4 = (byte/word/signed word/dword/signed dword) 200 [phi:anim::@3->anim::@2#0] -- vwsz1=vbuc1
lda #$c8
lda #<$c8
sta yvel
lda #0
lda #>$c8
sta yvel+1
jmp b2
//SEG41 anim::@2
@ -2180,15 +2180,15 @@ anim: {
b1_from_b2:
//SEG44 [18] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@2->anim::@1#0] -- register_copy
//SEG45 [18] phi (signed word) ypos#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#1] -- vwsz1=vbuc1
lda #0
lda #<0
sta ypos
lda #0
lda #>0
sta ypos+1
//SEG46 [18] phi (signed word) xvel#10 = (signed word) xvel#14 [phi:anim::@2->anim::@1#2] -- register_copy
//SEG47 [18] phi (signed word) xpos#9 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#3] -- vwsz1=vbuc1
lda #0
lda #<0
sta xpos
lda #0
lda #>0
sta xpos+1
//SEG48 [18] phi (signed word) yvel#9 = (signed word~) yvel#22 [phi:anim::@2->anim::@1#4] -- register_copy
jmp b1
@ -2203,24 +2203,24 @@ anim: {
//SEG55 anim::@1
b1:
//SEG56 [19] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ( main:2::anim:9 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ) -- vwsz1=vwsz1_plus_vwsc1
lda yvel_10
clc
lda yvel_10
adc #<g
sta yvel_10
lda yvel_10+1
adc #>g
sta yvel_10+1
//SEG57 [20] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ( main:2::anim:9 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ) -- vwsz1=vwsz1_plus_vwsz2
clc
lda xpos
clc
adc xvel
sta xpos
lda xpos+1
adc xvel+1
sta xpos+1
//SEG58 [21] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) -- vwsz1=vwsz1_plus_vwsz2
clc
lda ypos
clc
adc yvel_10
sta ypos
lda ypos+1
@ -2241,8 +2241,8 @@ anim: {
rol _10
rol _10+1
//SEG60 [23] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ) -- vwsz1=vwsz1_plus_vbuc1
lda sprite_x
clc
lda sprite_x
adc #<$a0
sta sprite_x
lda sprite_x+1
@ -2399,13 +2399,12 @@ Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #>0
Removing instruction lda #<0
Removing instruction lda #>0
Removing instruction lda #>0
Removing instruction lda #<0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction lda #$64
Succesful ASM optimization Pass5UnnecesaryLoadElimination
@ -2559,7 +2558,7 @@ reg byte a [ anim::$16 ]
FINAL ASSEMBLER
Score: 6153
Score: 6353
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -2602,25 +2601,26 @@ main: {
jsr init
//SEG11 [6] phi from main to main::@2 [phi:main->main::@2]
//SEG12 [6] phi (signed word) yvel_init#13 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#0] -- vwsz1=vbuc1
lda #$64
lda #<$64
sta yvel_init
lda #0
lda #>$64
sta yvel_init+1
//SEG13 [6] phi (signed word) xvel#12 = (byte/word/signed word/dword/signed dword) 200 [phi:main->main::@2#1] -- vwsz1=vbuc1
lda #$c8
lda #<$c8
sta xvel
lda #0
lda #>$c8
sta xvel+1
//SEG14 [6] phi (signed word) ypos#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#2] -- vwsz1=vbuc1
lda #<0
sta ypos
sta ypos+1
//SEG15 [6] phi (signed word) xpos#12 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#3] -- vwsz1=vbuc1
sta xpos
sta xpos+1
//SEG16 [6] phi (signed word) yvel#12 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@2#4] -- vwsz1=vbuc1
lda #$64
lda #<$64
sta yvel_12
lda #0
lda #>$64
sta yvel_12+1
//SEG17 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
//SEG18 [6] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
@ -2684,9 +2684,9 @@ anim: {
bpl b2
//SEG39 [16] phi from anim::@3 to anim::@2 [phi:anim::@3->anim::@2]
//SEG40 [16] phi (signed word) yvel#4 = (byte/word/signed word/dword/signed dword) 200 [phi:anim::@3->anim::@2#0] -- vwsz1=vbuc1
lda #$c8
lda #<$c8
sta yvel
lda #0
lda #>$c8
sta yvel+1
//SEG41 anim::@2
b2:
@ -2698,7 +2698,7 @@ anim: {
//SEG43 [18] phi from anim::@2 to anim::@1 [phi:anim::@2->anim::@1]
//SEG44 [18] phi (signed word) yvel_init#11 = (signed word) yvel#4 [phi:anim::@2->anim::@1#0] -- register_copy
//SEG45 [18] phi (signed word) ypos#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:anim::@2->anim::@1#1] -- vwsz1=vbuc1
lda #0
lda #<0
sta ypos
sta ypos+1
//SEG46 [18] phi (signed word) xvel#10 = (signed word) xvel#14 [phi:anim::@2->anim::@1#2] -- register_copy
@ -2715,24 +2715,24 @@ anim: {
//SEG55 anim::@1
b1:
//SEG56 [19] (signed word) yvel#10 ← (signed word) yvel#9 + (const signed word) g#0 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ( main:2::anim:9 [ yvel#10 xvel#10 yvel_init#11 xpos#9 ypos#10 ] ) -- vwsz1=vwsz1_plus_vwsc1
lda yvel_10
clc
lda yvel_10
adc #<g
sta yvel_10
lda yvel_10+1
adc #>g
sta yvel_10+1
//SEG57 [20] (signed word) xpos#10 ← (signed word) xpos#9 + (signed word) xvel#10 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ( main:2::anim:9 [ yvel#10 xpos#10 xvel#10 yvel_init#11 ypos#10 ] ) -- vwsz1=vwsz1_plus_vwsz2
clc
lda xpos
clc
adc xvel
sta xpos
lda xpos+1
adc xvel+1
sta xpos+1
//SEG58 [21] (signed word) ypos#11 ← (signed word) ypos#10 + (signed word) yvel#10 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 ] ) -- vwsz1=vwsz1_plus_vwsz2
clc
lda ypos
clc
adc yvel_10
sta ypos
lda ypos+1
@ -2753,8 +2753,8 @@ anim: {
rol _10
rol _10+1
//SEG60 [23] (signed word) anim::sprite_x#0 ← (signed word~) anim::$10 + (byte/word/signed word/dword/signed dword) 160 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ( main:2::anim:9 [ yvel#10 xpos#10 ypos#11 xvel#10 yvel_init#11 anim::sprite_x#0 ] ) -- vwsz1=vwsz1_plus_vbuc1
lda sprite_x
clc
lda sprite_x
adc #<$a0
sta sprite_x
lda sprite_x+1

View File

@ -47,9 +47,9 @@ main: {
lda #>f_i
sta setMEMtoFAC.mem+1
jsr setMEMtoFAC
lda #$19
lda #<$19
sta setFAC.w
lda #0
lda #>$19
sta setFAC.w+1
jsr setFAC
jsr divMEMbyFAC

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@37
@37: scope:[] from @begin
to:@38
@38: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @37
@end: scope:[] from @38
[3] phi() [ ] ( )
main: scope:[main] from @37
main: scope:[main] from @38
[4] phi() [ ] ( main:2 [ ] )
[5] call setFAC param-assignment [ ] ( main:2 [ ] )
to:main::@3

View File

@ -76,6 +76,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -454,6 +463,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -770,6 +792,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -946,6 +978,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@6: scope:[] from @5
to:@7
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@7: scope:[] from @6
to:@8
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -956,8 +1007,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -965,8 +1016,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -984,10 +1035,10 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@9: scope:[] from @8
@10: scope:[] from @9
(byte*) memLo ← ((byte*)) (byte/word/signed word/dword/signed dword) 254
(byte*) memHi ← ((byte*)) (byte/word/signed word/dword/signed dword) 255
to:@10
to:@11
prepareMEM: scope:[prepareMEM] from
(byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem
*((byte*) memLo) ← (byte~) prepareMEM::$0
@ -997,8 +1048,8 @@ prepareMEM: scope:[prepareMEM] from
prepareMEM::@return: scope:[prepareMEM] from prepareMEM
return
to:@return
@10: scope:[] from @9
to:@11
@11: scope:[] from @10
to:@12
setFAC: scope:[setFAC] from
(byte*~) setFAC::$0 ← ((byte*)) (word) setFAC::w
(void~) setFAC::$1 ← call prepareMEM (byte*~) setFAC::$0
@ -1007,8 +1058,8 @@ setFAC: scope:[setFAC] from
setFAC::@return: scope:[setFAC] from setFAC
return
to:@return
@11: scope:[] from @10
to:@12
@12: scope:[] from @11
to:@13
getFAC: scope:[getFAC] from
asm { jsr$b1aa sty$fe sta$ff }
(word) getFAC::w ← { *((byte*) memHi), *((byte*) memLo) }
@ -1020,24 +1071,24 @@ getFAC::@return: scope:[getFAC] from getFAC getFAC::@1
to:@return
getFAC::@1: scope:[getFAC] from
to:getFAC::@return
@12: scope:[] from @11
to:@13
@13: scope:[] from @12
to:@14
setARGtoFAC: scope:[setARGtoFAC] from
asm { jsr$bc0f }
to:setARGtoFAC::@return
setARGtoFAC::@return: scope:[setARGtoFAC] from setARGtoFAC
return
to:@return
@13: scope:[] from @12
to:@14
@14: scope:[] from @13
to:@15
setFACtoARG: scope:[setFACtoARG] from
asm { jsr$bbfc }
to:setFACtoARG::@return
setFACtoARG::@return: scope:[setFACtoARG] from setFACtoARG
return
to:@return
@14: scope:[] from @13
to:@15
@15: scope:[] from @14
to:@16
setMEMtoFAC: scope:[setMEMtoFAC] from
(void~) setMEMtoFAC::$0 ← call prepareMEM (byte*) setMEMtoFAC::mem
asm { ldx$fe ldy$ff jsr$bbd4 }
@ -1045,8 +1096,8 @@ setMEMtoFAC: scope:[setMEMtoFAC] from
setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC
return
to:@return
@15: scope:[] from @14
to:@16
@16: scope:[] from @15
to:@17
setFACtoMEM: scope:[setFACtoMEM] from
(void~) setFACtoMEM::$0 ← call prepareMEM (byte*) setFACtoMEM::mem
asm { lda$fe ldy$ff jsr$bba2 }
@ -1054,24 +1105,24 @@ setFACtoMEM: scope:[setFACtoMEM] from
setFACtoMEM::@return: scope:[setFACtoMEM] from setFACtoMEM
return
to:@return
@16: scope:[] from @15
to:@17
@17: scope:[] from @16
to:@18
setFACtoPIhalf: scope:[setFACtoPIhalf] from
asm { lda#$e0 ldy#$e2 jsr$bba2 }
to:setFACtoPIhalf::@return
setFACtoPIhalf::@return: scope:[setFACtoPIhalf] from setFACtoPIhalf
return
to:@return
@17: scope:[] from @16
to:@18
@18: scope:[] from @17
to:@19
setFACto2PI: scope:[setFACto2PI] from
asm { lda#$e5 ldy#$e2 jsr$bba2 }
to:setFACto2PI::@return
setFACto2PI::@return: scope:[setFACto2PI] from setFACto2PI
return
to:@return
@18: scope:[] from @17
to:@19
@19: scope:[] from @18
to:@20
setARGtoMEM: scope:[setARGtoMEM] from
(void~) setARGtoMEM::$0 ← call prepareMEM (byte*) setARGtoMEM::mem
asm { lda$fe ldy$ff jsr$ba8c }
@ -1079,8 +1130,8 @@ setARGtoMEM: scope:[setARGtoMEM] from
setARGtoMEM::@return: scope:[setARGtoMEM] from setARGtoMEM
return
to:@return
@19: scope:[] from @18
to:@20
@20: scope:[] from @19
to:@21
addMEMtoFAC: scope:[addMEMtoFAC] from
(void~) addMEMtoFAC::$0 ← call prepareMEM (byte*) addMEMtoFAC::mem
asm { lda$fe ldy$ff jsr$b867 }
@ -1088,16 +1139,16 @@ addMEMtoFAC: scope:[addMEMtoFAC] from
addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC
return
to:@return
@20: scope:[] from @19
to:@21
@21: scope:[] from @20
to:@22
addARGtoFAC: scope:[addARGtoFAC] from
asm { jsr$b86a }
to:addARGtoFAC::@return
addARGtoFAC::@return: scope:[addARGtoFAC] from addARGtoFAC
return
to:@return
@21: scope:[] from @20
to:@22
@22: scope:[] from @21
to:@23
subFACfromMEM: scope:[subFACfromMEM] from
(void~) subFACfromMEM::$0 ← call prepareMEM (byte*) subFACfromMEM::mem
asm { lda$fe ldy$ff jsr$b850 }
@ -1105,16 +1156,16 @@ subFACfromMEM: scope:[subFACfromMEM] from
subFACfromMEM::@return: scope:[subFACfromMEM] from subFACfromMEM
return
to:@return
@22: scope:[] from @21
to:@23
@23: scope:[] from @22
to:@24
subFACfromARG: scope:[subFACfromARG] from
asm { jsr$b853 }
to:subFACfromARG::@return
subFACfromARG::@return: scope:[subFACfromARG] from subFACfromARG
return
to:@return
@23: scope:[] from @22
to:@24
@24: scope:[] from @23
to:@25
divMEMbyFAC: scope:[divMEMbyFAC] from
(void~) divMEMbyFAC::$0 ← call prepareMEM (byte*) divMEMbyFAC::mem
asm { lda$fe ldy$ff jsr$bb0f }
@ -1122,8 +1173,8 @@ divMEMbyFAC: scope:[divMEMbyFAC] from
divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC
return
to:@return
@24: scope:[] from @23
to:@25
@25: scope:[] from @24
to:@26
mulFACbyMEM: scope:[mulFACbyMEM] from
(void~) mulFACbyMEM::$0 ← call prepareMEM (byte*) mulFACbyMEM::mem
asm { lda$fe ldy$ff jsr$ba28 }
@ -1131,8 +1182,8 @@ mulFACbyMEM: scope:[mulFACbyMEM] from
mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM
return
to:@return
@25: scope:[] from @24
to:@26
@26: scope:[] from @25
to:@27
pwrMEMbyFAC: scope:[pwrMEMbyFAC] from
(void~) pwrMEMbyFAC::$0 ← call prepareMEM (byte*) pwrMEMbyFAC::mem
asm { lda$fe ldy$ff jsr$bf78 }
@ -1140,88 +1191,88 @@ pwrMEMbyFAC: scope:[pwrMEMbyFAC] from
pwrMEMbyFAC::@return: scope:[pwrMEMbyFAC] from pwrMEMbyFAC
return
to:@return
@26: scope:[] from @25
to:@27
@27: scope:[] from @26
to:@28
intFAC: scope:[intFAC] from
asm { jsr$bccc }
to:intFAC::@return
intFAC::@return: scope:[intFAC] from intFAC
return
to:@return
@27: scope:[] from @26
to:@28
@28: scope:[] from @27
to:@29
sinFAC: scope:[sinFAC] from
asm { jsr$e26b }
to:sinFAC::@return
sinFAC::@return: scope:[sinFAC] from sinFAC
return
to:@return
@28: scope:[] from @27
to:@29
@29: scope:[] from @28
to:@30
cosFAC: scope:[cosFAC] from
asm { jsr$e264 }
to:cosFAC::@return
cosFAC::@return: scope:[cosFAC] from cosFAC
return
to:@return
@29: scope:[] from @28
to:@30
@30: scope:[] from @29
to:@31
tanFAC: scope:[tanFAC] from
asm { jsr$e2b4 }
to:tanFAC::@return
tanFAC::@return: scope:[tanFAC] from tanFAC
return
to:@return
@30: scope:[] from @29
to:@31
@31: scope:[] from @30
to:@32
atnFAC: scope:[atnFAC] from
asm { jsr$e303 }
to:atnFAC::@return
atnFAC::@return: scope:[atnFAC] from atnFAC
return
to:@return
@31: scope:[] from @30
to:@32
@32: scope:[] from @31
to:@33
sqrFAC: scope:[sqrFAC] from
asm { jsr$bf71 }
to:sqrFAC::@return
sqrFAC::@return: scope:[sqrFAC] from sqrFAC
return
to:@return
@32: scope:[] from @31
to:@33
@33: scope:[] from @32
to:@34
expFAC: scope:[expFAC] from
asm { jsr$bfed }
to:expFAC::@return
expFAC::@return: scope:[expFAC] from expFAC
return
to:@return
@33: scope:[] from @32
to:@34
@34: scope:[] from @33
to:@35
logFAC: scope:[logFAC] from
asm { jsr$b9ea }
to:logFAC::@return
logFAC::@return: scope:[logFAC] from logFAC
return
to:@return
@34: scope:[] from @33
to:@35
@35: scope:[] from @34
to:@36
divFACby10: scope:[divFACby10] from
asm { jsr$bafe }
to:divFACby10::@return
divFACby10::@return: scope:[divFACby10] from divFACby10
return
to:@return
@35: scope:[] from @34
to:@36
@36: scope:[] from @35
to:@37
mulFACby10: scope:[mulFACby10] from
asm { jsr$bae2 }
to:mulFACby10::@return
mulFACby10::@return: scope:[mulFACby10] from mulFACby10
return
to:@return
@36: scope:[] from @35
to:@37
@37: scope:[] from @36
to:@38
main: scope:[main] from
(byte[]) main::f_i ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[]) main::f_127 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
@ -1253,15 +1304,15 @@ main::@2: scope:[main] from main::@1
main::@return: scope:[main] from main::@2
return
to:@return
@37: scope:[] from @36
@38: scope:[] from @37
call main
to:@end
@end: scope:[] from @37
@end: scope:[] from @38
Removing unused procedure print_str
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_sdword
Removing unused procedure print_cls
Removing unused procedure setARGtoFAC
Removing unused procedure setFACtoARG
@ -1281,6 +1332,7 @@ Removing unused procedure sqrFAC
Removing unused procedure expFAC
Removing unused procedure logFAC
Removing unused procedure mulFACby10
Removing unused procedure print_dword
Eliminating unused variable - keeping the call (void~) print_word::$1
Eliminating unused variable - keeping the call (void~) print_word::$3
Eliminating unused variable - keeping the call (void~) print_byte::$1
@ -1312,10 +1364,10 @@ Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @10
Removing empty block @9
Removing empty block @11
Removing empty block getFAC::@1
Removing empty block @12
Removing empty block getFAC::@1
Removing empty block @13
Removing empty block @14
Removing empty block @15
@ -1340,6 +1392,7 @@ Removing empty block @33
Removing empty block @34
Removing empty block @35
Removing empty block @36
Removing empty block @37
Removing empty block main::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
print_ln modifies line_cursor
@ -1372,7 +1425,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@9
to:@10
print_ln: scope:[print_ln] from main::@15
(byte*) char_cursor#29 ← phi( main::@15/(byte*) char_cursor#11 )
(byte*) line_cursor#12 ← phi( main::@15/(byte*) line_cursor#13 )
@ -1456,12 +1509,12 @@ print_char::@return: scope:[print_char] from print_char
(byte*) char_cursor#10 ← (byte*) char_cursor#24
return
to:@return
@9: scope:[] from @begin
@10: scope:[] from @begin
(byte*) line_cursor#16 ← phi( @begin/(byte*) line_cursor#0 )
(byte*) char_cursor#35 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) memLo#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 254
(byte*) memHi#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 255
to:@37
to:@38
prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC
(byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(byte*) prepareMEM::mem#2 divMEMbyFAC/(byte*) prepareMEM::mem#3 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 )
(byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5
@ -1550,9 +1603,9 @@ divFACby10: scope:[divFACby10] from main::@3
divFACby10::@return: scope:[divFACby10] from divFACby10
return
to:@return
main: scope:[main] from @37
(byte*) line_cursor#29 ← phi( @37/(byte*) line_cursor#14 )
(byte*) char_cursor#47 ← phi( @37/(byte*) char_cursor#33 )
main: scope:[main] from @38
(byte*) line_cursor#29 ← phi( @38/(byte*) line_cursor#14 )
(byte*) char_cursor#47 ← phi( @38/(byte*) char_cursor#33 )
(byte[]) main::f_i#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[]) main::f_127#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte*) main::f_2pi#0 ← ((byte*)) (word/dword/signed dword) 58085
@ -1671,23 +1724,23 @@ main::@return: scope:[main] from main::@16
(byte*) line_cursor#4 ← (byte*) line_cursor#10
return
to:@return
@37: scope:[] from @9
(byte*) line_cursor#14 ← phi( @9/(byte*) line_cursor#16 )
(byte*) char_cursor#33 ← phi( @9/(byte*) char_cursor#35 )
@38: scope:[] from @10
(byte*) line_cursor#14 ← phi( @10/(byte*) line_cursor#16 )
(byte*) char_cursor#33 ← phi( @10/(byte*) char_cursor#35 )
call main param-assignment
to:@38
@38: scope:[] from @37
(byte*) line_cursor#11 ← phi( @37/(byte*) line_cursor#4 )
(byte*) char_cursor#28 ← phi( @37/(byte*) char_cursor#13 )
to:@39
@39: scope:[] from @38
(byte*) line_cursor#11 ← phi( @38/(byte*) line_cursor#4 )
(byte*) char_cursor#28 ← phi( @38/(byte*) char_cursor#13 )
(byte*) char_cursor#14 ← (byte*) char_cursor#28
(byte*) line_cursor#5 ← (byte*) line_cursor#11
to:@end
@end: scope:[] from @38
@end: scope:[] from @39
SYMBOL TABLE SSA
(label) @37
(label) @10
(label) @38
(label) @9
(label) @39
(label) @begin
(label) @end
(byte*) SCREEN
@ -2068,9 +2121,9 @@ Succesful SSA optimization Pass2NopCastElimination
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_word::@2
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) main::@5
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: line_cursor#6 line_cursor#13
Not aliassing across scopes: print_byte::b#2 print_byte::b#0
@ -2139,12 +2192,12 @@ Constant inlined setMEMtoFAC::mem#0 = (const byte[]) main::f_127#0
Constant inlined mulFACbyMEM::mem#1 = (const byte[]) main::f_127#0
Constant inlined setFAC::w#0 = (word/signed word/dword/signed dword) 1275
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @37 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Block Sequence Planned @begin @38 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Added new block during phi lifting main::@17(between main::@16 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Block Sequence Planned @begin @37 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Block Sequence Planned @begin @38 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @37
Adding NOP phi() at start of @38
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -2215,9 +2268,9 @@ Coalesced [87] prepareMEM::mem#6 ← prepareMEM::mem#4
Coalesced [104] prepareMEM::mem#8 ← prepareMEM::mem#1
Coalesced down to 9 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Block Sequence Planned @begin @37 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Block Sequence Planned @begin @38 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @37
Adding NOP phi() at start of @38
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -2263,14 +2316,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@37
@37: scope:[] from @begin
to:@38
@38: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @37
@end: scope:[] from @38
[3] phi() [ ] ( )
main: scope:[main] from @37
main: scope:[main] from @38
[4] phi() [ ] ( main:2 [ ] )
[5] call setFAC param-assignment [ ] ( main:2 [ ] )
to:main::@3
@ -2471,59 +2524,59 @@ divFACby10::@return: scope:[divFACby10] from divFACby10
DOMINATORS
@begin dominated by @begin
@37 dominated by @begin @37
@end dominated by @end @begin @37
main dominated by main @begin @37
main::@3 dominated by main main::@3 @begin @37
main::@4 dominated by main main::@3 main::@4 @begin @37
main::@1 dominated by main main::@1 main::@3 main::@4 @begin @37
main::@6 dominated by main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@7 dominated by main::@7 main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@8 dominated by main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@9 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@10 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@10
main::@11 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10
main::@12 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@12
main::@13 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@return main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@1 main::@6 main::@3 main::@4 @begin @37 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_word dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_word::@return print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_byte dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_byte::@return print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char::@return dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 print_char::@return @begin @37 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
getFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 getFAC main::@11 main::@10 main::@13 main::@12
getFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 getFAC main::@11 main::@10 main::@13 main::@12 getFAC::@return
addMEMtoFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 addMEMtoFAC::@return main::@12
prepareMEM dominated by main @begin @37 prepareMEM
prepareMEM::@return dominated by main @begin @37 prepareMEM::@return prepareMEM
mulFACbyMEM dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @37
mulFACbyMEM::@1 dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @37 mulFACbyMEM::@1
mulFACbyMEM::@return dominated by main mulFACbyMEM::@return mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @37 mulFACbyMEM::@1
sinFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 sinFAC main::@10
sinFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 sinFAC sinFAC::@return main::@10
divMEMbyFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 divMEMbyFAC
divMEMbyFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 divMEMbyFAC::@1 divMEMbyFAC
divMEMbyFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 divMEMbyFAC::@1 divMEMbyFAC divMEMbyFAC::@return
setFAC dominated by main @begin @37 setFAC
setFAC::@1 dominated by main @begin @37 setFAC setFAC::@1
setFAC::@return dominated by setFAC::@return main @begin @37 setFAC setFAC::@1
setMEMtoFAC dominated by main main::@3 main::@4 @begin @37 setMEMtoFAC
setMEMtoFAC::@1 dominated by main main::@3 main::@4 @begin @37 setMEMtoFAC setMEMtoFAC::@1
setMEMtoFAC::@return dominated by main main::@3 main::@4 @begin @37 setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return
divFACby10 dominated by main main::@3 @begin @37 divFACby10
divFACby10::@return dominated by divFACby10::@return main main::@3 @begin @37 divFACby10
@38 dominated by @begin @38
@end dominated by @end @begin @38
main dominated by main @begin @38
main::@3 dominated by main main::@3 @begin @38
main::@4 dominated by main main::@3 main::@4 @begin @38
main::@1 dominated by main main::@1 main::@3 main::@4 @begin @38
main::@6 dominated by main main::@1 main::@6 main::@3 main::@4 @begin @38
main::@7 dominated by main::@7 main main::@1 main::@6 main::@3 main::@4 @begin @38
main::@8 dominated by main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38
main::@9 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38
main::@10 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@10
main::@11 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10
main::@12 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 main::@12
main::@13 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 main::@13 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 main::@13 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@return main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@1 main::@6 main::@3 main::@4 @begin @38 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_word dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @38 print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @38 print_word::@return print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_byte dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @38 print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @38 print_byte::@return print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 @begin @38 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char::@return dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 print_char::@return @begin @38 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
getFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 getFAC main::@11 main::@10 main::@13 main::@12
getFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 getFAC main::@11 main::@10 main::@13 main::@12 getFAC::@return
addMEMtoFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 addMEMtoFAC::@return main::@12
prepareMEM dominated by main @begin @38 prepareMEM
prepareMEM::@return dominated by main @begin @38 prepareMEM::@return prepareMEM
mulFACbyMEM dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @38
mulFACbyMEM::@1 dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @38 mulFACbyMEM::@1
mulFACbyMEM::@return dominated by main mulFACbyMEM::@return mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @38 mulFACbyMEM::@1
sinFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 sinFAC main::@10
sinFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 sinFAC sinFAC::@return main::@10
divMEMbyFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 divMEMbyFAC
divMEMbyFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 divMEMbyFAC::@1 divMEMbyFAC
divMEMbyFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @38 divMEMbyFAC::@1 divMEMbyFAC divMEMbyFAC::@return
setFAC dominated by main @begin @38 setFAC
setFAC::@1 dominated by main @begin @38 setFAC setFAC::@1
setFAC::@return dominated by setFAC::@return main @begin @38 setFAC setFAC::@1
setMEMtoFAC dominated by main main::@3 main::@4 @begin @38 setMEMtoFAC
setMEMtoFAC::@1 dominated by main main::@3 main::@4 @begin @38 setMEMtoFAC setMEMtoFAC::@1
setMEMtoFAC::@return dominated by main main::@3 main::@4 @begin @38 setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return
divFACby10 dominated by main main::@3 @begin @38 divFACby10
divFACby10::@return dominated by divFACby10::@return main main::@3 @begin @38 divFACby10
NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@17 blocks: null
@ -2687,17 +2740,17 @@ INITIAL ASM
.label char_cursor = 7
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @37 [phi:@begin->@37]
b37_from_bbegin:
jmp b37
//SEG4 @37
b37:
//SEG3 [1] phi from @begin to @38 [phi:@begin->@38]
b38_from_bbegin:
jmp b38
//SEG4 @38
b38:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @37 to main [phi:@37->main]
main_from_b37:
//SEG6 [4] phi from @38 to main [phi:@38->main]
main_from_b38:
jsr main
//SEG7 [3] phi from @37 to @end [phi:@37->@end]
bend_from_b37:
//SEG7 [3] phi from @38 to @end [phi:@38->@end]
bend_from_b38:
jmp bend
//SEG8 @end
bend:
@ -2800,9 +2853,9 @@ main: {
//SEG43 [84] phi from main::@8 to setFAC [phi:main::@8->setFAC]
setFAC_from_b8:
//SEG44 [84] phi (word) setFAC::w#3 = (byte/signed byte/word/signed word/dword/signed dword) 25 [phi:main::@8->setFAC#0] -- vwuz1=vbuc1
lda #$19
lda #<$19
sta setFAC.w
lda #0
lda #>$19
sta setFAC.w+1
jsr setFAC
//SEG45 [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
@ -3337,17 +3390,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label char_cursor = 5
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @37 [phi:@begin->@37]
b37_from_bbegin:
jmp b37
//SEG4 @37
b37:
//SEG3 [1] phi from @begin to @38 [phi:@begin->@38]
b38_from_bbegin:
jmp b38
//SEG4 @38
b38:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @37 to main [phi:@37->main]
main_from_b37:
//SEG6 [4] phi from @38 to main [phi:@38->main]
main_from_b38:
jsr main
//SEG7 [3] phi from @37 to @end [phi:@37->@end]
bend_from_b37:
//SEG7 [3] phi from @38 to @end [phi:@38->@end]
bend_from_b38:
jmp bend
//SEG8 @end
bend:
@ -3450,9 +3503,9 @@ main: {
//SEG43 [84] phi from main::@8 to setFAC [phi:main::@8->setFAC]
setFAC_from_b8:
//SEG44 [84] phi (word) setFAC::w#3 = (byte/signed byte/word/signed word/dword/signed dword) 25 [phi:main::@8->setFAC#0] -- vwuz1=vbuc1
lda #$19
lda #<$19
sta setFAC.w
lda #0
lda #>$19
sta setFAC.w+1
jsr setFAC
//SEG45 [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
@ -3840,7 +3893,7 @@ divFACby10: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b37
Removing instruction jmp b38
Removing instruction jmp bend
Removing instruction jmp b3
Removing instruction jmp b4
@ -3882,9 +3935,9 @@ Succesful ASM optimization Pass5NextJumpElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b37_from_bbegin:
Removing instruction main_from_b37:
Removing instruction bend_from_b37:
Removing instruction b38_from_bbegin:
Removing instruction main_from_b38:
Removing instruction bend_from_b38:
Removing instruction b3_from_main:
Removing instruction b4_from_b3:
Removing instruction setMEMtoFAC_from_b4:
@ -3907,7 +3960,7 @@ Removing instruction print_ln_from_b15:
Removing instruction b1_from_print_ln:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b37:
Removing instruction b38:
Removing instruction bend:
Removing instruction setFAC_from_main:
Removing instruction b3:
@ -3959,7 +4012,7 @@ Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
(label) @37
(label) @38
(label) @begin
(label) @end
(byte*) SCREEN
@ -4099,12 +4152,12 @@ Score: 4973
.label line_cursor = 3
.label char_cursor = 5
//SEG2 @begin
//SEG3 [1] phi from @begin to @37 [phi:@begin->@37]
//SEG4 @37
//SEG3 [1] phi from @begin to @38 [phi:@begin->@38]
//SEG4 @38
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @37 to main [phi:@37->main]
//SEG6 [4] phi from @38 to main [phi:@38->main]
jsr main
//SEG7 [3] phi from @37 to @end [phi:@37->@end]
//SEG7 [3] phi from @38 to @end [phi:@38->@end]
//SEG8 @end
//SEG9 main
main: {
@ -4182,9 +4235,9 @@ main: {
//SEG42 [18] call setFAC param-assignment [ main::i#10 char_cursor#32 line_cursor#13 ] ( main:2 [ main::i#10 char_cursor#32 line_cursor#13 ] )
//SEG43 [84] phi from main::@8 to setFAC [phi:main::@8->setFAC]
//SEG44 [84] phi (word) setFAC::w#3 = (byte/signed byte/word/signed word/dword/signed dword) 25 [phi:main::@8->setFAC#0] -- vwuz1=vbuc1
lda #$19
lda #<$19
sta setFAC.w
lda #0
lda #>$19
sta setFAC.w+1
jsr setFAC
//SEG45 [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9]

View File

@ -1,4 +1,4 @@
(label) @37
(label) @38
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -218,9 +218,9 @@ gen_sintab: {
lda #>f_amp
sta setMEMtoFAC.mem+1
jsr setMEMtoFAC
lda #2
lda #<2
sta setFAC.w
lda #0
lda #>2
sta setFAC.w+1
jsr setFAC
lda #<f_amp
@ -445,8 +445,8 @@ gen_chargen_sprite: {
rol _1+1
asl _1
rol _1+1
lda chargen
clc
lda chargen
adc #<CHARGEN
sta chargen
lda chargen+1

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@46
@46: scope:[] from @begin
to:@47
@47: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @46
@end: scope:[] from @47
[3] phi() [ ] ( )
main: scope:[main] from @46
main: scope:[main] from @47
[4] phi() [ ] ( main:2 [ ] )
[5] call init param-assignment [ ] ( main:2 [ ] )
to:main::@2

View File

@ -586,6 +586,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -885,6 +894,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -1457,6 +1479,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -1938,6 +1970,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@33: scope:[] from @32
to:@34
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@34: scope:[] from @33
to:@35
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -1948,8 +1999,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@34: scope:[] from @33
to:@35
@35: scope:[] from @34
to:@36
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -1957,8 +2008,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@35: scope:[] from @34
to:@36
@36: scope:[] from @35
to:@37
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -1976,13 +2027,13 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@36: scope:[] from @35
@37: scope:[] from @36
(byte) sinlen_x ← (byte/word/signed word/dword/signed dword) 221
(byte[221]) sintab_x ← { fill( 221, 0) }
(byte) sinlen_y ← (byte/word/signed word/dword/signed dword) 197
(byte[197]) sintab_y ← { fill( 197, 0) }
(byte*) sprites ← ((byte*)) (word/signed word/dword/signed dword) 8192
to:@37
to:@38
main: scope:[main] from
(void~) main::$0 ← call init
to:main::@1
@ -2001,8 +2052,8 @@ main::@4: scope:[main] from main::@3
main::@return: scope:[main] from main::@4
return
to:@return
@37: scope:[] from @36
to:@38
@38: scope:[] from @37
to:@39
init: scope:[init] from
(void~) init::$0 ← call clear_screen
(byte) init::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -2028,8 +2079,8 @@ init::@2: scope:[init] from init::@1
init::@return: scope:[init] from init::@2
return
to:@return
@38: scope:[] from @37
to:@39
@39: scope:[] from @38
to:@40
clear_screen: scope:[clear_screen] from
(byte*) clear_screen::sc ← (byte*) SCREEN
to:clear_screen::@1
@ -2045,10 +2096,10 @@ clear_screen::@2: scope:[clear_screen] from clear_screen::@1
clear_screen::@return: scope:[clear_screen] from clear_screen::@2
return
to:@return
@39: scope:[] from @38
@40: scope:[] from @39
(byte*) progress_cursor ← (byte*) SCREEN
(byte) progress_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@40
to:@41
progress_init: scope:[progress_init] from
(byte*) progress_cursor ← (byte*) progress_init::line
(byte) progress_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -2056,8 +2107,8 @@ progress_init: scope:[progress_init] from
progress_init::@return: scope:[progress_init] from progress_init
return
to:@return
@40: scope:[] from @39
to:@41
@41: scope:[] from @40
to:@42
progress_inc: scope:[progress_inc] from
(byte[]) progress_inc::progress_chars ← { (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 101, (byte/signed byte/word/signed word/dword/signed dword) 116, (byte/signed byte/word/signed word/dword/signed dword) 117, (byte/signed byte/word/signed word/dword/signed dword) 97, (byte/word/signed word/dword/signed dword) 246, (byte/word/signed word/dword/signed dword) 231, (byte/word/signed word/dword/signed dword) 234, (byte/word/signed word/dword/signed dword) 224 }
(byte) progress_idx ← ++ (byte) progress_idx
@ -2076,10 +2127,10 @@ progress_inc::@2: scope:[progress_inc] from progress_inc
progress_inc::@return: scope:[progress_inc] from progress_inc::@1
return
to:@return
@41: scope:[] from @40
@42: scope:[] from @41
(byte) sin_idx_x ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) sin_idx_y ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@42
to:@43
anim: scope:[anim] from
*((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL)
(byte) anim::xidx ← (byte) sin_idx_x
@ -2152,8 +2203,8 @@ anim::@10: scope:[anim] from anim::@4
anim::@return: scope:[anim] from anim::@5
return
to:@return
@42: scope:[] from @41
to:@43
@43: scope:[] from @42
to:@44
place_sprites: scope:[place_sprites] from
*((byte*) SPRITES_ENABLE) ← (byte/signed byte/word/signed word/dword/signed dword) 127
*((byte*) SPRITES_EXPAND_X) ← (byte/signed byte/word/signed word/dword/signed dword) 127
@ -2190,8 +2241,8 @@ place_sprites::@2: scope:[place_sprites] from place_sprites::@1
place_sprites::@return: scope:[place_sprites] from place_sprites::@2
return
to:@return
@43: scope:[] from @42
to:@44
@44: scope:[] from @43
to:@45
gen_sprites: scope:[gen_sprites] from
(byte[]) gen_sprites::cml ← (string) "camelot"
(byte*) gen_sprites::spr ← (byte*) sprites
@ -2210,8 +2261,8 @@ gen_sprites::@2: scope:[gen_sprites] from gen_sprites::@1
gen_sprites::@return: scope:[gen_sprites] from gen_sprites::@2
return
to:@return
@44: scope:[] from @43
to:@45
@45: scope:[] from @44
to:@46
gen_chargen_sprite: scope:[gen_chargen_sprite] from
(word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch
(word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3
@ -2283,8 +2334,8 @@ gen_chargen_sprite::@10: scope:[gen_chargen_sprite] from gen_chargen_sprite::@9
gen_chargen_sprite::@return: scope:[gen_chargen_sprite] from gen_chargen_sprite::@10
return
to:@return
@45: scope:[] from @44
to:@46
@46: scope:[] from @45
to:@47
gen_sintab: scope:[gen_sintab] from
(byte[]) gen_sintab::f_i ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[]) gen_sintab::f_min ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
@ -2330,10 +2381,10 @@ gen_sintab::@2: scope:[gen_sintab] from gen_sintab::@1
gen_sintab::@return: scope:[gen_sintab] from gen_sintab::@2
return
to:@return
@46: scope:[] from @45
@47: scope:[] from @46
call main
to:@end
@end: scope:[] from @46
@end: scope:[] from @47
Removing unused procedure setFACtoARG
Removing unused procedure setFACtoMEM
@ -2356,8 +2407,9 @@ Removing unused procedure print_str
Removing unused procedure print_ln
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_sdword
Removing unused procedure print_cls
Removing unused procedure print_dword
Removing unused procedure print_word
Removing unused procedure print_byte
Removing unused procedure print_char
@ -2456,17 +2508,18 @@ Removing empty block @32
Removing empty block @33
Removing empty block @34
Removing empty block @35
Removing empty block @36
Removing empty block main::@4
Removing empty block @37
Removing empty block @38
Removing empty block @39
Removing empty block clear_screen::@2
Removing empty block @40
Removing empty block @42
Removing empty block place_sprites::@2
Removing empty block @41
Removing empty block @43
Removing empty block gen_sprites::@2
Removing empty block place_sprites::@2
Removing empty block @44
Removing empty block gen_sprites::@2
Removing empty block @45
Removing empty block @46
Removing empty block gen_sintab::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
main modifies progress_cursor
@ -2621,19 +2674,19 @@ sinFAC::@return: scope:[sinFAC] from sinFAC
to:@return
@27: scope:[] from @begin
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@36
@36: scope:[] from @27
to:@37
@37: scope:[] from @27
(byte) sinlen_x#0 ← (byte/word/signed word/dword/signed dword) 221
(byte[221]) sintab_x#0 ← { fill( 221, 0) }
(byte) sinlen_y#0 ← (byte/word/signed word/dword/signed dword) 197
(byte[197]) sintab_y#0 ← { fill( 197, 0) }
(byte*) sprites#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
to:@39
main: scope:[main] from @46
(byte) sin_idx_y#24 ← phi( @46/(byte) sin_idx_y#17 )
(byte) sin_idx_x#26 ← phi( @46/(byte) sin_idx_x#16 )
(byte) progress_idx#30 ← phi( @46/(byte) progress_idx#35 )
(byte*) progress_cursor#29 ← phi( @46/(byte*) progress_cursor#35 )
to:@40
main: scope:[main] from @47
(byte) sin_idx_y#24 ← phi( @47/(byte) sin_idx_y#17 )
(byte) sin_idx_x#26 ← phi( @47/(byte) sin_idx_x#16 )
(byte) progress_idx#30 ← phi( @47/(byte) progress_idx#35 )
(byte*) progress_cursor#29 ← phi( @47/(byte*) progress_cursor#35 )
call init param-assignment
to:main::@5
main::@5: scope:[main] from main
@ -2785,10 +2838,10 @@ clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@1
clear_screen::@return: scope:[clear_screen] from clear_screen::@1
return
to:@return
@39: scope:[] from @36
@40: scope:[] from @37
(byte*) progress_cursor#7 ← (byte*) SCREEN#0
(byte) progress_idx#7 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@41
to:@42
progress_init: scope:[progress_init] from init::@5 init::@7
(byte*) progress_init::line#2 ← phi( init::@5/(byte*) progress_init::line#0 init::@7/(byte*) progress_init::line#1 )
(byte*) progress_cursor#8 ← (byte*) progress_init::line#2
@ -2828,12 +2881,12 @@ progress_inc::@return: scope:[progress_inc] from progress_inc::@1
(byte*) progress_cursor#11 ← (byte*) progress_cursor#25
return
to:@return
@41: scope:[] from @39
(byte) progress_idx#39 ← phi( @39/(byte) progress_idx#7 )
(byte*) progress_cursor#39 ← phi( @39/(byte*) progress_cursor#7 )
@42: scope:[] from @40
(byte) progress_idx#39 ← phi( @40/(byte) progress_idx#7 )
(byte*) progress_cursor#39 ← phi( @40/(byte*) progress_cursor#7 )
(byte) sin_idx_x#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) sin_idx_y#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@46
to:@47
anim: scope:[anim] from main::@3
(byte) sin_idx_y#9 ← phi( main::@3/(byte) sin_idx_y#13 )
(byte) sin_idx_x#9 ← phi( main::@3/(byte) sin_idx_x#13 )
@ -3393,32 +3446,32 @@ gen_sintab::@return: scope:[gen_sintab] from gen_sintab::@23
(byte*) progress_cursor#13 ← (byte*) progress_cursor#27
return
to:@return
@46: scope:[] from @41
(byte) sin_idx_y#17 ← phi( @41/(byte) sin_idx_y#2 )
(byte) sin_idx_x#16 ← phi( @41/(byte) sin_idx_x#2 )
(byte) progress_idx#35 ← phi( @41/(byte) progress_idx#39 )
(byte*) progress_cursor#35 ← phi( @41/(byte*) progress_cursor#39 )
@47: scope:[] from @42
(byte) sin_idx_y#17 ← phi( @42/(byte) sin_idx_y#2 )
(byte) sin_idx_x#16 ← phi( @42/(byte) sin_idx_x#2 )
(byte) progress_idx#35 ← phi( @42/(byte) progress_idx#39 )
(byte*) progress_cursor#35 ← phi( @42/(byte*) progress_cursor#39 )
call main param-assignment
to:@47
@47: scope:[] from @46
(byte) sin_idx_y#12 ← phi( @46/(byte) sin_idx_y#1 )
(byte) sin_idx_x#12 ← phi( @46/(byte) sin_idx_x#1 )
(byte) progress_idx#29 ← phi( @46/(byte) progress_idx#1 )
(byte*) progress_cursor#28 ← phi( @46/(byte*) progress_cursor#1 )
to:@48
@48: scope:[] from @47
(byte) sin_idx_y#12 ← phi( @47/(byte) sin_idx_y#1 )
(byte) sin_idx_x#12 ← phi( @47/(byte) sin_idx_x#1 )
(byte) progress_idx#29 ← phi( @47/(byte) progress_idx#1 )
(byte*) progress_cursor#28 ← phi( @47/(byte*) progress_cursor#1 )
(byte*) progress_cursor#14 ← (byte*) progress_cursor#28
(byte) progress_idx#15 ← (byte) progress_idx#29
(byte) sin_idx_x#6 ← (byte) sin_idx_x#12
(byte) sin_idx_y#6 ← (byte) sin_idx_y#12
to:@end
@end: scope:[] from @47
@end: scope:[] from @48
SYMBOL TABLE SSA
(label) @27
(label) @36
(label) @39
(label) @41
(label) @46
(label) @37
(label) @40
(label) @42
(label) @47
(label) @48
(label) @begin
(label) @end
(byte*) BORDERCOL
@ -4718,18 +4771,18 @@ Succesful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#5
Succesful SSA optimization Pass2NopCastElimination
Culled Empty Block (label) @27
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@1
Culled Empty Block (label) init::@3
Culled Empty Block (label) init::@10
Culled Empty Block (label) @39
Culled Empty Block (label) @41
Culled Empty Block (label) @40
Culled Empty Block (label) @42
Not culling empty block because it shares successor with its predecessor. (label) anim::@9
Not culling empty block because it shares successor with its predecessor. (label) anim::@10
Not culling empty block because it shares successor with its predecessor. (label) gen_chargen_sprite::@6
Culled Empty Block (label) gen_sintab::@13
Culled Empty Block (label) @47
Culled Empty Block (label) @48
Succesful SSA optimization Pass2CullEmptyBlocks
Not culling empty block because it shares successor with its predecessor. (label) anim::@9
Not culling empty block because it shares successor with its predecessor. (label) anim::@10
@ -4989,7 +5042,7 @@ Constant inlined progress_idx#11 = (byte/signed byte/word/signed word/dword/sign
Constant inlined gen_sprites::$3 = (const string) gen_sprites::cml#0
Constant inlined anim::j2#0 = (byte/signed byte/word/signed word/dword/signed dword) 12
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @46 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Block Sequence Planned @begin @47 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Added new block during phi lifting main::@7(between main::@6 and main::@2)
Added new block during phi lifting anim::@11(between anim::@3 and anim::@1)
Added new block during phi lifting anim::@12(between anim::@1 and anim::@2)
@ -5006,9 +5059,9 @@ Added new block during phi lifting gen_chargen_sprite::@12(between gen_chargen_s
Added new block during phi lifting gen_chargen_sprite::@13(between gen_chargen_sprite::@5 and gen_chargen_sprite::@4)
Added new block during phi lifting gen_chargen_sprite::@14(between gen_chargen_sprite::@4 and gen_chargen_sprite::@5)
Added new block during phi lifting place_sprites::@3(between place_sprites::@1 and place_sprites::@1)
Block Sequence Planned @begin @46 @end main main::@2 main::@3 main::@6 main::@return main::@7 anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return anim::@15 anim::@14 anim::@11 anim::@13 anim::@12 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return init::@11 clear_screen clear_screen::@1 clear_screen::@return clear_screen::@3 gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return gen_sintab::@24 progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return progress_inc::@3 getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_sprites::@4 gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@11 gen_chargen_sprite::@12 gen_chargen_sprite::@13 gen_chargen_sprite::@14 place_sprites place_sprites::@1 place_sprites::@return place_sprites::@3
Block Sequence Planned @begin @47 @end main main::@2 main::@3 main::@6 main::@return main::@7 anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return anim::@15 anim::@14 anim::@11 anim::@13 anim::@12 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return init::@11 clear_screen clear_screen::@1 clear_screen::@return clear_screen::@3 gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return gen_sintab::@24 progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return progress_inc::@3 getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_sprites::@4 gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@11 gen_chargen_sprite::@12 gen_chargen_sprite::@13 gen_chargen_sprite::@14 place_sprites place_sprites::@1 place_sprites::@return place_sprites::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @46
Adding NOP phi() at start of @47
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -5187,9 +5240,9 @@ Culled Empty Block (label) gen_chargen_sprite::@12
Culled Empty Block (label) gen_chargen_sprite::@13
Culled Empty Block (label) gen_chargen_sprite::@14
Culled Empty Block (label) place_sprites::@3
Block Sequence Planned @begin @46 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@4 anim::@5 anim::@return anim::@15 anim::@14 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Block Sequence Planned @begin @47 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@4 anim::@5 anim::@return anim::@15 anim::@14 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @46
Adding NOP phi() at start of @47
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -5273,14 +5326,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@46
@46: scope:[] from @begin
to:@47
@47: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @46
@end: scope:[] from @47
[3] phi() [ ] ( )
main: scope:[main] from @46
main: scope:[main] from @47
[4] phi() [ ] ( main:2 [ ] )
[5] call init param-assignment [ ] ( main:2 [ ] )
to:main::@2
@ -5742,111 +5795,111 @@ place_sprites::@return: scope:[place_sprites] from place_sprites::@1
DOMINATORS
@begin dominated by @begin
@46 dominated by @begin @46
@end dominated by @end @begin @46
main dominated by main @begin @46
main::@2 dominated by main::@2 main @begin @46
main::@3 dominated by main::@2 main::@3 main @begin @46
main::@6 dominated by main::@2 main::@6 main::@3 main @begin @46
main::@return dominated by main::@2 main::@6 main::@3 main::@return main @begin @46
anim dominated by main::@2 main::@3 anim main @begin @46
anim::@1 dominated by main::@2 main::@3 anim anim::@1 main @begin @46
anim::@6 dominated by main::@2 main::@3 anim anim::@6 anim::@1 main @begin @46
anim::@2 dominated by main::@2 main::@3 anim anim::@2 anim::@1 main @begin @46
anim::@7 dominated by main::@2 main::@3 anim anim::@2 anim::@1 anim::@7 main @begin @46
anim::@3 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 main @begin @46
anim::@8 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46
anim::@4 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46
anim::@5 dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46
anim::@return dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 anim::@return main @begin @46
anim::@15 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46 anim::@15
anim::@14 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46 anim::@14
init dominated by init main @begin @46
init::@1 dominated by init main @begin init::@1 @46
init::@2 dominated by init main @begin init::@2 init::@1 @46
init::@4 dominated by init main @begin init::@2 init::@1 init::@4 @46
init::@5 dominated by init main @begin init::@2 init::@1 init::@5 init::@4 @46
init::@6 dominated by init main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
init::@7 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 @46
init::@8 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@8 @46
init::@9 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @46
init::@return dominated by init main @begin init::@return init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @46
clear_screen dominated by init clear_screen main @begin @46
clear_screen::@1 dominated by init clear_screen main @begin @46 clear_screen::@1
clear_screen::@return dominated by init clear_screen main @begin @46 clear_screen::@1 clear_screen::@return
gen_sintab dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
gen_sintab::@3 dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@4 dominated by init gen_sintab main gen_sintab::@4 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@5 dominated by init gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@6 dominated by init gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@7 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@8 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@9 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@10 dominated by gen_sintab::@10 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@11 dominated by gen_sintab::@10 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@12 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@14 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@15 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@16 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@17 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@18 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@19 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@20 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@21 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@22 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@23 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 gen_sintab::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc::@2 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@2 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 progress_inc::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
getFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
getFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1 getFAC::@return
addMEMtoFAC dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
addMEMtoFAC::@1 dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
addMEMtoFAC::@return dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC addMEMtoFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
prepareMEM dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
prepareMEM::@return dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 prepareMEM::@return
mulFACbyMEM dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM::@return mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
sinFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
sinFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC sinFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
divMEMbyFAC dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@1 dominated by init divMEMbyFAC::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@return dominated by init divMEMbyFAC::@1 divMEMbyFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 divMEMbyFAC gen_sintab::@3
setFAC dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
setFAC::@1 dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 setFAC::@1
setFAC::@return dominated by setFAC::@return init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 setFAC::@1
setMEMtoFAC dominated by init setMEMtoFAC gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
setMEMtoFAC::@1 dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
setMEMtoFAC::@return dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 setMEMtoFAC::@return gen_sintab::@3
subFACfromARG dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
subFACfromARG::@return dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 subFACfromARG::@return gen_sintab::@3
setARGtoFAC dominated by setARGtoFAC init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
setARGtoFAC::@return dominated by setARGtoFAC init gen_sintab main setARGtoFAC::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
progress_init dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @46
progress_init::@return dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @46 progress_init::@return
gen_sprites dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 @46
gen_sprites::@1 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_sprites::@3 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46 gen_sprites::@3
gen_sprites::@return dominated by init main gen_sprites::@return @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46 gen_sprites::@3
gen_chargen_sprite dominated by init gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@1 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@2 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@6 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@3 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@4 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@7 dominated by init gen_chargen_sprite::@7 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@5 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@8 dominated by init gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@9 dominated by init gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@10 dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@return dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
place_sprites dominated by init main @begin init::@2 init::@1 @46 place_sprites
place_sprites::@1 dominated by init place_sprites::@1 main @begin init::@2 init::@1 @46 place_sprites
place_sprites::@return dominated by init place_sprites::@return place_sprites::@1 main @begin init::@2 init::@1 @46 place_sprites
@47 dominated by @begin @47
@end dominated by @end @begin @47
main dominated by main @begin @47
main::@2 dominated by main::@2 main @begin @47
main::@3 dominated by main::@2 main::@3 main @begin @47
main::@6 dominated by main::@2 main::@6 main::@3 main @begin @47
main::@return dominated by main::@2 main::@6 main::@3 main::@return main @begin @47
anim dominated by main::@2 main::@3 anim main @begin @47
anim::@1 dominated by main::@2 main::@3 anim anim::@1 main @begin @47
anim::@6 dominated by main::@2 main::@3 anim anim::@6 anim::@1 main @begin @47
anim::@2 dominated by main::@2 main::@3 anim anim::@2 anim::@1 main @begin @47
anim::@7 dominated by main::@2 main::@3 anim anim::@2 anim::@1 anim::@7 main @begin @47
anim::@3 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 main @begin @47
anim::@8 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @47
anim::@4 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @47
anim::@5 dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @47
anim::@return dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 anim::@return main @begin @47
anim::@15 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @47 anim::@15
anim::@14 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @47 anim::@14
init dominated by init main @begin @47
init::@1 dominated by init main @begin init::@1 @47
init::@2 dominated by init main @begin init::@2 init::@1 @47
init::@4 dominated by init main @begin init::@2 init::@1 init::@4 @47
init::@5 dominated by init main @begin init::@2 init::@1 init::@5 init::@4 @47
init::@6 dominated by init main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47
init::@7 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 @47
init::@8 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@8 @47
init::@9 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @47
init::@return dominated by init main @begin init::@return init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @47
clear_screen dominated by init clear_screen main @begin @47
clear_screen::@1 dominated by init clear_screen main @begin @47 clear_screen::@1
clear_screen::@return dominated by init clear_screen main @begin @47 clear_screen::@1 clear_screen::@return
gen_sintab dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47
gen_sintab::@3 dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@4 dominated by init gen_sintab main gen_sintab::@4 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@5 dominated by init gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@6 dominated by init gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@7 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@8 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@9 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@10 dominated by gen_sintab::@10 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@11 dominated by gen_sintab::@10 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@12 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
gen_sintab::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@14 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@15 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@16 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@17 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@18 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@19 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@20 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@21 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@22 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@23 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
gen_sintab::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 gen_sintab::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
progress_inc dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
progress_inc::@2 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@2 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
progress_inc::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
progress_inc::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 progress_inc::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
getFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
getFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1 getFAC::@return
addMEMtoFAC dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
addMEMtoFAC::@1 dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
addMEMtoFAC::@return dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC addMEMtoFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
prepareMEM dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47
prepareMEM::@return dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 prepareMEM::@return
mulFACbyMEM dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM::@return mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
sinFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
sinFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC sinFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3 gen_sintab::@1
divMEMbyFAC dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@1 dominated by init divMEMbyFAC::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@return dominated by init divMEMbyFAC::@1 divMEMbyFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 divMEMbyFAC gen_sintab::@3
setFAC dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47
setFAC::@1 dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 setFAC::@1
setFAC::@return dominated by setFAC::@return init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 setFAC::@1
setMEMtoFAC dominated by init setMEMtoFAC gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
setMEMtoFAC::@1 dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
setMEMtoFAC::@return dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 setMEMtoFAC::@return gen_sintab::@3
subFACfromARG dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
subFACfromARG::@return dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 subFACfromARG::@return gen_sintab::@3
setARGtoFAC dominated by setARGtoFAC init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
setARGtoFAC::@return dominated by setARGtoFAC init gen_sintab main setARGtoFAC::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @47 gen_sintab::@3
progress_init dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @47
progress_init::@return dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @47 progress_init::@return
gen_sprites dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 @47
gen_sprites::@1 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_sprites::@3 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 gen_sprites::@3 @47
gen_sprites::@return dominated by init main gen_sprites::@return @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 gen_sprites::@3 @47
gen_chargen_sprite dominated by init gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@1 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@2 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@6 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@3 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@4 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@7 dominated by init gen_chargen_sprite::@7 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@5 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@8 dominated by init gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@9 dominated by init gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@10 dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
gen_chargen_sprite::@return dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @47
place_sprites dominated by init main @begin init::@2 init::@1 @47 place_sprites
place_sprites::@1 dominated by init place_sprites::@1 main @begin init::@2 init::@1 @47 place_sprites
place_sprites::@return dominated by init place_sprites::@return place_sprites::@1 main @begin init::@2 init::@1 @47 place_sprites
NATURAL LOOPS
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
@ -6326,17 +6379,17 @@ INITIAL ASM
.label sin_idx_y = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @46 [phi:@begin->@46]
b46_from_bbegin:
jmp b46
//SEG4 @46
b46:
//SEG3 [1] phi from @begin to @47 [phi:@begin->@47]
b47_from_bbegin:
jmp b47
//SEG4 @47
b47:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @46 to main [phi:@46->main]
main_from_b46:
//SEG6 [4] phi from @47 to main [phi:@47->main]
main_from_b47:
jsr main
//SEG7 [3] phi from @46 to @end [phi:@46->@end]
bend_from_b46:
//SEG7 [3] phi from @47 to @end [phi:@47->@end]
bend_from_b47:
jmp bend
//SEG8 @end
bend:
@ -6848,9 +6901,9 @@ gen_sintab: {
//SEG184 [157] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC]
setFAC_from_b8:
//SEG185 [157] phi (word) setFAC::w#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1
lda #2
lda #<2
sta setFAC.w
lda #0
lda #>2
sta setFAC.w+1
jsr setFAC
//SEG186 [89] phi from gen_sintab::@8 to gen_sintab::@9 [phi:gen_sintab::@8->gen_sintab::@9]
@ -8087,17 +8140,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label sin_idx_y = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @46 [phi:@begin->@46]
b46_from_bbegin:
jmp b46
//SEG4 @46
b46:
//SEG3 [1] phi from @begin to @47 [phi:@begin->@47]
b47_from_bbegin:
jmp b47
//SEG4 @47
b47:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @46 to main [phi:@46->main]
main_from_b46:
//SEG6 [4] phi from @47 to main [phi:@47->main]
main_from_b47:
jsr main
//SEG7 [3] phi from @46 to @end [phi:@46->@end]
bend_from_b46:
//SEG7 [3] phi from @47 to @end [phi:@47->@end]
bend_from_b47:
jmp bend
//SEG8 @end
bend:
@ -8588,9 +8641,9 @@ gen_sintab: {
//SEG184 [157] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC]
setFAC_from_b8:
//SEG185 [157] phi (word) setFAC::w#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1
lda #2
lda #<2
sta setFAC.w
lda #0
lda #>2
sta setFAC.w+1
jsr setFAC
//SEG186 [89] phi from gen_sintab::@8 to gen_sintab::@9 [phi:gen_sintab::@8->gen_sintab::@9]
@ -9121,8 +9174,8 @@ gen_chargen_sprite: {
asl _1
rol _1+1
//SEG374 [184] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda chargen
clc
lda chargen
adc #<CHARGEN
sta chargen
lda chargen+1
@ -9394,7 +9447,7 @@ place_sprites: {
sintab_y: .fill $c5, 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b46
Removing instruction jmp b47
Removing instruction jmp bend
Removing instruction jmp b2
Removing instruction jmp b3
@ -9514,9 +9567,9 @@ Replacing label b2_from_b8 with b2
Replacing label b1_from_b9 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b46_from_bbegin:
Removing instruction main_from_b46:
Removing instruction bend_from_b46:
Removing instruction b47_from_bbegin:
Removing instruction main_from_b47:
Removing instruction bend_from_b47:
Removing instruction b2_from_b6:
Removing instruction b3_from_b2:
Removing instruction b1_from_b3:
@ -9583,7 +9636,7 @@ Removing instruction b4_from_b5:
Removing instruction b5_from_b4:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b46:
Removing instruction b47:
Removing instruction bend:
Removing instruction init_from_main:
Removing instruction b2_from_main:
@ -9712,7 +9765,7 @@ Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @46
(label) @47
(label) @begin
(label) @end
(byte*) BORDERCOL
@ -10085,12 +10138,12 @@ Score: 767890
.label sin_idx_x = 2
.label sin_idx_y = 3
//SEG2 @begin
//SEG3 [1] phi from @begin to @46 [phi:@begin->@46]
//SEG4 @46
//SEG3 [1] phi from @begin to @47 [phi:@begin->@47]
//SEG4 @47
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @46 to main [phi:@46->main]
//SEG6 [4] phi from @47 to main [phi:@47->main]
jsr main
//SEG7 [3] phi from @46 to @end [phi:@46->@end]
//SEG7 [3] phi from @47 to @end [phi:@47->@end]
//SEG8 @end
//SEG9 main
main: {
@ -10464,9 +10517,9 @@ gen_sintab: {
//SEG183 [88] call setFAC param-assignment [ gen_sintab::length#10 gen_sintab::sintab#12 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::length#10 gen_sintab::sintab#12 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::length#10 gen_sintab::sintab#12 progress_init::line#2 ] )
//SEG184 [157] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC]
//SEG185 [157] phi (word) setFAC::w#5 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1
lda #2
lda #<2
sta setFAC.w
lda #0
lda #>2
sta setFAC.w+1
jsr setFAC
//SEG186 [89] phi from gen_sintab::@8 to gen_sintab::@9 [phi:gen_sintab::@8->gen_sintab::@9]
@ -10887,8 +10940,8 @@ gen_chargen_sprite: {
asl _1
rol _1+1
//SEG374 [184] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda chargen
clc
lda chargen
adc #<CHARGEN
sta chargen
lda chargen+1

View File

@ -1,4 +1,4 @@
(label) @46
(label) @47
(label) @begin
(label) @end
(byte*) BORDERCOL

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@11
@11: scope:[] from @begin
to:@12
@12: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @11
@end: scope:[] from @12
[3] phi() [ ] ( )
main: scope:[main] from @11
main: scope:[main] from @12
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -103,6 +103,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -202,6 +211,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -546,6 +568,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -690,6 +722,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@6: scope:[] from @5
to:@7
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@7: scope:[] from @6
to:@8
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -700,8 +751,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -709,8 +760,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -728,8 +779,8 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@9: scope:[] from @8
to:@10
@10: scope:[] from @9
to:@11
main: scope:[main] from
(void~) main::$0 ← call print_cls
(byte) main::a ← (byte/signed byte/word/signed word/dword/signed dword) 7
@ -960,8 +1011,8 @@ main::@44: scope:[main] from main::@22
main::@return: scope:[main] from main::@44
return
to:@return
@10: scope:[] from @9
to:@11
@11: scope:[] from @10
to:@12
printu: scope:[printu] from
(void~) printu::$0 ← call print_char (byte) ' '
(void~) printu::$1 ← call print_byte (byte) printu::a
@ -973,13 +1024,14 @@ printu: scope:[printu] from
printu::@return: scope:[printu] from printu
return
to:@return
@11: scope:[] from @10
@12: scope:[] from @11
call main
to:@end
@end: scope:[] from @11
@end: scope:[] from @12
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_sdword
Removing unused procedure print_dword
Removing unused procedure print_word
Eliminating unused variable - keeping the call (void~) print_byte::$1
@ -1050,9 +1102,10 @@ Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @9
Removing empty block @10
Removing empty block main::@43
Removing empty block main::@44
Removing empty block @10
Removing empty block @11
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
print_ln modifies line_cursor
@ -1081,7 +1134,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@11
to:@12
print_str: scope:[print_str] from printu::@2
(byte*) char_cursor#119 ← phi( printu::@2/(byte*) char_cursor#40 )
(byte*) print_str::str#4 ← phi( printu::@2/(byte*) print_str::str#1 )
@ -1185,9 +1238,9 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#11 ← (byte*) char_cursor#56
return
to:@return
main: scope:[main] from @11
(byte*) char_cursor#96 ← phi( @11/(byte*) char_cursor#118 )
(byte*) line_cursor#26 ← phi( @11/(byte*) line_cursor#33 )
main: scope:[main] from @12
(byte*) char_cursor#96 ← phi( @12/(byte*) char_cursor#118 )
(byte*) line_cursor#26 ← phi( @12/(byte*) line_cursor#33 )
call print_cls param-assignment
to:main::@45
main::@45: scope:[main] from main
@ -1982,22 +2035,22 @@ printu::@return: scope:[printu] from printu::@6
(byte*) char_cursor#45 ← (byte*) char_cursor#90
return
to:@return
@11: scope:[] from @begin
@12: scope:[] from @begin
(byte*) char_cursor#118 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#33 ← phi( @begin/(byte*) line_cursor#0 )
call main param-assignment
to:@12
@12: scope:[] from @11
(byte*) char_cursor#91 ← phi( @11/(byte*) char_cursor#38 )
(byte*) line_cursor#24 ← phi( @11/(byte*) line_cursor#11 )
to:@13
@13: scope:[] from @12
(byte*) char_cursor#91 ← phi( @12/(byte*) char_cursor#38 )
(byte*) line_cursor#24 ← phi( @12/(byte*) line_cursor#11 )
(byte*) line_cursor#12 ← (byte*) line_cursor#24
(byte*) char_cursor#46 ← (byte*) char_cursor#91
to:@end
@end: scope:[] from @12
@end: scope:[] from @13
SYMBOL TABLE SSA
(label) @11
(label) @12
(label) @13
(label) @begin
(label) @end
(byte*) SCREEN
@ -3501,7 +3554,7 @@ Not culling empty block because it shares successor with its predecessor. (label
Not culling empty block because it shares successor with its predecessor. (label) main::@41
Not culling empty block because it shares successor with its predecessor. (label) main::@42
Culled Empty Block (label) printu::@6
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Succesful SSA optimization Pass2CullEmptyBlocks
Not culling empty block because it shares successor with its predecessor. (label) main::@23
Not culling empty block because it shares successor with its predecessor. (label) main::@24
@ -6230,13 +6283,13 @@ Constant inlined printu::op#16 = (const string) main::op16
Constant inlined main::r#25 = (byte) '-'
Constant inlined print_byte::$4 = (const string) print_byte::hextab#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @11 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @12 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting main::@71(between main::@70 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @11 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return print_ln::@3 printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @12 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return print_ln::@3 printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @11
Adding NOP phi() at start of @12
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@23
@ -6434,9 +6487,9 @@ Not culling empty block because it shares successor with its predecessor. (label
Not culling empty block because it shares successor with its predecessor. (label) main::@42
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @11 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @12 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @11
Adding NOP phi() at start of @12
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@23
@ -6498,14 +6551,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@11
@11: scope:[] from @begin
to:@12
@12: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @11
@end: scope:[] from @12
[3] phi() [ ] ( )
main: scope:[main] from @11
main: scope:[main] from @12
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -6904,100 +6957,100 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@11 dominated by @begin @11
@end dominated by @end @begin @11
main dominated by main @begin @11
main::@1 dominated by main main::@1 @begin @11
main::@23 dominated by main main::@1 @begin main::@23 @11
main::@2 dominated by main main::@1 main::@2 @begin @11
main::@46 dominated by main main::@46 main::@1 main::@2 @begin @11
main::@24 dominated by main main::@46 main::@1 main::@2 @begin main::@24 @11
main::@3 dominated by main main::@46 main::@1 main::@2 main::@3 @begin @11
main::@47 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin @11
main::@25 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin main::@25 @11
main::@4 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @11
main::@48 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @11
main::@26 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin main::@26 @11
main::@5 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @11
main::@49 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @11
main::@50 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @11 main::@50
main::@27 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin main::@27 @11 main::@50
main::@6 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@50
main::@51 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@51 main::@50
main::@28 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@28 @11 main::@51 main::@50
main::@7 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@51 main::@50
main::@52 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@52 main::@51 main::@50
main::@29 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@29 @11 main::@52 main::@51 main::@50
main::@8 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@52 main::@51 main::@50
main::@53 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@51 main::@50
main::@30 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@30 @begin @11 main::@53 main::@52 main::@51 main::@50
main::@9 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@51 main::@50
main::@54 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@54 main::@51 main::@50
main::@55 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@51 main::@50
main::@31 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@51 main::@50
main::@10 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50
main::@56 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@32 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@32 @11 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@11 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@56
main::@57 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@33 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@33 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@12 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12
main::@58 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@34 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@34 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@13 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@58
main::@59 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@60 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@35 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@35 main::@60 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@14 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@61 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@36 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@36 main::@60 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@62 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@37 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@37 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@63 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@38 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@38 main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@64 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@65 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@39 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@39 main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@66 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@40 dominated by main::@9 main::@7 main::@8 main::@40 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@19 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@67 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@41 dominated by main::@9 main::@41 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@20 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@68 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@42 dominated by main::@9 main::@42 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@21 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@69 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@70 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@22 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@return main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@71 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@71 main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
print_ln dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @11
print_ln::@1 dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @11
print_ln::@return dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 print_ln::@return main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @11
printu dominated by main main::@1 main::@2 @begin @11 printu
printu::@1 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu
printu::@2 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@2 printu
printu::@3 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@3 printu::@2 printu
printu::@4 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@3 printu::@2 printu::@4 printu
printu::@5 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
printu::@return dominated by main main::@1 main::@2 printu::@return @begin @11 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
print_char dominated by main print_char main::@1 main::@2 @begin @11 printu
print_char::@return dominated by main print_char main::@1 main::@2 print_char::@return @begin @11 printu
print_byte dominated by main main::@1 main::@2 @begin @11 print_byte printu::@1 printu
print_byte::@1 dominated by main main::@1 main::@2 @begin print_byte::@1 @11 print_byte printu::@1 printu
print_byte::@return dominated by main main::@1 main::@2 @begin print_byte::@return print_byte::@1 @11 print_byte printu::@1 printu
print_str dominated by main main::@1 main::@2 @begin @11 print_str printu::@1 printu::@2 printu
print_str::@1 dominated by main main::@1 main::@2 @begin print_str::@1 @11 print_str printu::@1 printu::@2 printu
print_str::@return dominated by main main::@1 main::@2 @begin print_str::@return print_str::@1 @11 print_str printu::@1 printu::@2 printu
print_str::@2 dominated by main main::@1 main::@2 @begin print_str::@1 print_str::@2 @11 print_str printu::@1 printu::@2 printu
print_cls dominated by main @begin @11 print_cls
print_cls::@1 dominated by main @begin @11 print_cls::@1 print_cls
print_cls::@return dominated by main @begin print_cls::@return @11 print_cls::@1 print_cls
@12 dominated by @begin @12
@end dominated by @end @begin @12
main dominated by main @begin @12
main::@1 dominated by main main::@1 @begin @12
main::@23 dominated by main main::@1 @begin main::@23 @12
main::@2 dominated by main main::@1 main::@2 @begin @12
main::@46 dominated by main main::@46 main::@1 main::@2 @begin @12
main::@24 dominated by main main::@46 main::@1 main::@2 @begin main::@24 @12
main::@3 dominated by main main::@46 main::@1 main::@2 main::@3 @begin @12
main::@47 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin @12
main::@25 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin main::@25 @12
main::@4 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @12
main::@48 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @12
main::@26 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin main::@26 @12
main::@5 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @12
main::@49 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @12
main::@50 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @12 main::@50
main::@27 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin main::@27 @12 main::@50
main::@6 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @12 main::@50
main::@51 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @12 main::@51 main::@50
main::@28 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@28 @12 main::@51 main::@50
main::@7 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @12 main::@51 main::@50
main::@52 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @12 main::@52 main::@51 main::@50
main::@29 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@29 @12 main::@52 main::@51 main::@50
main::@8 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @12 main::@52 main::@51 main::@50
main::@53 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@51 main::@50
main::@30 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@30 @begin main::@53 @12 main::@52 main::@51 main::@50
main::@9 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@51 main::@50
main::@54 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@54 main::@51 main::@50
main::@55 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@54 main::@51 main::@50
main::@31 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 @begin main::@53 @12 main::@52 main::@55 main::@54 main::@51 main::@50
main::@10 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50
main::@56 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@32 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@32 main::@53 @12 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@11 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@56
main::@57 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@33 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@33 @begin main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@12 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12
main::@58 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@34 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@34 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@13 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@58
main::@59 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@60 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@35 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@35 main::@60 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@14 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@61 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@36 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@36 main::@60 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@62 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@37 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@37 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@63 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@38 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@38 main::@63 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@64 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@65 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@39 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@39 main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@66 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@40 dominated by main::@9 main::@7 main::@8 main::@40 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@19 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@67 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@41 dominated by main::@9 main::@41 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@20 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@68 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@42 dominated by main::@9 main::@42 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@21 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@69 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@70 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@22 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@return main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@71 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@71 main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 main::@53 @12 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
print_ln dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @12
print_ln::@1 dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @12
print_ln::@return dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 print_ln::@return main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @12
printu dominated by main main::@1 main::@2 @begin @12 printu
printu::@1 dominated by main main::@1 main::@2 @begin @12 printu::@1 printu
printu::@2 dominated by main main::@1 main::@2 @begin @12 printu::@1 printu::@2 printu
printu::@3 dominated by main main::@1 main::@2 @begin @12 printu::@1 printu::@3 printu::@2 printu
printu::@4 dominated by main main::@1 main::@2 @begin @12 printu::@1 printu::@3 printu::@2 printu::@4 printu
printu::@5 dominated by main main::@1 main::@2 @begin @12 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
printu::@return dominated by main main::@1 main::@2 printu::@return @begin @12 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
print_char dominated by main print_char main::@1 main::@2 @begin @12 printu
print_char::@return dominated by main print_char main::@1 main::@2 print_char::@return @begin @12 printu
print_byte dominated by main main::@1 main::@2 @begin @12 print_byte printu::@1 printu
print_byte::@1 dominated by main main::@1 main::@2 @begin print_byte::@1 @12 print_byte printu::@1 printu
print_byte::@return dominated by main main::@1 main::@2 @begin print_byte::@return print_byte::@1 @12 print_byte printu::@1 printu
print_str dominated by main main::@1 main::@2 @begin @12 print_str printu::@1 printu::@2 printu
print_str::@1 dominated by main main::@1 main::@2 @begin print_str::@1 @12 print_str printu::@1 printu::@2 printu
print_str::@return dominated by main main::@1 main::@2 @begin print_str::@return print_str::@1 @12 print_str printu::@1 printu::@2 printu
print_str::@2 dominated by main main::@1 main::@2 @begin print_str::@1 print_str::@2 @12 print_str printu::@1 printu::@2 printu
print_cls dominated by main @begin @12 print_cls
print_cls::@1 dominated by main @begin @12 print_cls::@1 print_cls
print_cls::@return dominated by main @begin print_cls::@return @12 print_cls::@1 print_cls
NATURAL LOOPS
Found back edge: Loop head: main::@22 tails: main::@22 blocks: null
@ -7296,17 +7349,17 @@ INITIAL ASM
.label line_cursor = $18
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG3 [1] phi from @begin to @12 [phi:@begin->@12]
b12_from_bbegin:
jmp b12
//SEG4 @12
b12:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
//SEG6 [4] phi from @12 to main [phi:@12->main]
main_from_b12:
jsr main
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
//SEG7 [3] phi from @12 to @end [phi:@12->@end]
bend_from_b12:
jmp bend
//SEG8 @end
bend:
@ -8952,17 +9005,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 4
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG3 [1] phi from @begin to @12 [phi:@begin->@12]
b12_from_bbegin:
jmp b12
//SEG4 @12
b12:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
//SEG6 [4] phi from @12 to main [phi:@12->main]
main_from_b12:
jsr main
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
//SEG7 [3] phi from @12 to @end [phi:@12->@end]
bend_from_b12:
jmp bend
//SEG8 @end
bend:
@ -10258,7 +10311,7 @@ print_cls: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b23
@ -10352,9 +10405,9 @@ Replacing label b1_from_b2 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b11_from_bbegin:
Removing instruction main_from_b11:
Removing instruction bend_from_b11:
Removing instruction b12_from_bbegin:
Removing instruction main_from_b12:
Removing instruction bend_from_b12:
Removing instruction b23_from_b1:
Removing instruction b2_from_b23:
Removing instruction b24_from_b46:
@ -10413,7 +10466,7 @@ Removing instruction b1_from_print_str:
Removing instruction b1_from_b2:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b11:
Removing instruction b12:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1_from_main:
@ -10532,7 +10585,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @11
(label) @12
(label) @begin
(label) @end
(byte*) SCREEN
@ -10828,12 +10881,12 @@ Score: 15772
.label char_cursor = 9
.label line_cursor = 4
//SEG2 @begin
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
//SEG4 @11
//SEG3 [1] phi from @begin to @12 [phi:@begin->@12]
//SEG4 @12
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @11 to main [phi:@11->main]
//SEG6 [4] phi from @12 to main [phi:@12->main]
jsr main
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
//SEG7 [3] phi from @12 to @end [phi:@12->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @11
(label) @12
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -20,7 +20,7 @@ test_16s: {
.label divisor = $14
.label res = $e
.label i = 2
lda #0
lda #<0
sta rem16s
sta rem16s+1
sta i
@ -474,7 +474,7 @@ test_16u: {
.label divisor = $c
.label res = $e
.label i = 2
lda #0
lda #<0
sta rem16u
sta rem16u+1
sta i

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@18
@18: scope:[] from @begin
to:@19
@19: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @18
@end: scope:[] from @19
[3] phi() [ ] ( )
main: scope:[main] from @18
main: scope:[main] from @19
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -137,6 +137,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -368,6 +377,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -854,6 +876,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -1079,6 +1111,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@6: scope:[] from @5
to:@7
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@7: scope:[] from @6
to:@8
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -1089,8 +1140,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -1098,8 +1149,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -1117,9 +1168,9 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@9: scope:[] from @8
@10: scope:[] from @9
(byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@10
to:@11
div8u: scope:[div8u] from
(byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) div8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1165,9 +1216,9 @@ div8u::@return: scope:[div8u] from div8u::@6 div8u::@7
to:@return
div8u::@7: scope:[div8u] from
to:div8u::@return
@10: scope:[] from @9
@11: scope:[] from @10
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@11
to:@12
div16u: scope:[div16u] from
(word) div16u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1214,9 +1265,9 @@ div16u::@return: scope:[div16u] from div16u::@6 div16u::@7
to:@return
div16u::@7: scope:[div16u] from
to:div16u::@return
@11: scope:[] from @10
@12: scope:[] from @11
(signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@12
to:@13
div8s: scope:[div8s] from
(byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) div8s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1288,9 +1339,9 @@ div8s::@13: scope:[div8s] from
to:div8s::@5
div8s::@14: scope:[div8s] from
to:div8s::@6
@12: scope:[] from @11
@13: scope:[] from @12
(signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@13
to:@14
div16s: scope:[div16s] from
(byte) div16s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1362,8 +1413,8 @@ div16s::@13: scope:[div16s] from
to:div16s::@5
div16s::@14: scope:[div16s] from
to:div16s::@6
@13: scope:[] from @12
to:@14
@14: scope:[] from @13
to:@15
main: scope:[main] from
(void~) main::$0 ← call print_cls
(void~) main::$1 ← call test_8u
@ -1374,8 +1425,8 @@ main: scope:[main] from
main::@return: scope:[main] from main
return
to:@return
@14: scope:[] from @13
to:@15
@15: scope:[] from @14
to:@16
test_8u: scope:[test_8u] from
(byte[]) test_8u::dividends ← { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 }
(byte[]) test_8u::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 }
@ -1404,8 +1455,8 @@ test_8u::@2: scope:[test_8u] from test_8u::@1
test_8u::@return: scope:[test_8u] from test_8u::@2
return
to:@return
@15: scope:[] from @14
to:@16
@16: scope:[] from @15
to:@17
test_16u: scope:[test_16u] from
(word[]) test_16u::dividends ← { (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535 }
(word[]) test_16u::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 }
@ -1434,8 +1485,8 @@ test_16u::@2: scope:[test_16u] from test_16u::@1
test_16u::@return: scope:[test_16u] from test_16u::@2
return
to:@return
@16: scope:[] from @15
to:@17
@17: scope:[] from @16
to:@18
test_8s: scope:[test_8s] from
(signed byte/signed word/signed dword~) test_8s::$0 ← - (byte/signed byte/word/signed word/dword/signed dword) 127
(signed byte/signed word/signed dword~) test_8s::$1 ← - (byte/signed byte/word/signed word/dword/signed dword) 127
@ -1467,8 +1518,8 @@ test_8s::@2: scope:[test_8s] from test_8s::@1
test_8s::@return: scope:[test_8s] from test_8s::@2
return
to:@return
@17: scope:[] from @16
to:@18
@18: scope:[] from @17
to:@19
test_16s: scope:[test_16s] from
(signed word/signed dword~) test_16s::$0 ← - (word/signed word/dword/signed dword) 32767
(signed word/signed dword~) test_16s::$1 ← - (word/signed word/dword/signed dword) 32767
@ -1503,11 +1554,12 @@ test_16s::@2: scope:[test_16s] from test_16s::@1
test_16s::@return: scope:[test_16s] from test_16s::@2
return
to:@return
@18: scope:[] from @17
@19: scope:[] from @18
call main
to:@end
@end: scope:[] from @18
@end: scope:[] from @19
Removing unused procedure print_sdword
Removing unused procedure print_dword
Eliminating unused variable - keeping the call (void~) print_sword::$5
Eliminating unused variable - keeping the call (void~) print_sword::$2
@ -1580,6 +1632,7 @@ Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @9
Removing empty block div8u::@7
Removing empty block div16u::@7
Removing empty block div8s::@8
@ -1594,14 +1647,14 @@ Removing empty block div16s::@12
Removing empty block div16s::@6
Removing empty block div16s::@13
Removing empty block div16s::@14
Removing empty block @13
Removing empty block @14
Removing empty block test_8u::@2
Removing empty block @15
Removing empty block test_16u::@2
Removing empty block test_8u::@2
Removing empty block @16
Removing empty block test_8s::@2
Removing empty block test_16u::@2
Removing empty block @17
Removing empty block test_8s::@2
Removing empty block @18
Removing empty block test_16s::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
@ -1658,7 +1711,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@9
to:@10
print_str: scope:[print_str] from test_16s::@4 test_16s::@6 test_16s::@8 test_16u::@4 test_16u::@6 test_16u::@8 test_8s::@4 test_8s::@6 test_8s::@8 test_8u::@4 test_8u::@6 test_8u::@8
(byte*) char_cursor#140 ← phi( test_16s::@4/(byte*) char_cursor#54 test_16s::@6/(byte*) char_cursor#56 test_16s::@8/(byte*) char_cursor#58 test_16u::@4/(byte*) char_cursor#36 test_16u::@6/(byte*) char_cursor#38 test_16u::@8/(byte*) char_cursor#40 test_8s::@4/(byte*) char_cursor#45 test_8s::@6/(byte*) char_cursor#47 test_8s::@8/(byte*) char_cursor#49 test_8u::@4/(byte*) char_cursor#27 test_8u::@6/(byte*) char_cursor#29 test_8u::@8/(byte*) char_cursor#31 )
(byte*) print_str::str#15 ← phi( test_16s::@4/(byte*) print_str::str#10 test_16s::@6/(byte*) print_str::str#11 test_16s::@8/(byte*) print_str::str#12 test_16u::@4/(byte*) print_str::str#4 test_16u::@6/(byte*) print_str::str#5 test_16u::@8/(byte*) print_str::str#6 test_8s::@4/(byte*) print_str::str#7 test_8s::@6/(byte*) print_str::str#8 test_8s::@8/(byte*) print_str::str#9 test_8u::@4/(byte*) print_str::str#1 test_8u::@6/(byte*) print_str::str#2 test_8u::@8/(byte*) print_str::str#3 )
@ -1858,11 +1911,11 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#20 ← (byte*) char_cursor#82
return
to:@return
@9: scope:[] from @begin
@10: scope:[] from @begin
(byte*) char_cursor#154 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#61 ← phi( @begin/(byte*) line_cursor#0 )
(byte) rem8u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@10
to:@11
div8u: scope:[div8u] from div8s::@4 test_8u::@1
(byte) div8u::divisor#6 ← phi( div8s::@4/(byte) div8u::divisor#0 test_8u::@1/(byte) div8u::divisor#1 )
(byte) div8u::dividend#5 ← phi( div8s::@4/(byte) div8u::dividend#1 test_8u::@1/(byte) div8u::dividend#2 )
@ -1938,12 +1991,12 @@ div8u::@return: scope:[div8u] from div8u::@6
(byte) rem8u#2 ← (byte) rem8u#13
return
to:@return
@10: scope:[] from @9
(byte) rem8u#50 ← phi( @9/(byte) rem8u#0 )
(byte*) char_cursor#153 ← phi( @9/(byte*) char_cursor#154 )
(byte*) line_cursor#56 ← phi( @9/(byte*) line_cursor#61 )
@11: scope:[] from @10
(byte) rem8u#50 ← phi( @10/(byte) rem8u#0 )
(byte*) char_cursor#153 ← phi( @10/(byte*) char_cursor#154 )
(byte*) line_cursor#56 ← phi( @10/(byte*) line_cursor#61 )
(word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@11
to:@12
div16u: scope:[div16u] from div16s::@4 test_16u::@1
(word) div16u::divisor#6 ← phi( div16s::@4/(word) div16u::divisor#0 test_16u::@1/(word) div16u::divisor#1 )
(word) div16u::dividend#5 ← phi( div16s::@4/(word) div16u::dividend#1 test_16u::@1/(word) div16u::dividend#2 )
@ -2020,13 +2073,13 @@ div16u::@return: scope:[div16u] from div16u::@6
(word) rem16u#2 ← (word) rem16u#13
return
to:@return
@11: scope:[] from @10
(word) rem16u#45 ← phi( @10/(word) rem16u#0 )
(byte) rem8u#47 ← phi( @10/(byte) rem8u#50 )
(byte*) char_cursor#148 ← phi( @10/(byte*) char_cursor#153 )
(byte*) line_cursor#51 ← phi( @10/(byte*) line_cursor#56 )
@12: scope:[] from @11
(word) rem16u#45 ← phi( @11/(word) rem16u#0 )
(byte) rem8u#47 ← phi( @11/(byte) rem8u#50 )
(byte*) char_cursor#148 ← phi( @11/(byte*) char_cursor#153 )
(byte*) line_cursor#51 ← phi( @11/(byte*) line_cursor#56 )
(signed byte) rem8s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@12
to:@13
div8s: scope:[div8s] from test_8s::@1
(byte) rem8u#55 ← phi( test_8s::@1/(byte) rem8u#34 )
(signed byte) div8s::divisor#6 ← phi( test_8s::@1/(signed byte) div8s::divisor#0 )
@ -2131,14 +2184,14 @@ div8s::@return: scope:[div8s] from div8s::@11 div8s::@5
(signed byte) rem8s#3 ← (signed byte) rem8s#9
return
to:@return
@12: scope:[] from @11
(signed byte) rem8s#26 ← phi( @11/(signed byte) rem8s#0 )
(word) rem16u#44 ← phi( @11/(word) rem16u#45 )
(byte) rem8u#45 ← phi( @11/(byte) rem8u#47 )
(byte*) char_cursor#147 ← phi( @11/(byte*) char_cursor#148 )
(byte*) line_cursor#50 ← phi( @11/(byte*) line_cursor#51 )
@13: scope:[] from @12
(signed byte) rem8s#26 ← phi( @12/(signed byte) rem8s#0 )
(word) rem16u#44 ← phi( @12/(word) rem16u#45 )
(byte) rem8u#45 ← phi( @12/(byte) rem8u#47 )
(byte*) char_cursor#147 ← phi( @12/(byte*) char_cursor#148 )
(byte*) line_cursor#50 ← phi( @12/(byte*) line_cursor#51 )
(signed word) rem16s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@18
to:@19
div16s: scope:[div16s] from test_16s::@1
(word) rem16u#54 ← phi( test_16s::@1/(word) rem16u#33 )
(signed word) div16s::divisor#6 ← phi( test_16s::@1/(signed word) div16s::divisor#0 )
@ -2243,13 +2296,13 @@ div16s::@return: scope:[div16s] from div16s::@11 div16s::@5
(signed word) rem16s#3 ← (signed word) rem16s#9
return
to:@return
main: scope:[main] from @18
(signed word) rem16s#29 ← phi( @18/(signed word) rem16s#20 )
(signed byte) rem8s#29 ← phi( @18/(signed byte) rem8s#21 )
(word) rem16u#47 ← phi( @18/(word) rem16u#35 )
(byte) rem8u#39 ← phi( @18/(byte) rem8u#36 )
(byte*) char_cursor#134 ← phi( @18/(byte*) char_cursor#139 )
(byte*) line_cursor#40 ← phi( @18/(byte*) line_cursor#45 )
main: scope:[main] from @19
(signed word) rem16s#29 ← phi( @19/(signed word) rem16s#20 )
(signed byte) rem8s#29 ← phi( @19/(signed byte) rem8s#21 )
(word) rem16u#47 ← phi( @19/(word) rem16u#35 )
(byte) rem8u#39 ← phi( @19/(byte) rem8u#36 )
(byte*) char_cursor#134 ← phi( @19/(byte*) char_cursor#139 )
(byte*) line_cursor#40 ← phi( @19/(byte*) line_cursor#45 )
call print_cls param-assignment
to:main::@1
main::@1: scope:[main] from main
@ -2855,22 +2908,22 @@ test_16s::@return: scope:[test_16s] from test_16s::@11
(byte*) line_cursor#18 ← (byte*) line_cursor#37
return
to:@return
@18: scope:[] from @12
(signed word) rem16s#20 ← phi( @12/(signed word) rem16s#0 )
(signed byte) rem8s#21 ← phi( @12/(signed byte) rem8s#26 )
(word) rem16u#35 ← phi( @12/(word) rem16u#44 )
(byte) rem8u#36 ← phi( @12/(byte) rem8u#45 )
(byte*) char_cursor#139 ← phi( @12/(byte*) char_cursor#147 )
(byte*) line_cursor#45 ← phi( @12/(byte*) line_cursor#50 )
@19: scope:[] from @13
(signed word) rem16s#20 ← phi( @13/(signed word) rem16s#0 )
(signed byte) rem8s#21 ← phi( @13/(signed byte) rem8s#26 )
(word) rem16u#35 ← phi( @13/(word) rem16u#44 )
(byte) rem8u#36 ← phi( @13/(byte) rem8u#45 )
(byte*) char_cursor#139 ← phi( @13/(byte*) char_cursor#147 )
(byte*) line_cursor#45 ← phi( @13/(byte*) line_cursor#50 )
call main param-assignment
to:@19
@19: scope:[] from @18
(signed word) rem16s#15 ← phi( @18/(signed word) rem16s#5 )
(signed byte) rem8s#15 ← phi( @18/(signed byte) rem8s#5 )
(word) rem16u#26 ← phi( @18/(word) rem16u#7 )
(byte) rem8u#26 ← phi( @18/(byte) rem8u#7 )
(byte*) char_cursor#125 ← phi( @18/(byte*) char_cursor#26 )
(byte*) line_cursor#38 ← phi( @18/(byte*) line_cursor#10 )
to:@20
@20: scope:[] from @19
(signed word) rem16s#15 ← phi( @19/(signed word) rem16s#5 )
(signed byte) rem8s#15 ← phi( @19/(signed byte) rem8s#5 )
(word) rem16u#26 ← phi( @19/(word) rem16u#7 )
(byte) rem8u#26 ← phi( @19/(byte) rem8u#7 )
(byte*) char_cursor#125 ← phi( @19/(byte*) char_cursor#26 )
(byte*) line_cursor#38 ← phi( @19/(byte*) line_cursor#10 )
(byte*) line_cursor#19 ← (byte*) line_cursor#38
(byte*) char_cursor#63 ← (byte*) char_cursor#125
(byte) rem8u#12 ← (byte) rem8u#26
@ -2878,15 +2931,15 @@ test_16s::@return: scope:[test_16s] from test_16s::@11
(signed byte) rem8s#8 ← (signed byte) rem8s#15
(signed word) rem16s#8 ← (signed word) rem16s#15
to:@end
@end: scope:[] from @19
@end: scope:[] from @20
SYMBOL TABLE SSA
(label) @10
(label) @11
(label) @12
(label) @18
(label) @13
(label) @19
(label) @9
(label) @20
(label) @begin
(label) @end
(byte*) SCREEN
@ -4914,18 +4967,18 @@ Culled Empty Block (label) print_sbyte::@3
Culled Empty Block (label) print_word::@2
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) div8s::@1
Culled Empty Block (label) div8s::@3
Culled Empty Block (label) div8s::@11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) div16s::@1
Culled Empty Block (label) div16s::@3
Culled Empty Block (label) div16s::@11
Culled Empty Block (label) main::@5
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: char_cursor#126 char_cursor#17
Not aliassing across scopes: print_sword::w#5 print_sword::w#1
@ -5191,7 +5244,7 @@ Constant inlined print_str::str#5 = (const string) test_16u::str1
Constant inlined div8u::rem#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined rem8u#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @18 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@return div16s::@5 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@return div8s::@5 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@return div16s::@5 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@return div8s::@5 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting test_16s::@12(between test_16s::@11 and test_16s::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1)
@ -5214,9 +5267,9 @@ Added new block during phi lifting div8u::@10(between div8u::@2 and div8u::@3)
Added new block during phi lifting test_16u::@12(between test_16u::@11 and test_16u::@1)
Added new block during phi lifting test_8u::@12(between test_8u::@11 and test_8u::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @18 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return test_16s::@12 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return div16u::@8 div16u::@10 div16u::@9 test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return test_8s::@12 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return div8u::@8 div8u::@10 div8u::@9 test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_16u::@12 test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return test_16s::@12 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return div16u::@8 div16u::@10 div16u::@9 test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return test_8s::@12 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return div8u::@8 div8u::@10 div8u::@9 test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_16u::@12 test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @18
Adding NOP phi() at start of @19
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -5413,9 +5466,9 @@ Culled Empty Block (label) div8u::@10
Culled Empty Block (label) div8u::@9
Culled Empty Block (label) test_16u::@12
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @18 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @18
Adding NOP phi() at start of @19
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -5473,14 +5526,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@18
@18: scope:[] from @begin
to:@19
@19: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @18
@end: scope:[] from @19
[3] phi() [ ] ( )
main: scope:[main] from @18
main: scope:[main] from @19
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -6017,129 +6070,129 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@18 dominated by @18 @begin
@end dominated by @18 @end @begin
main dominated by @18 main @begin
main::@1 dominated by main::@1 @18 main @begin
main::@2 dominated by main::@1 main::@2 @18 main @begin
main::@3 dominated by main::@1 main::@2 main::@3 @18 main @begin
main::@4 dominated by main::@1 main::@2 main::@3 main::@4 @18 main @begin
main::@return dominated by main::@1 main::@2 main::@3 main::@4 main::@return @18 main @begin
test_16s dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s main @begin
test_16s::@1 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 main @begin
test_16s::@3 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 main @begin
test_16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 main @begin
test_16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 main @begin
test_16s::@6 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 main @begin
test_16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 main @begin
test_16s::@8 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main @begin
test_16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin
test_16s::@10 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@10
test_16s::@11 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
test_16s::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s::@return @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
print_ln dominated by main::@1 print_ln @18 main @begin
print_ln::@1 dominated by main::@1 print_ln @18 print_ln::@1 main @begin
print_ln::@return dominated by print_ln::@return main::@1 print_ln @18 print_ln::@1 main @begin
print_sword dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 main @begin
print_sword::@2 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 main @begin
print_sword::@4 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 print_sword::@4 main @begin
print_sword::@1 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin
print_sword::@return dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin print_sword::@return
print_word dominated by print_word main::@1 main::@2 @18 main @begin
print_word::@1 dominated by print_word main::@1 main::@2 print_word::@1 @18 main @begin
print_word::@return dominated by print_word main::@1 main::@2 print_word::@return print_word::@1 @18 main @begin
print_byte dominated by main::@1 print_byte @18 main @begin
print_byte::@1 dominated by main::@1 print_byte::@1 print_byte @18 main @begin
print_byte::@return dominated by main::@1 print_byte::@1 print_byte @18 main @begin print_byte::@return
print_char dominated by main::@1 @18 main print_char @begin
print_char::@return dominated by main::@1 @18 main print_char print_char::@return @begin
print_str dominated by main::@1 @18 print_str main @begin
print_str::@1 dominated by main::@1 print_str::@1 @18 print_str main @begin
print_str::@return dominated by main::@1 print_str::@return print_str::@1 @18 print_str main @begin
print_str::@2 dominated by main::@1 print_str::@1 print_str::@2 @18 print_str main @begin
div16s dominated by main::@1 main::@2 main::@3 main::@4 div16s @18 test_16s test_16s::@1 main @begin
div16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@7 @18 test_16s test_16s::@1 main @begin
div16s::@2 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @18 test_16s test_16s::@1 main @begin
div16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@9 div16s::@2 @18 test_16s test_16s::@1 main @begin
div16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin
div16s::@15 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@15
div16s::@18 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@15 div16s::@18
div16s::@return dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@return div16s::@15
div16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@5 div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@15
div16s::@17 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@17
div16s::@16 dominated by main::@1 main::@2 main::@3 main::@4 div16s @18 test_16s test_16s::@1 main @begin div16s::@16
div16u dominated by main::@1 main::@2 div16u @18 main @begin
div16u::@1 dominated by main::@1 main::@2 div16u div16u::@1 @18 main @begin
div16u::@4 dominated by main::@1 main::@2 div16u div16u::@4 div16u::@1 @18 main @begin
div16u::@2 dominated by main::@1 main::@2 div16u div16u::@2 div16u::@1 @18 main @begin
div16u::@5 dominated by main::@1 main::@2 div16u div16u::@5 div16u::@2 div16u::@1 @18 main @begin
div16u::@3 dominated by main::@1 main::@2 div16u div16u::@3 div16u::@2 div16u::@1 @18 main @begin
div16u::@6 dominated by main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @18 main @begin
div16u::@return dominated by div16u::@return main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @18 main @begin
test_8s dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin
test_8s::@1 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1
test_8s::@3 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3
test_8s::@4 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4
test_8s::@5 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5
test_8s::@6 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6
test_8s::@7 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@8 dominated by main::@1 main::@2 main::@3 test_8s @18 main test_8s::@8 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@9 dominated by main::@1 main::@2 main::@3 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@10 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@11 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@return dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@return test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
print_sbyte dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main @begin test_8s::@1 test_8s::@3
print_sbyte::@2 dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@4 dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@4 print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@1 dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@1 @begin test_8s::@1 test_8s::@3
print_sbyte::@return dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@1 @begin print_sbyte::@return test_8s::@1 test_8s::@3
div8s dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main @begin test_8s::@1
div8s::@7 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main @begin test_8s::@1 div8s::@7
div8s::@2 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main div8s::@2 @begin test_8s::@1
div8s::@9 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main div8s::@2 @begin test_8s::@1 div8s::@9
div8s::@4 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@15 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@18 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@return dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@15 main div8s::@2 div8s::@return @begin test_8s::@1 div8s::@4
div8s::@5 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@5 div8s::@4
div8s::@17 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@17 main div8s::@2 @begin test_8s::@1
div8s::@16 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@16 main @begin test_8s::@1
div8u dominated by main::@1 div8u @18 main @begin
div8u::@1 dominated by main::@1 div8u @18 main @begin div8u::@1
div8u::@4 dominated by main::@1 div8u @18 main div8u::@4 @begin div8u::@1
div8u::@2 dominated by main::@1 div8u @18 main div8u::@2 @begin div8u::@1
div8u::@5 dominated by main::@1 div8u @18 main div8u::@2 div8u::@5 @begin div8u::@1
div8u::@3 dominated by main::@1 div8u @18 main div8u::@3 div8u::@2 @begin div8u::@1
div8u::@6 dominated by main::@1 div8u @18 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
div8u::@return dominated by main::@1 div8u div8u::@return @18 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
test_16u dominated by main::@1 main::@2 @18 test_16u main @begin
test_16u::@1 dominated by main::@1 main::@2 @18 test_16u test_16u::@1 main @begin
test_16u::@3 dominated by main::@1 main::@2 @18 test_16u test_16u::@1 test_16u::@3 main @begin
test_16u::@4 dominated by main::@1 main::@2 @18 test_16u test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@5 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@6 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@6 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@7 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@8 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@9 dominated by main::@1 main::@2 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@10 dominated by main::@1 main::@2 test_16u::@10 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@11 dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@return dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin test_16u::@return
test_8u dominated by main::@1 test_8u @18 main @begin
test_8u::@1 dominated by main::@1 test_8u @18 main @begin test_8u::@1
test_8u::@3 dominated by main::@1 test_8u @18 main @begin test_8u::@3 test_8u::@1
test_8u::@4 dominated by main::@1 test_8u @18 main @begin test_8u::@3 test_8u::@4 test_8u::@1
test_8u::@5 dominated by main::@1 test_8u @18 main @begin test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@6 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@7 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@8 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@9 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@10 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@11 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@return dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 test_8u::@return
test_8u::@12 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@12 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
print_cls dominated by @18 print_cls main @begin
print_cls::@1 dominated by @18 print_cls main @begin print_cls::@1
print_cls::@return dominated by @18 print_cls main @begin print_cls::@return print_cls::@1
@19 dominated by @19 @begin
@end dominated by @19 @end @begin
main dominated by @19 main @begin
main::@1 dominated by main::@1 @19 main @begin
main::@2 dominated by main::@1 main::@2 @19 main @begin
main::@3 dominated by main::@1 main::@2 main::@3 @19 main @begin
main::@4 dominated by main::@1 main::@2 main::@3 main::@4 @19 main @begin
main::@return dominated by main::@1 main::@2 main::@3 main::@4 main::@return @19 main @begin
test_16s dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s main @begin
test_16s::@1 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 main @begin
test_16s::@3 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 main @begin
test_16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 main @begin
test_16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 main @begin
test_16s::@6 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 main @begin
test_16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 main @begin
test_16s::@8 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main @begin
test_16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin
test_16s::@10 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@10
test_16s::@11 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
test_16s::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s::@return @19 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
print_ln dominated by main::@1 print_ln @19 main @begin
print_ln::@1 dominated by main::@1 print_ln @19 print_ln::@1 main @begin
print_ln::@return dominated by print_ln::@return main::@1 print_ln @19 print_ln::@1 main @begin
print_sword dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s print_sword test_16s::@1 test_16s::@3 main @begin
print_sword::@2 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 main @begin
print_sword::@4 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 print_sword::@4 main @begin
print_sword::@1 dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin
print_sword::@return dominated by main::@1 main::@2 main::@3 main::@4 @19 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin print_sword::@return
print_word dominated by print_word main::@1 main::@2 @19 main @begin
print_word::@1 dominated by print_word main::@1 main::@2 print_word::@1 @19 main @begin
print_word::@return dominated by print_word main::@1 main::@2 print_word::@return print_word::@1 @19 main @begin
print_byte dominated by main::@1 print_byte @19 main @begin
print_byte::@1 dominated by main::@1 print_byte::@1 print_byte @19 main @begin
print_byte::@return dominated by main::@1 print_byte::@1 print_byte @19 main @begin print_byte::@return
print_char dominated by main::@1 @19 main print_char @begin
print_char::@return dominated by main::@1 @19 main print_char print_char::@return @begin
print_str dominated by main::@1 @19 print_str main @begin
print_str::@1 dominated by main::@1 print_str::@1 @19 print_str main @begin
print_str::@return dominated by main::@1 print_str::@return print_str::@1 @19 print_str main @begin
print_str::@2 dominated by main::@1 print_str::@1 print_str::@2 @19 print_str main @begin
div16s dominated by main::@1 main::@2 main::@3 main::@4 div16s @19 test_16s test_16s::@1 main @begin
div16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@7 @19 test_16s test_16s::@1 main @begin
div16s::@2 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @19 test_16s test_16s::@1 main @begin
div16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@9 div16s::@2 @19 test_16s test_16s::@1 main @begin
div16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @19 test_16s test_16s::@1 main @begin
div16s::@15 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @19 test_16s test_16s::@1 main @begin div16s::@15
div16s::@18 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @19 test_16s test_16s::@1 main @begin div16s::@15 div16s::@18
div16s::@return dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @19 test_16s test_16s::@1 main @begin div16s::@return div16s::@15
div16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@5 div16s::@4 div16s::@2 @19 test_16s test_16s::@1 main @begin div16s::@15
div16s::@17 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @19 test_16s test_16s::@1 main @begin div16s::@17
div16s::@16 dominated by main::@1 main::@2 main::@3 main::@4 div16s @19 test_16s test_16s::@1 main @begin div16s::@16
div16u dominated by main::@1 main::@2 div16u @19 main @begin
div16u::@1 dominated by main::@1 main::@2 div16u div16u::@1 @19 main @begin
div16u::@4 dominated by main::@1 main::@2 div16u div16u::@4 div16u::@1 @19 main @begin
div16u::@2 dominated by main::@1 main::@2 div16u div16u::@2 div16u::@1 @19 main @begin
div16u::@5 dominated by main::@1 main::@2 div16u div16u::@5 div16u::@2 div16u::@1 @19 main @begin
div16u::@3 dominated by main::@1 main::@2 div16u div16u::@3 div16u::@2 div16u::@1 @19 main @begin
div16u::@6 dominated by main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @19 main @begin
div16u::@return dominated by div16u::@return main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @19 main @begin
test_8s dominated by main::@1 main::@2 main::@3 test_8s @19 main @begin
test_8s::@1 dominated by main::@1 main::@2 main::@3 test_8s @19 main @begin test_8s::@1
test_8s::@3 dominated by main::@1 main::@2 main::@3 test_8s @19 main @begin test_8s::@1 test_8s::@3
test_8s::@4 dominated by main::@1 main::@2 main::@3 test_8s @19 main @begin test_8s::@1 test_8s::@3 test_8s::@4
test_8s::@5 dominated by main::@1 main::@2 main::@3 test_8s @19 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5
test_8s::@6 dominated by main::@1 main::@2 main::@3 test_8s @19 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6
test_8s::@7 dominated by main::@1 main::@2 main::@3 test_8s @19 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@8 dominated by main::@1 main::@2 main::@3 test_8s @19 main test_8s::@8 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@9 dominated by main::@1 main::@2 main::@3 test_8s @19 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@10 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s @19 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@11 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @19 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@return dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @19 main test_8s::@8 test_8s::@9 @begin test_8s::@return test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
print_sbyte dominated by main::@1 main::@2 main::@3 test_8s @19 print_sbyte main @begin test_8s::@1 test_8s::@3
print_sbyte::@2 dominated by main::@1 main::@2 main::@3 test_8s @19 print_sbyte main print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@4 dominated by main::@1 main::@2 main::@3 test_8s @19 print_sbyte main print_sbyte::@4 print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@1 dominated by main::@1 main::@2 main::@3 test_8s @19 print_sbyte main print_sbyte::@1 @begin test_8s::@1 test_8s::@3
print_sbyte::@return dominated by main::@1 main::@2 main::@3 test_8s @19 print_sbyte main print_sbyte::@1 @begin print_sbyte::@return test_8s::@1 test_8s::@3
div8s dominated by main::@1 main::@2 main::@3 div8s test_8s @19 main @begin test_8s::@1
div8s::@7 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 main @begin test_8s::@1 div8s::@7
div8s::@2 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 main div8s::@2 @begin test_8s::@1
div8s::@9 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 main div8s::@2 @begin test_8s::@1 div8s::@9
div8s::@4 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@15 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@18 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 div8s::@18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@return dominated by main::@1 main::@2 main::@3 div8s test_8s @19 div8s::@15 main div8s::@2 div8s::@return @begin test_8s::@1 div8s::@4
div8s::@5 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@5 div8s::@4
div8s::@17 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 div8s::@17 main div8s::@2 @begin test_8s::@1
div8s::@16 dominated by main::@1 main::@2 main::@3 div8s test_8s @19 div8s::@16 main @begin test_8s::@1
div8u dominated by main::@1 div8u @19 main @begin
div8u::@1 dominated by main::@1 div8u @19 main @begin div8u::@1
div8u::@4 dominated by main::@1 div8u @19 main div8u::@4 @begin div8u::@1
div8u::@2 dominated by main::@1 div8u @19 main div8u::@2 @begin div8u::@1
div8u::@5 dominated by main::@1 div8u @19 main div8u::@2 div8u::@5 @begin div8u::@1
div8u::@3 dominated by main::@1 div8u @19 main div8u::@3 div8u::@2 @begin div8u::@1
div8u::@6 dominated by main::@1 div8u @19 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
div8u::@return dominated by main::@1 div8u div8u::@return @19 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
test_16u dominated by main::@1 main::@2 @19 test_16u main @begin
test_16u::@1 dominated by main::@1 main::@2 @19 test_16u test_16u::@1 main @begin
test_16u::@3 dominated by main::@1 main::@2 @19 test_16u test_16u::@1 test_16u::@3 main @begin
test_16u::@4 dominated by main::@1 main::@2 @19 test_16u test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@5 dominated by main::@1 main::@2 @19 test_16u test_16u::@5 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@6 dominated by main::@1 main::@2 @19 test_16u test_16u::@5 test_16u::@6 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@7 dominated by main::@1 main::@2 @19 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@8 dominated by main::@1 main::@2 @19 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@9 dominated by main::@1 main::@2 @19 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@10 dominated by main::@1 main::@2 test_16u::@10 @19 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@11 dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @19 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@return dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @19 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin test_16u::@return
test_8u dominated by main::@1 test_8u @19 main @begin
test_8u::@1 dominated by main::@1 test_8u @19 main @begin test_8u::@1
test_8u::@3 dominated by main::@1 test_8u @19 main @begin test_8u::@3 test_8u::@1
test_8u::@4 dominated by main::@1 test_8u @19 main @begin test_8u::@3 test_8u::@4 test_8u::@1
test_8u::@5 dominated by main::@1 test_8u @19 main @begin test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@6 dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@7 dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@7 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@8 dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@9 dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@10 dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@11 dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@return dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 test_8u::@return
test_8u::@12 dominated by main::@1 test_8u @19 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@12 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
print_cls dominated by @19 print_cls main @begin
print_cls::@1 dominated by @19 print_cls main @begin print_cls::@1
print_cls::@return dominated by @19 print_cls main @begin print_cls::@return print_cls::@1
NATURAL LOOPS
Found back edge: Loop head: test_16s::@1 tails: test_16s::@11 blocks: null
@ -6687,17 +6740,17 @@ INITIAL ASM
.label rem16s = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18]
b18_from_bbegin:
jmp b18
//SEG4 @18
b18:
//SEG3 [1] phi from @begin to @19 [phi:@begin->@19]
b19_from_bbegin:
jmp b19
//SEG4 @19
b19:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @18 to main [phi:@18->main]
main_from_b18:
//SEG6 [4] phi from @19 to main [phi:@19->main]
main_from_b19:
jsr main
//SEG7 [3] phi from @18 to @end [phi:@18->@end]
bend_from_b18:
//SEG7 [3] phi from @19 to @end [phi:@19->@end]
bend_from_b19:
jmp bend
//SEG8 @end
bend:
@ -6758,9 +6811,9 @@ test_16s: {
//SEG31 [16] phi from test_16s to test_16s::@1 [phi:test_16s->test_16s::@1]
b1_from_test_16s:
//SEG32 [16] phi (signed word) rem16s#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16s->test_16s::@1#0] -- vwsz1=vbuc1
lda #0
lda #<0
sta rem16s
lda #0
lda #>0
sta rem16s+1
//SEG33 [16] phi (byte) test_16s::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16s->test_16s::@1#1] -- vbuz1=vbuc1
lda #0
@ -7360,15 +7413,15 @@ div16u: {
lda #0
sta i
//SEG220 [107] phi (word) div16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#1] -- vwuz1=vbuc1
lda #0
lda #<0
sta quotient
lda #0
lda #>0
sta quotient+1
//SEG221 [107] phi (word) div16u::dividend#3 = (word) div16u::dividend#5 [phi:div16u->div16u::@1#2] -- register_copy
//SEG222 [107] phi (word) div16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#3] -- vwuz1=vbuc1
lda #0
lda #<0
sta rem
lda #0
lda #>0
sta rem+1
jmp b1
//SEG223 [107] phi from div16u::@3 to div16u::@1 [phi:div16u::@3->div16u::@1]
@ -7937,9 +7990,9 @@ test_16u: {
//SEG423 [203] phi from test_16u to test_16u::@1 [phi:test_16u->test_16u::@1]
b1_from_test_16u:
//SEG424 [203] phi (word) rem16u#30 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16u->test_16u::@1#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta rem16u
lda #0
lda #>0
sta rem16u+1
//SEG425 [203] phi (byte) test_16u::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16u->test_16u::@1#1] -- vbuz1=vbuc1
lda #0
@ -8735,17 +8788,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label rem16s = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18]
b18_from_bbegin:
jmp b18
//SEG4 @18
b18:
//SEG3 [1] phi from @begin to @19 [phi:@begin->@19]
b19_from_bbegin:
jmp b19
//SEG4 @19
b19:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @18 to main [phi:@18->main]
main_from_b18:
//SEG6 [4] phi from @19 to main [phi:@19->main]
main_from_b19:
jsr main
//SEG7 [3] phi from @18 to @end [phi:@18->@end]
bend_from_b18:
//SEG7 [3] phi from @19 to @end [phi:@19->@end]
bend_from_b19:
jmp bend
//SEG8 @end
bend:
@ -8806,9 +8859,9 @@ test_16s: {
//SEG31 [16] phi from test_16s to test_16s::@1 [phi:test_16s->test_16s::@1]
b1_from_test_16s:
//SEG32 [16] phi (signed word) rem16s#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16s->test_16s::@1#0] -- vwsz1=vbuc1
lda #0
lda #<0
sta rem16s
lda #0
lda #>0
sta rem16s+1
//SEG33 [16] phi (byte) test_16s::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16s->test_16s::@1#1] -- vbuz1=vbuc1
lda #0
@ -9347,15 +9400,15 @@ div16u: {
//SEG219 [107] phi (byte) div16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#0] -- vbuxx=vbuc1
ldx #0
//SEG220 [107] phi (word) div16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#1] -- vwuz1=vbuc1
lda #0
lda #<0
sta quotient
lda #0
lda #>0
sta quotient+1
//SEG221 [107] phi (word) div16u::dividend#3 = (word) div16u::dividend#5 [phi:div16u->div16u::@1#2] -- register_copy
//SEG222 [107] phi (word) div16u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div16u->div16u::@1#3] -- vwuz1=vbuc1
lda #0
lda #<0
sta rem
lda #0
lda #>0
sta rem+1
jmp b1
//SEG223 [107] phi from div16u::@3 to div16u::@1 [phi:div16u::@3->div16u::@1]
@ -9877,9 +9930,9 @@ test_16u: {
//SEG423 [203] phi from test_16u to test_16u::@1 [phi:test_16u->test_16u::@1]
b1_from_test_16u:
//SEG424 [203] phi (word) rem16u#30 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16u->test_16u::@1#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta rem16u
lda #0
lda #>0
sta rem16u+1
//SEG425 [203] phi (byte) test_16u::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16u->test_16u::@1#1] -- vbuz1=vbuc1
lda #0
@ -10276,7 +10329,7 @@ print_cls: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b18
Removing instruction jmp b19
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
@ -10375,20 +10428,20 @@ Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction ldy i
Removing instruction lda i
Removing instruction ldy #0
Replacing instruction lda #0 with TXA
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction lda #<0 with TXA
Removing instruction lda #>0
Removing instruction lda #<0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction ldy i
Replacing instruction lda #0 with TXA
Replacing instruction ldy #0 with TAY
Removing instruction lda #0
Removing instruction lda #>0
Removing instruction lda #0
Removing instruction ldy i
Removing instruction lda i
@ -10417,9 +10470,9 @@ Replacing label b1_from_b11 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b18_from_bbegin:
Removing instruction main_from_b18:
Removing instruction bend_from_b18:
Removing instruction b19_from_bbegin:
Removing instruction main_from_b19:
Removing instruction bend_from_b19:
Removing instruction b1_from_main:
Removing instruction test_8u_from_b1:
Removing instruction b2_from_b1:
@ -10495,7 +10548,7 @@ Removing instruction b10_from_b9:
Removing instruction print_ln_from_b10:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b18:
Removing instruction b19:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
@ -10631,7 +10684,7 @@ Succesful ASM optimization Pass5UnreachableCodeElimination
Fixing long branch [82] bne b1 to beq
FINAL SYMBOL TABLE
(label) @18
(label) @19
(label) @begin
(label) @end
(byte*) SCREEN
@ -11068,12 +11121,12 @@ Score: 33529
.label rem16u = 3
.label rem16s = 3
//SEG2 @begin
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18]
//SEG4 @18
//SEG3 [1] phi from @begin to @19 [phi:@begin->@19]
//SEG4 @19
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @18 to main [phi:@18->main]
//SEG6 [4] phi from @19 to main [phi:@19->main]
jsr main
//SEG7 [3] phi from @18 to @end [phi:@18->@end]
//SEG7 [3] phi from @19 to @end [phi:@19->@end]
//SEG8 @end
//SEG9 main
main: {
@ -11112,7 +11165,7 @@ test_16s: {
.label i = 2
//SEG31 [16] phi from test_16s to test_16s::@1 [phi:test_16s->test_16s::@1]
//SEG32 [16] phi (signed word) rem16s#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16s->test_16s::@1#0] -- vwsz1=vbuc1
lda #0
lda #<0
sta rem16s
sta rem16s+1
//SEG33 [16] phi (byte) test_16s::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16s->test_16s::@1#1] -- vbuz1=vbuc1
@ -11979,7 +12032,7 @@ test_16u: {
.label i = 2
//SEG423 [203] phi from test_16u to test_16u::@1 [phi:test_16u->test_16u::@1]
//SEG424 [203] phi (word) rem16u#30 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16u->test_16u::@1#0] -- vwuz1=vbuc1
lda #0
lda #<0
sta rem16u
sta rem16u+1
//SEG425 [203] phi (byte) test_16u::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:test_16u->test_16u::@1#1] -- vbuz1=vbuc1

View File

@ -1,4 +1,4 @@
(label) @18
(label) @19
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -38,8 +38,8 @@ main: {
sta _2
lda dw+3
sta _2+1
lda _32
clc
lda _32
adc #<$1111
sta _32
lda _32+1
@ -57,8 +57,8 @@ main: {
sta _5
lda dw+1
sta _5+1
lda _33
clc
lda _33
adc #<$1111
sta _33
lda _33+1

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -76,6 +76,15 @@ void print_dword(dword dw) {
print_word(<dw);
}
// Print a signed dword as HEX
void print_sdword(signed dword dw) {
if(dw<0) {
print_char('-');
dw = -dw;
}
print_dword((dword)dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -176,6 +185,19 @@ proc (void()) print_dword((dword) print_dword::dw)
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
print_sdword::@1:
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
print_sdword::@return:
return
endproc // print_sdword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -329,6 +351,16 @@ SYMBOLS
(label) print_sbyte::@1
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(void()) print_sdword((signed dword) print_sdword::dw)
(boolean~) print_sdword::$0
(boolean~) print_sdword::$1
(void~) print_sdword::$2
(signed dword~) print_sdword::$3
(dword~) print_sdword::$4
(void~) print_sdword::$5
(label) print_sdword::@1
(label) print_sdword::@return
(signed dword) print_sdword::dw
(void()) print_str((byte*) print_str::str)
(boolean~) print_str::$0
(label) print_str::@1
@ -463,6 +495,25 @@ print_dword::@return: scope:[print_dword] from print_dword
to:@return
@6: scope:[] from @5
to:@7
print_sdword: scope:[print_sdword] from
(boolean~) print_sdword::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$0
if((boolean~) print_sdword::$1) goto print_sdword::@1
to:print_sdword::@2
print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@2
(dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw
(void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4
to:print_sdword::@return
print_sdword::@2: scope:[print_sdword] from print_sdword
(void~) print_sdword::$2 ← call print_char (byte) '-'
(signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw
(signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3
to:print_sdword::@1
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@7: scope:[] from @6
to:@8
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -473,8 +524,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -482,8 +533,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -501,8 +552,8 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@9: scope:[] from @8
to:@10
@10: scope:[] from @9
to:@11
main: scope:[main] from
(void~) main::$0 ← call print_cls
(dword) main::dw ← (dword/signed dword) 305419896
@ -552,14 +603,15 @@ main::@2: scope:[main] from main::@1
main::@return: scope:[main] from main::@2
return
to:@return
@10: scope:[] from @9
@11: scope:[] from @10
call main
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
Removing unused procedure print_str
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_sdword
Eliminating unused variable - keeping the call (void~) print_word::$1
Eliminating unused variable - keeping the call (void~) print_word::$3
Eliminating unused variable - keeping the call (void~) print_dword::$1
@ -593,6 +645,7 @@ Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @9
Removing empty block @10
Removing empty block main::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
print_ln modifies line_cursor
@ -627,7 +680,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@10
to:@11
print_ln: scope:[print_ln] from main::@16
(byte*) char_cursor#64 ← phi( main::@16/(byte*) char_cursor#29 )
(byte*) line_cursor#17 ← phi( main::@16/(byte*) line_cursor#19 )
@ -757,9 +810,9 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#15 ← (byte*) char_cursor#46
return
to:@return
main: scope:[main] from @10
(byte*) char_cursor#68 ← phi( @10/(byte*) char_cursor#70 )
(byte*) line_cursor#18 ← phi( @10/(byte*) line_cursor#20 )
main: scope:[main] from @11
(byte*) char_cursor#68 ← phi( @11/(byte*) char_cursor#70 )
(byte*) line_cursor#18 ← phi( @11/(byte*) line_cursor#20 )
call print_cls param-assignment
to:main::@3
main::@3: scope:[main] from main
@ -927,22 +980,22 @@ main::@return: scope:[main] from main::@17
(byte*) char_cursor#31 ← (byte*) char_cursor#62
return
to:@return
@10: scope:[] from @begin
@11: scope:[] from @begin
(byte*) char_cursor#70 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#20 ← phi( @begin/(byte*) line_cursor#0 )
call main param-assignment
to:@11
@11: scope:[] from @10
(byte*) char_cursor#63 ← phi( @10/(byte*) char_cursor#31 )
(byte*) line_cursor#16 ← phi( @10/(byte*) line_cursor#7 )
to:@12
@12: scope:[] from @11
(byte*) char_cursor#63 ← phi( @11/(byte*) char_cursor#31 )
(byte*) line_cursor#16 ← phi( @11/(byte*) line_cursor#7 )
(byte*) line_cursor#8 ← (byte*) line_cursor#16
(byte*) char_cursor#32 ← (byte*) char_cursor#63
to:@end
@end: scope:[] from @11
@end: scope:[] from @12
SYMBOL TABLE SSA
(label) @10
(label) @11
(label) @12
(label) @begin
(label) @end
(byte*) SCREEN
@ -1381,7 +1434,7 @@ Culled Empty Block (label) print_dword::@2
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) main::@3
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: line_cursor#9 line_cursor#19
Not aliassing across scopes: print_word::w#4 print_word::w#2
@ -1467,13 +1520,13 @@ Constant inlined print_char::ch#7 = (byte) ' '
Constant inlined main::dw#0 = (dword/signed dword) 305419896
Constant inlined print_char::ch#6 = (byte) ' '
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @11 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting main::@18(between main::@17 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return main::@18 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @11 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return main::@18 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@16
@ -1576,9 +1629,9 @@ Coalesced [110] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 7 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return main::@18 print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @11 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return main::@18 print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
@ -1634,14 +1687,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -1798,43 +1851,43 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@10 dominated by @10 @begin
@end dominated by @end @10 @begin
main dominated by main @10 @begin
main::@1 dominated by main main::@1 @10 @begin
main::@4 dominated by main main::@1 @10 main::@4 @begin
main::@5 dominated by main main::@1 main::@5 @10 main::@4 @begin
main::@6 dominated by main main::@1 main::@5 main::@6 @10 main::@4 @begin
main::@7 dominated by main::@7 main main::@1 main::@5 main::@6 @10 main::@4 @begin
main::@8 dominated by main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 @begin
main::@9 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 @begin
main::@10 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 @begin main::@10
main::@11 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10
main::@12 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@12
main::@13 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@13 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@13 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@13 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@return main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@17 main::@16 main::@18 main::@13 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14 print_ln
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14 print_ln
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14 print_ln
print_byte dominated by main main::@1 @10 @begin print_byte
print_byte::@1 dominated by main main::@1 print_byte::@1 @10 @begin print_byte
print_byte::@return dominated by main main::@1 print_byte::@1 @10 @begin print_byte print_byte::@return
print_char dominated by main print_char main::@1 @10 @begin
print_char::@return dominated by main print_char main::@1 @10 print_char::@return @begin
print_word dominated by main print_word main::@1 @10 @begin
print_word::@1 dominated by main print_word main::@1 print_word::@1 @10 @begin
print_word::@return dominated by main print_word main::@1 print_word::@1 @10 @begin print_word::@return
print_dword dominated by main main::@1 @10 print_dword @begin
print_dword::@1 dominated by main main::@1 print_dword::@1 @10 print_dword @begin
print_dword::@return dominated by main print_dword::@return main::@1 print_dword::@1 @10 print_dword @begin
print_cls dominated by main @10 @begin print_cls
print_cls::@1 dominated by main @10 @begin print_cls::@1 print_cls
print_cls::@return dominated by main print_cls::@return @10 @begin print_cls::@1 print_cls
@11 dominated by @11 @begin
@end dominated by @end @11 @begin
main dominated by main @11 @begin
main::@1 dominated by main main::@1 @11 @begin
main::@4 dominated by main main::@1 main::@4 @11 @begin
main::@5 dominated by main main::@1 main::@5 main::@4 @11 @begin
main::@6 dominated by main main::@1 main::@5 main::@6 main::@4 @11 @begin
main::@7 dominated by main::@7 main main::@1 main::@5 main::@6 main::@4 @11 @begin
main::@8 dominated by main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 @begin
main::@9 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 @begin
main::@10 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 @begin main::@10
main::@11 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10
main::@12 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@12
main::@13 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@13 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@13 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@13 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@return main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@17 main::@16 main::@18 main::@13 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14 print_ln
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14 print_ln
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@1 main::@5 main::@6 main::@4 @11 main::@11 @begin main::@10 main::@16 main::@13 main::@12 main::@15 main::@14 print_ln
print_byte dominated by main main::@1 @11 @begin print_byte
print_byte::@1 dominated by main main::@1 print_byte::@1 @11 @begin print_byte
print_byte::@return dominated by main main::@1 print_byte::@1 @11 @begin print_byte print_byte::@return
print_char dominated by main print_char main::@1 @11 @begin
print_char::@return dominated by main print_char main::@1 @11 print_char::@return @begin
print_word dominated by main print_word main::@1 @11 @begin
print_word::@1 dominated by main print_word main::@1 print_word::@1 @11 @begin
print_word::@return dominated by main print_word main::@1 print_word::@1 @11 @begin print_word::@return
print_dword dominated by main main::@1 @11 print_dword @begin
print_dword::@1 dominated by main main::@1 print_dword::@1 @11 print_dword @begin
print_dword::@return dominated by main print_dword::@return main::@1 print_dword::@1 @11 print_dword @begin
print_cls dominated by main @11 @begin print_cls
print_cls::@1 dominated by main @11 @begin print_cls::@1 print_cls
print_cls::@return dominated by main print_cls::@return @11 @begin print_cls::@1 print_cls
NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@18 blocks: null
@ -1999,17 +2052,17 @@ INITIAL ASM
.label char_cursor = $a
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -2659,17 +2712,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label char_cursor = 8
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -2719,8 +2772,8 @@ main: {
lda dw+3
sta _2+1
//SEG18 [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz1_plus_vwuc1
lda _32
clc
lda _32
adc #<$1111
sta _32
lda _32+1
@ -2741,8 +2794,8 @@ main: {
lda dw+1
sta _5+1
//SEG21 [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz1_plus_vwuc1
lda _33
clc
lda _33
adc #<$1111
sta _33
lda _33+1
@ -3170,7 +3223,7 @@ print_cls: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b4
@ -3208,9 +3261,9 @@ Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b10_from_bbegin:
Removing instruction main_from_b10:
Removing instruction bend_from_b10:
Removing instruction b11_from_bbegin:
Removing instruction main_from_b11:
Removing instruction bend_from_b11:
Removing instruction b4_from_b1:
Removing instruction print_char_from_b4:
Removing instruction b6_from_b5:
@ -3229,7 +3282,7 @@ Removing instruction b1_from_print_ln:
Removing instruction b1_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b10:
Removing instruction b11:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1_from_main:
@ -3276,7 +3329,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN
@ -3392,12 +3445,12 @@ Score: 7440
.label line_cursor = 6
.label char_cursor = 8
//SEG2 @begin
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
//SEG4 @10
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
//SEG4 @11
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
//SEG6 [4] phi from @11 to main [phi:@11->main]
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
//SEG8 @end
//SEG9 main
main: {
@ -3442,8 +3495,8 @@ main: {
lda dw+3
sta _2+1
//SEG18 [8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ) -- vwuz1=vwuz1_plus_vwuc1
lda _32
clc
lda _32
adc #<$1111
sta _32
lda _32+1
@ -3464,8 +3517,8 @@ main: {
lda dw+1
sta _5+1
//SEG21 [11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ) -- vwuz1=vwuz1_plus_vwuc1
lda _33
clc
lda _33
adc #<$1111
sta _33
lda _33+1

View File

@ -1,4 +1,4 @@
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -16,11 +16,494 @@ main: {
jsr mul8u_compare
jsr mul8s_compare
jsr mul16u_compare
jsr mul16s_compare
rts
}
mul16s_compare: {
.label a = 2
.label b = 4
.label ms = $a
.label mn = $10
ldx #0
lda #<-$7fff
sta b
lda #>-$7fff
sta b+1
lda #<-$7fff
sta a
lda #>-$7fff
sta a+1
b1:
ldy #0
b2:
clc
lda a
adc #<$d2b
sta a
lda a+1
adc #>$d2b
sta a+1
clc
lda b
adc #<$ffd
sta b
lda b+1
adc #>$ffd
sta b+1
jsr muls16s
jsr mul16s
lda ms
cmp mn
bne !+
lda ms+1
cmp mn+1
bne !+
lda ms+2
cmp mn+2
bne !+
lda ms+3
cmp mn+3
beq b5
!:
lda #0
jmp b3
b5:
lda #1
b3:
cmp #0
bne b4
lda #2
sta BGCOL
jsr mul16s_error
breturn:
rts
b4:
iny
cpy #$10
bne b2
inx
cpx #$10
bne b1
lda line_cursor
sta char_cursor
lda line_cursor+1
sta char_cursor+1
lda #<str
sta print_str.str
lda #>str
sta print_str.str+1
jsr print_str
jsr print_ln
jmp breturn
str: .text "signed word multiply results match!@"
}
print_ln: {
b1:
lda line_cursor
clc
adc #$28
sta line_cursor
bcc !+
inc line_cursor+1
!:
lda line_cursor+1
cmp char_cursor+1
bcc b1
bne !+
lda line_cursor
cmp char_cursor
bcc b1
!:
rts
}
print_str: {
.label str = 8
b1:
ldy #0
lda (str),y
cmp #'@'
bne b2
rts
b2:
ldy #0
lda (str),y
sta (char_cursor),y
inc char_cursor
bne !+
inc char_cursor+1
!:
inc str
bne !+
inc str+1
!:
jmp b1
}
mul16s_error: {
.label a = 2
.label b = 4
.label ms = $a
.label mn = $10
lda line_cursor
sta char_cursor
lda line_cursor+1
sta char_cursor+1
lda #<str
sta print_str.str
lda #>str
sta print_str.str+1
jsr print_str
jsr print_sword
lda #<str1
sta print_str.str
lda #>str1
sta print_str.str+1
jsr print_str
lda b
sta print_sword.w
lda b+1
sta print_sword.w+1
jsr print_sword
lda #<str2
sta print_str.str
lda #>str2
sta print_str.str+1
jsr print_str
jsr print_sdword
lda #<str3
sta print_str.str
lda #>str3
sta print_str.str+1
jsr print_str
lda mn
sta print_sdword.dw
lda mn+1
sta print_sdword.dw+1
lda mn+2
sta print_sdword.dw+2
lda mn+3
sta print_sdword.dw+3
jsr print_sdword
jsr print_ln
rts
str: .text "signed word multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
}
print_sdword: {
.label dw = $a
lda dw+3
bpl b1
lda #'-'
jsr print_char
sec
lda dw
eor #$ff
adc #0
sta dw
lda dw+1
eor #$ff
adc #0
sta dw+1
lda dw+2
eor #$ff
adc #0
sta dw+2
lda dw+3
eor #$ff
adc #0
sta dw+3
b1:
jsr print_dword
rts
}
print_dword: {
.label dw = $a
lda dw+2
sta print_word.w
lda dw+3
sta print_word.w+1
jsr print_word
lda dw
sta print_word.w
lda dw+1
sta print_word.w+1
jsr print_word
rts
}
print_word: {
.label w = 2
lda w+1
tax
jsr print_byte
lda w
tax
jsr print_byte
rts
}
print_byte: {
txa
lsr
lsr
lsr
lsr
tay
lda hextab,y
jsr print_char
txa
and #$f
tay
lda hextab,y
jsr print_char
rts
hextab: .text "0123456789abcdef"
}
print_char: {
ldy #0
sta (char_cursor),y
inc char_cursor
bne !+
inc char_cursor+1
!:
rts
}
print_sword: {
.label w = 2
lda w+1
bpl b1
lda #'-'
jsr print_char
sec
lda w
eor #$ff
adc #0
sta w
lda w+1
eor #$ff
adc #0
sta w+1
b1:
jsr print_word
rts
}
mul16s: {
.label _6 = 8
.label _12 = 8
.label _16 = 8
.label _17 = 8
.label m = $10
.label return = $10
.label a = 2
.label b = 4
lda b
sta mul16u.b
lda b+1
sta mul16u.b+1
lda a
sta mul16u.a
lda a+1
sta mul16u.a+1
jsr mul16u
lda a+1
bpl b1
lda m+2
sta _6
lda m+3
sta _6+1
lda _16
sec
sbc b
sta _16
lda _16+1
sbc b+1
sta _16+1
lda _16
sta m+2
lda _16+1
sta m+3
b1:
lda b+1
bpl b2
lda m+2
sta _12
lda m+3
sta _12+1
lda _17
sec
sbc a
sta _17
lda _17+1
sbc a+1
sta _17+1
lda _17
sta m+2
lda _17+1
sta m+3
b2:
rts
}
mul16u: {
.label mb = $16
.label a = 8
.label res = $10
.label return = $10
.label b = $14
lda b
sta mb
lda b+1
sta mb+1
lda #0
sta mb+2
sta mb+3
sta res
sta res+1
sta res+2
sta res+3
b1:
lda a
bne b2
lda a+1
bne b2
rts
b2:
lda a
and #1
cmp #0
beq b4
lda res
clc
adc mb
sta res
lda res+1
adc mb+1
sta res+1
lda res+2
adc mb+2
sta res+2
lda res+3
adc mb+3
sta res+3
b4:
clc
ror a+1
ror a
asl mb
rol mb+1
rol mb+2
rol mb+3
jmp b1
}
muls16s: {
.label m = $a
.label i = 8
.label return = $a
.label j = 8
.label a = 2
.label b = 4
lda a+1
bpl b1
lda #<0
sta i
sta i+1
sta m
sta m+1
lda #<0>>$10
sta m+2
lda #>0>>$10
sta m+3
b2:
lda b+1
ora #$7f
bmi !+
lda #0
!:
sta $ff
sec
lda m
sbc b
sta m
lda m+1
sbc b+1
sta m+1
lda m+2
sbc $ff
sta m+2
lda m+3
sbc $ff
sta m+3
lda i
bne !+
dec i+1
!:
dec i
lda i+1
cmp a+1
bne b2
lda i
cmp a
bne b2
jmp b3
b6:
lda #<0
sta return
sta return+1
lda #<0>>$10
sta return+2
lda #>0>>$10
sta return+3
b3:
rts
b1:
lda a+1
bmi b6
bne !+
lda a
beq b6
!:
lda #<0
sta j
sta j+1
sta m
sta m+1
lda #<0>>$10
sta m+2
lda #>0>>$10
sta m+3
b5:
lda b+1
ora #$7f
bmi !+
lda #0
!:
sta $ff
lda m
clc
adc b
sta m
lda m+1
adc b+1
sta m+1
lda m+2
adc $ff
sta m+2
lda m+3
adc $ff
sta m+3
inc j
bne !+
inc j+1
!:
lda j+1
cmp a+1
bne b5
lda j
cmp a
bne b5
jmp b3
}
mul16u_compare: {
.label a = 2
.label b = 4
.label b = $14
.label ms = $a
.label mn = $10
ldx #0
@ -32,15 +515,15 @@ mul16u_compare: {
b1:
ldy #0
b2:
lda a
clc
lda a
adc #<$d2b
sta a
lda a+1
adc #>$d2b
sta a+1
lda b
clc
lda b
adc #<$ffd
sta b
lda b+1
@ -97,50 +580,9 @@ mul16u_compare: {
jmp breturn
str: .text "word multiply results match!@"
}
print_ln: {
b1:
lda line_cursor
clc
adc #$28
sta line_cursor
bcc !+
inc line_cursor+1
!:
lda line_cursor+1
cmp char_cursor+1
bcc b1
bne !+
lda line_cursor
cmp char_cursor
bcc b1
!:
rts
}
print_str: {
.label str = 8
b1:
ldy #0
lda (str),y
cmp #'@'
bne b2
rts
b2:
ldy #0
lda (str),y
sta (char_cursor),y
inc char_cursor
bne !+
inc char_cursor+1
!:
inc str
bne !+
inc str+1
!:
jmp b1
}
mul16u_error: {
.label a = 2
.label b = 4
.label b = $14
.label ms = $a
.label mn = $10
lda line_cursor
@ -190,119 +632,18 @@ mul16u_error: {
str2: .text " slow:@"
str3: .text " / normal:@"
}
print_dword: {
.label dw = $a
lda dw+2
sta print_word.w
lda dw+3
sta print_word.w+1
jsr print_word
lda dw
sta print_word.w
lda dw+1
sta print_word.w+1
jsr print_word
rts
}
print_word: {
.label w = 2
lda w+1
tax
jsr print_byte
lda w
tax
jsr print_byte
rts
}
print_byte: {
txa
lsr
lsr
lsr
lsr
tay
lda hextab,y
jsr print_char
txa
and #$f
tay
lda hextab,y
jsr print_char
rts
hextab: .text "0123456789abcdef"
}
print_char: {
ldy #0
sta (char_cursor),y
inc char_cursor
bne !+
inc char_cursor+1
!:
rts
}
mul16u: {
.label mb = $14
.label a = 8
.label res = $10
.label b = 4
.label return = $10
lda b
sta mb
lda b+1
sta mb+1
lda #0
sta mb+2
sta mb+3
sta res
sta res+1
sta res+2
sta res+3
b1:
lda a
bne b2
lda a+1
bne b2
rts
b2:
lda a
and #1
cmp #0
beq b4
lda res
clc
adc mb
sta res
lda res+1
adc mb+1
sta res+1
lda res+2
adc mb+2
sta res+2
lda res+3
adc mb+3
sta res+3
b4:
clc
ror a+1
ror a
asl mb
rol mb+1
rol mb+2
rol mb+3
jmp b1
}
muls16u: {
.label return = $a
.label m = $a
.label i = 8
.label i = 4
.label a = 2
.label b = 4
.label b = $14
lda a
bne !+
lda a+1
beq b3
!:
lda #0
lda #<0
sta i
sta i+1
sta m
@ -345,10 +686,10 @@ muls16u: {
}
mul8s_compare: {
.label ms = 2
.label mf = $1a
.label mf = $14
.label mn = 4
.label b = $19
.label a = $18
.label b = $1b
.label a = $1a
lda #-$80
sta a
b1:
@ -413,10 +754,10 @@ mul8s_compare: {
str: .text "signed multiply results match!@"
}
mul8s_error: {
.label b = $19
.label b = $1b
.label ms = 2
.label mn = 4
.label mf = $1a
.label mf = $14
lda line_cursor
sta char_cursor
lda line_cursor+1
@ -468,25 +809,6 @@ mul8s_error: {
str3: .text " / normal:@"
str4: .text " / fast:@"
}
print_sword: {
.label w = 2
lda w+1
bpl b1
lda #'-'
jsr print_char
sec
lda w
eor #$ff
adc #0
sta w
lda w+1
eor #$ff
adc #0
sta w+1
b1:
jsr print_word
rts
}
print_sbyte: {
cpx #0
bpl b1
@ -503,7 +825,7 @@ print_sbyte: {
}
mul8s: {
.label m = 4
.label a = $18
.label a = $1a
.label return = 4
tya
ldx a
@ -560,9 +882,9 @@ mul8u: {
jmp b1
}
mulf8s: {
.label m = $1a
.label b = $19
.label return = $1a
.label m = $14
.label b = $1b
.label return = $14
tya
ldx b
jsr mulf8u
@ -587,7 +909,7 @@ mulf8s: {
mulf8u: {
.label memA = $fe
.label memB = $ff
.label return = $1a
.label return = $14
sta memA
stx memB
sta sm1+1
@ -615,7 +937,7 @@ mulf8u: {
muls8s: {
.label m = 2
.label return = 2
.label a = $18
.label a = $1a
lda a
cmp #0
bpl b1
@ -643,7 +965,7 @@ muls8s: {
bne b2
jmp b3
b6:
lda #0
lda #<0
sta return
sta return+1
b3:
@ -678,10 +1000,10 @@ muls8s: {
}
mul8u_compare: {
.label ms = 2
.label mf = $1a
.label mf = $14
.label mn = 4
.label b = $19
.label a = $18
.label b = $1b
.label a = $1a
lda #0
sta a
b1:
@ -742,10 +1064,10 @@ mul8u_compare: {
str: .text "multiply results match!@"
}
mul8u_error: {
.label b = $19
.label b = $1b
.label ms = 2
.label mn = 4
.label mf = $1a
.label mf = $14
lda #<str
sta print_str.str
lda #>str
@ -796,7 +1118,7 @@ mul8u_error: {
muls8u: {
.label return = 2
.label m = 2
.label a = $18
.label a = $1a
lda a
beq b3
ldy #0
@ -816,7 +1138,7 @@ muls8u: {
bne b2
jmp b1
b3:
lda #0
lda #<0
sta return
sta return+1
b1:
@ -960,10 +1282,10 @@ mulf_init: {
.label sqr1_hi = 4
.label sqr = 6
.label sqr1_lo = 2
.label x_2 = $18
.label x_2 = $1a
.label sqr2_hi = 4
.label sqr2_lo = 2
.label dir = $18
.label dir = $1a
lda #0
sta x_2
lda #<mulf_sqr1_hi+1
@ -974,7 +1296,7 @@ mulf_init: {
sta sqr1_lo
lda #>mulf_sqr1_lo+1
sta sqr1_lo+1
lda #0
lda #<0
sta sqr
sta sqr+1
tax

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
(label) @28
(label) @32
(label) @begin
(label) @end
(byte*) BGCOL
@ -7,26 +7,30 @@
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) char_cursor
(byte*) char_cursor#1 char_cursor zp ZP_WORD:14 11.0
(byte*) char_cursor#103 char_cursor zp ZP_WORD:14 6.0
(byte*) char_cursor#104 char_cursor zp ZP_WORD:14 0.8148148148148144
(byte*) char_cursor#116 char_cursor zp ZP_WORD:14 0.1951219512195122
(byte*) char_cursor#166 char_cursor zp ZP_WORD:14 1.365384615384616
(byte*) char_cursor#167 char_cursor zp ZP_WORD:14 6.25
(byte*) char_cursor#168 char_cursor zp ZP_WORD:14 3.0
(byte*) char_cursor#170 char_cursor zp ZP_WORD:14 3.0
(byte*) char_cursor#172 char_cursor zp ZP_WORD:14 11.0
(byte*) char_cursor#174 char_cursor zp ZP_WORD:14 3.9999999999999996
(byte*) char_cursor#189 char_cursor zp ZP_WORD:14 38.0
(byte*~) char_cursor#239 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#240 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#244 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#245 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#282 char_cursor zp ZP_WORD:14 4.0
(byte*) char_cursor#102 char_cursor zp ZP_WORD:14 1.253968253968253
(byte*) char_cursor#124 char_cursor zp ZP_WORD:14 7.0
(byte*) char_cursor#125 char_cursor zp ZP_WORD:14 0.8181818181818177
(byte*) char_cursor#138 char_cursor zp ZP_WORD:14 0.1951219512195122
(byte*) char_cursor#203 char_cursor zp ZP_WORD:14 7.25
(byte*) char_cursor#204 char_cursor zp ZP_WORD:14 3.0
(byte*) char_cursor#206 char_cursor zp ZP_WORD:14 3.0
(byte*) char_cursor#208 char_cursor zp ZP_WORD:14 11.0
(byte*) char_cursor#209 char_cursor zp ZP_WORD:14 4.0
(byte*) char_cursor#210 char_cursor zp ZP_WORD:14 3.0
(byte*) char_cursor#212 char_cursor zp ZP_WORD:14 3.9999999999999996
(byte*) char_cursor#230 char_cursor zp ZP_WORD:14 48.0
(byte*~) char_cursor#292 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#293 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#297 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#298 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#302 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#303 char_cursor zp ZP_WORD:14 4.0
(byte*~) char_cursor#346 char_cursor zp ZP_WORD:14 4.0
(byte*) line_cursor
(byte*) line_cursor#1 line_cursor zp ZP_WORD:6 0.42063492063492064
(byte*) line_cursor#11 line_cursor zp ZP_WORD:6 0.09523809523809523
(byte*) line_cursor#29 line_cursor zp ZP_WORD:6 24.0
(byte*) line_cursor#57 line_cursor zp ZP_WORD:6 14.0
(byte*) line_cursor#1 line_cursor zp ZP_WORD:6 0.33701657458563516
(byte*) line_cursor#12 line_cursor zp ZP_WORD:6 0.09523809523809523
(byte*) line_cursor#35 line_cursor zp ZP_WORD:6 24.0
(byte*) line_cursor#69 line_cursor zp ZP_WORD:6 18.0
(void()) main()
(label) main::@1
(label) main::@2
@ -34,7 +38,88 @@
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(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
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
(label) mul16s::@4
(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::b
(signed word) mul16s::b#0 b zp ZP_WORD:4 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
(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
(void()) mul16s_compare()
(label) mul16s_compare::@1
(label) mul16s_compare::@10
(label) mul16s_compare::@11
(label) mul16s_compare::@13
(label) mul16s_compare::@2
(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 22.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 22.0
(byte) mul16s_compare::i
(byte) mul16s_compare::i#1 reg byte x 16.5
(byte) mul16s_compare::i#9 reg byte x 1.1
(byte) mul16s_compare::j
(byte) mul16s_compare::j#1 reg byte y 151.5
(byte) mul16s_compare::j#2 reg byte y 11.882352941176471
(signed dword) mul16s_compare::mn
(signed dword) mul16s_compare::mn#0 mn zp ZP_DWORD:16 22.666666666666664
(signed dword) mul16s_compare::ms
(signed dword) mul16s_compare::ms#0 ms zp ZP_DWORD:10 15.692307692307692
(byte) mul16s_compare::ok
(byte) mul16s_compare::ok#2 reg byte a 101.0
(const string) mul16s_compare::str str = (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)
(label) mul16s_error::@1
(label) mul16s_error::@2
(label) mul16s_error::@3
(label) mul16s_error::@4
(label) mul16s_error::@5
(label) mul16s_error::@6
(label) mul16s_error::@7
(label) mul16s_error::@8
(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::b
(signed word) mul16s_error::b#0 b zp ZP_WORD:4 0.4444444444444444
(signed dword) mul16s_error::mn
(signed dword) mul16s_error::mn#0 mn zp ZP_DWORD:16 0.26666666666666666
(signed dword) mul16s_error::ms
(signed dword) mul16s_error::ms#0 ms zp ZP_DWORD:10 0.3333333333333333
(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:@"
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 2002.0
(label) mul16u::@1
@ -44,20 +129,25 @@
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp ZP_WORD:8 1001.0
(word) mul16u::a#1 a zp ZP_WORD:8 34.33333333333333
(word) mul16u::a#2 a zp ZP_WORD:8 667.6666666666667
(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::b
(word) mul16u::b#0 b zp ZP_WORD:4 103.0
(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
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp ZP_DWORD:20 4.0
(dword) mul16u::mb#1 mb zp ZP_DWORD:20 2002.0
(dword) mul16u::mb#2 mb zp ZP_DWORD:20 429.2857142857143
(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::res
(dword) mul16u::res#1 res zp ZP_DWORD:16 2002.0
(dword) mul16u::res#2 res zp ZP_DWORD:16 517.3333333333334
(dword) mul16u::res#2 res zp ZP_DWORD:16 443.7142857142857
(dword) mul16u::res#6 res zp ZP_DWORD:16 1001.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp ZP_DWORD:16 202.0
(dword) mul16u::return#2 return zp ZP_DWORD:16 4.0
(dword) mul16u::return#3 return zp ZP_DWORD:16 202.0
(void()) mul16u_compare()
(label) mul16u_compare::@1
(label) mul16u_compare::@10
@ -76,9 +166,9 @@
(word) mul16u_compare::a#2 a zp ZP_WORD:2 213.0
(word) mul16u_compare::a#5 a zp ZP_WORD:2 22.0
(word) mul16u_compare::b
(word) mul16u_compare::b#1 b zp ZP_WORD:4 19.857142857142858
(word) mul16u_compare::b#2 b zp ZP_WORD:4 106.5
(word) mul16u_compare::b#5 b zp ZP_WORD:4 22.0
(word) mul16u_compare::b#1 b zp ZP_WORD:20 19.857142857142858
(word) mul16u_compare::b#2 b zp ZP_WORD:20 106.5
(word) mul16u_compare::b#5 b zp ZP_WORD:20 22.0
(byte) mul16u_compare::i
(byte) mul16u_compare::i#1 reg byte x 16.5
(byte) mul16u_compare::i#9 reg byte x 1.1
@ -105,7 +195,7 @@
(word) mul16u_error::a
(word) mul16u_error::a#0 a zp ZP_WORD:2 0.6666666666666666
(word) mul16u_error::b
(word) mul16u_error::b#0 b zp ZP_WORD:4 0.4444444444444444
(word) mul16u_error::b#0 b zp ZP_WORD:20 0.4444444444444444
(dword) mul16u_error::mn
(dword) mul16u_error::mn#0 mn zp ZP_DWORD:16 0.26666666666666666
(dword) mul16u_error::ms
@ -126,7 +216,7 @@
(label) mul8s::@6
(label) mul8s::@return
(signed byte) mul8s::a
(signed byte) mul8s::a#0 a zp ZP_BYTE:24 7.357142857142858
(signed byte) mul8s::a#0 a zp ZP_BYTE:26 7.357142857142858
(signed byte) mul8s::b
(signed byte) mul8s::b#0 reg byte y 9.363636363636363
(word) mul8s::m
@ -154,13 +244,13 @@
(label) mul8s_compare::@8
(label) mul8s_compare::@return
(signed byte) mul8s_compare::a
(signed byte) mul8s_compare::a#1 a zp ZP_BYTE:24 16.5
(signed byte) mul8s_compare::a#7 a zp ZP_BYTE:24 12.11111111111111
(signed byte) mul8s_compare::a#1 a zp ZP_BYTE:26 16.5
(signed byte) mul8s_compare::a#7 a zp ZP_BYTE:26 12.11111111111111
(signed byte) mul8s_compare::b
(signed byte) mul8s_compare::b#1 b zp ZP_BYTE:25 151.5
(signed byte) mul8s_compare::b#10 b zp ZP_BYTE:25 20.279999999999998
(signed byte) mul8s_compare::b#1 b zp ZP_BYTE:27 151.5
(signed byte) mul8s_compare::b#10 b zp ZP_BYTE:27 20.279999999999998
(signed word) mul8s_compare::mf
(signed word) mul8s_compare::mf#0 mf zp ZP_WORD:26 11.333333333333332
(signed word) mul8s_compare::mf#0 mf zp ZP_WORD:20 11.333333333333332
(signed word) mul8s_compare::mn
(signed word) mul8s_compare::mn#0 mn zp ZP_WORD:4 17.0
(signed word) mul8s_compare::ms
@ -184,9 +274,9 @@
(signed byte) mul8s_error::a
(signed byte) mul8s_error::a#0 reg byte x 0.5714285714285714
(signed byte) mul8s_error::b
(signed byte) mul8s_error::b#0 b zp ZP_BYTE:25 0.4
(signed byte) mul8s_error::b#0 b zp ZP_BYTE:27 0.4
(signed word) mul8s_error::mf
(signed word) mul8s_error::mf#0 mf zp ZP_WORD:26 0.21052631578947367
(signed word) mul8s_error::mf#0 mf zp ZP_WORD:20 0.21052631578947367
(signed word) mul8s_error::mn
(signed word) mul8s_error::mn#0 mn zp ZP_WORD:4 0.25
(signed word) mul8s_error::ms
@ -241,13 +331,13 @@
(label) mul8u_compare::@8
(label) mul8u_compare::@return
(byte) mul8u_compare::a
(byte) mul8u_compare::a#1 a zp ZP_BYTE:24 16.5
(byte) mul8u_compare::a#7 a zp ZP_BYTE:24 12.11111111111111
(byte) mul8u_compare::a#1 a zp ZP_BYTE:26 16.5
(byte) mul8u_compare::a#7 a zp ZP_BYTE:26 12.11111111111111
(byte) mul8u_compare::b
(byte) mul8u_compare::b#1 b zp ZP_BYTE:25 151.5
(byte) mul8u_compare::b#10 b zp ZP_BYTE:25 20.279999999999998
(byte) mul8u_compare::b#1 b zp ZP_BYTE:27 151.5
(byte) mul8u_compare::b#10 b zp ZP_BYTE:27 20.279999999999998
(word) mul8u_compare::mf
(word) mul8u_compare::mf#0 mf zp ZP_WORD:26 11.333333333333332
(word) mul8u_compare::mf#0 mf zp ZP_WORD:20 11.333333333333332
(word) mul8u_compare::mn
(word) mul8u_compare::mn#0 mn zp ZP_WORD:4 17.0
(word) mul8u_compare::ms
@ -271,9 +361,9 @@
(byte) mul8u_error::a
(byte) mul8u_error::a#0 reg byte x 0.5714285714285714
(byte) mul8u_error::b
(byte) mul8u_error::b#0 b zp ZP_BYTE:25 0.4
(byte) mul8u_error::b#0 b zp ZP_BYTE:27 0.4
(word) mul8u_error::mf
(word) mul8u_error::mf#0 mf zp ZP_WORD:26 0.21052631578947367
(word) mul8u_error::mf#0 mf zp ZP_WORD:20 0.21052631578947367
(word) mul8u_error::mn
(word) mul8u_error::mn#0 mn zp ZP_WORD:4 0.25
(word) mul8u_error::ms
@ -305,15 +395,15 @@
(signed byte) mulf8s::a
(signed byte) mulf8s::a#0 reg byte y 7.357142857142858
(signed byte) mulf8s::b
(signed byte) mulf8s::b#0 b zp ZP_BYTE:25 9.363636363636363
(signed byte) mulf8s::b#0 b zp ZP_BYTE:27 9.363636363636363
(word) mulf8s::m
(word) mulf8s::m#0 m zp ZP_WORD:26 2.0
(word) mulf8s::m#1 m zp ZP_WORD:26 4.0
(word) mulf8s::m#2 m zp ZP_WORD:26 4.0
(word) mulf8s::m#4 m zp ZP_WORD:26 1.3333333333333333
(word) mulf8s::m#5 m zp ZP_WORD:26 2.5
(word) mulf8s::m#0 m zp ZP_WORD:20 2.0
(word) mulf8s::m#1 m zp ZP_WORD:20 4.0
(word) mulf8s::m#2 m zp ZP_WORD:20 4.0
(word) mulf8s::m#4 m zp ZP_WORD:20 1.3333333333333333
(word) mulf8s::m#5 m zp ZP_WORD:20 2.5
(signed word) mulf8s::return
(signed word) mulf8s::return#2 return zp ZP_WORD:26 202.0
(signed word) mulf8s::return#2 return zp ZP_WORD:20 202.0
(word()) mulf8u((byte) mulf8u::a , (byte) mulf8u::b)
(label) mulf8u::@return
(byte) mulf8u::a
@ -329,9 +419,9 @@
(byte*) mulf8u::memB
(const byte*) mulf8u::memB#0 memB = ((byte*))(byte/word/signed word/dword/signed dword) 255
(word) mulf8u::return
(word) mulf8u::return#0 return zp ZP_WORD:26 26.25
(word) mulf8u::return#2 return zp ZP_WORD:26 4.0
(word) mulf8u::return#3 return zp ZP_WORD:26 202.0
(word) mulf8u::return#0 return zp ZP_WORD:20 26.25
(word) mulf8u::return#2 return zp ZP_WORD:20 4.0
(word) mulf8u::return#3 return zp ZP_WORD:20 202.0
(void()) mulf_init()
(byte~) mulf_init::$2 reg byte a 22.0
(byte~) mulf_init::$5 reg byte a 22.0
@ -348,8 +438,8 @@
(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:24 4.714285714285714
(byte) mulf_init::dir#3 dir zp ZP_BYTE:24 7.333333333333333
(byte) mulf_init::dir#2 dir zp ZP_BYTE:26 4.714285714285714
(byte) mulf_init::dir#3 dir zp ZP_BYTE:26 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
@ -368,9 +458,9 @@
(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::x_2
(byte) mulf_init::x_2#1 x_2 zp ZP_BYTE:24 11.0
(byte) mulf_init::x_2#2 x_2 zp ZP_BYTE:24 4.888888888888889
(byte) mulf_init::x_2#3 x_2 zp ZP_BYTE:24 8.25
(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_255
(byte) mulf_init::x_255#1 reg byte x 5.5
(byte) mulf_init::x_255#2 reg byte x 11.0
@ -405,6 +495,30 @@
(const string) mulf_tables_cmp::str str = (string) "multiply table mismatch at @"
(const string) mulf_tables_cmp::str1 str1 = (string) " / @"
(const string) mulf_tables_cmp::str2 str2 = (string) "multiply tables match!@"
(signed dword()) muls16s((signed word) muls16s::a , (signed word) muls16s::b)
(label) muls16s::@1
(label) muls16s::@2
(label) muls16s::@3
(label) muls16s::@5
(label) muls16s::@return
(signed word) muls16s::a
(signed word) muls16s::a#0 a zp ZP_WORD:2 175.58333333333334
(signed word) muls16s::b
(signed word) muls16s::b#0 b zp ZP_WORD:4 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::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 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::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
(dword()) muls16u((word) muls16u::a , (word) muls16u::b)
(label) muls16u::@1
(label) muls16u::@2
@ -412,10 +526,10 @@
(word) muls16u::a
(word) muls16u::a#0 a zp ZP_WORD:2 157.71428571428572
(word) muls16u::b
(word) muls16u::b#0 b zp ZP_WORD:4 183.66666666666669
(word) muls16u::b#0 b zp ZP_WORD:20 183.66666666666669
(word) muls16u::i
(word) muls16u::i#1 i zp ZP_WORD:8 1501.5
(word) muls16u::i#2 i zp ZP_WORD:8 1001.0
(word) muls16u::i#1 i zp ZP_WORD:4 1501.5
(word) muls16u::i#2 i zp ZP_WORD:4 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
@ -429,7 +543,7 @@
(label) muls8s::@5
(label) muls8s::@return
(signed byte) muls8s::a
(signed byte) muls8s::a#0 a zp ZP_BYTE:24 175.58333333333334
(signed byte) muls8s::a#0 a zp ZP_BYTE:26 175.58333333333334
(signed byte) muls8s::b
(signed byte) muls8s::b#0 reg byte x 191.1818181818182
(signed byte) muls8s::i
@ -451,7 +565,7 @@
(label) muls8u::@2
(label) muls8u::@return
(byte) muls8u::a
(byte) muls8u::a#0 a zp ZP_BYTE:24 157.71428571428572
(byte) muls8u::a#0 a zp ZP_BYTE:26 157.71428571428572
(byte) muls8u::b
(byte) muls8u::b#0 reg byte x 183.66666666666669
(byte) muls8u::i
@ -480,9 +594,9 @@
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#2 reg byte a 4.0
(byte) print_char::ch#3 reg byte a 4.0
(byte) print_char::ch#4 reg byte a 6.0
(byte) print_char::ch#4 reg byte a 4.0
(byte) print_char::ch#5 reg byte a 6.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
@ -495,7 +609,8 @@
(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 2.6666666666666665
(dword) print_dword::dw#2 dw zp ZP_DWORD:10 4.0
(dword) print_dword::dw#3 dw zp ZP_DWORD:10 3.333333333333333
(void()) print_ln()
(label) print_ln::@1
(label) print_ln::@return
@ -510,14 +625,25 @@
(signed byte) print_sbyte::b#2 reg byte x 4.0
(signed byte) print_sbyte::b#3 reg byte x 2.5
(signed byte) print_sbyte::b#4 reg byte x 4.0
(void()) print_sdword((signed dword) print_sdword::dw)
(label) print_sdword::@1
(label) print_sdword::@2
(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
(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 22.0
(byte*) print_str::str#21 str zp ZP_WORD:8 11.5
(byte*) print_str::str#23 str zp ZP_WORD:8 2.0
(byte*) print_str::str#26 str zp ZP_WORD:8 11.5
(byte*) print_str::str#28 str zp ZP_WORD:8 2.0
(void()) print_sword((signed word) print_sword::w)
(label) print_sword::@1
(label) print_sword::@2
@ -528,8 +654,10 @@
(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 4.0
(signed word) print_sword::w#4 w zp ZP_WORD:2 3.0
(signed word) print_sword::w#4 w zp ZP_WORD:2 4.0
(signed word) print_sword::w#5 w zp ZP_WORD:2 4.0
(signed word) print_sword::w#6 w zp ZP_WORD:2 4.0
(signed word) print_sword::w#7 w zp ZP_WORD:2 4.0
(void()) print_word((word) print_word::w)
(label) print_word::@1
(label) print_word::@return
@ -546,26 +674,29 @@
(word) print_word::w#8 w zp ZP_WORD:2 4.0
(word) print_word::w#9 w zp ZP_WORD:2 4.0
reg byte x [ mul16s_compare::i#9 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_sword::w#7 print_sword::w#6 print_sword::w#4 print_sword::w#5 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_sword::w#0 print_word::w#10 print_word::w#8 print_word::w#9 print_word::w#5 print_word::w#6 print_word::w#7 print_word::w#17 print_word::w#18 print_word::w#1 print_word::w#2 print_word::w#21 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul16u_error::a#0 mul16u_compare::a#2 mul16u_compare::a#5 mul16u_compare::a#1 muls16u::a#0 mul8s_error::ms#0 mul8s_compare::ms#0 muls8s::return#2 muls8s::m#5 muls8s::return#0 muls8s::m#3 muls8s::m#1 muls8s::m#2 mul8u_error::ms#0 mul8u_compare::ms#0 muls8u::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:4 [ mul16s_compare::b#2 mul16s_compare::b#5 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mul16s_error::b#0 muls16u::i#2 muls16u::i#1 mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s::return#2 mul8s_compare::mn#0 mul8s_error::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8u_compare::mn#0 mul8u_error::mn#0 mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#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 [ line_cursor#35 line_cursor#69 line_cursor#1 line_cursor#12 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
zp ZP_WORD:8 [ print_str::str#26 print_str::str#28 print_str::str#0 mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 muls16s::i#2 muls16s::i#1 muls16s::j#2 muls16s::j#1 mul8u::mb#2 mul8u::mb#0 mul8u::mb#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#3 print_dword::dw#1 print_dword::dw#2 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 muls16s::return#2 muls16s::m#5 muls16s::return#0 muls16s::m#3 muls16s::m#1 muls16s::m#2 mul16u_error::ms#0 mul16u_compare::ms#0 muls16u::return#2 muls16u::return#0 muls16u::m#3 muls16u::m#1 ]
reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#9 print_byte::b#1 print_byte::b#2 ]
reg byte a [ print_char::ch#5 print_char::ch#3 print_char::ch#4 ]
zp ZP_WORD:14 [ char_cursor#124 char_cursor#212 char_cursor#208 char_cursor#209 char_cursor#210 char_cursor#230 char_cursor#292 char_cursor#293 char_cursor#203 char_cursor#102 char_cursor#125 char_cursor#297 char_cursor#298 char_cursor#302 char_cursor#303 char_cursor#138 char_cursor#1 char_cursor#204 char_cursor#206 char_cursor#346 ]
zp ZP_DWORD:16 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16s::return#0 mul16s::return#2 mul16s_compare::mn#0 mul16s_error::mn#0 mul16u::return#3 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#5 mul16u_compare::b#1 muls16u::b#0 mul16u_error::b#0 mulf8s::m#4 mulf8s::m#5 mulf8s::m#1 mulf8s::m#0 mulf8s::m#2 mulf8s::return#2 mul8s_compare::mf#0 mul8s_error::mf#0 mulf8u::return#2 mulf8u::return#0 mulf8u::return#3 mul8u_compare::mf#0 mul8u_error::mf#0 ]
zp ZP_DWORD:22 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
reg byte x [ mul16u_compare::i#9 mul16u_compare::i#1 ]
zp ZP_WORD:2 [ mul16u_compare::a#2 mul16u_compare::a#5 mul16u_compare::a#1 muls16u::a#0 mul16u_error::a#0 print_word::w#10 print_word::w#8 print_word::w#9 print_word::w#5 print_word::w#6 print_word::w#7 print_word::w#17 print_word::w#18 print_word::w#1 print_word::w#2 print_word::w#21 print_sword::w#5 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_sword::w#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_error::ms#0 mul8s_compare::ms#0 muls8s::return#2 muls8s::m#5 muls8s::return#0 muls8s::m#3 muls8s::m#1 muls8s::m#2 mul8u_error::ms#0 mul8u_compare::ms#0 muls8u::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:4 [ mul16u_compare::b#2 mul16u_compare::b#5 mul16u_compare::b#1 muls16u::b#0 mul16u::b#0 mul16u_error::b#0 mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s::return#2 mul8s_compare::mn#0 mul8s_error::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8u_compare::mn#0 mul8u_error::mn#0 mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
reg byte y [ mul16u_compare::j#2 mul16u_compare::j#1 ]
reg byte a [ mul16u_compare::ok#2 ]
zp ZP_WORD:6 [ line_cursor#29 line_cursor#57 line_cursor#1 line_cursor#11 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
zp ZP_WORD:8 [ print_str::str#21 print_str::str#23 print_str::str#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 muls16u::i#2 muls16u::i#1 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
zp ZP_DWORD:10 [ print_dword::dw#2 print_dword::dw#0 print_dword::dw#1 mul16u_error::ms#0 mul16u_compare::ms#0 muls16u::return#2 muls16u::return#0 muls16u::m#3 muls16u::m#1 ]
reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#9 print_byte::b#1 print_byte::b#2 ]
reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
zp ZP_WORD:14 [ char_cursor#103 char_cursor#174 char_cursor#172 char_cursor#189 char_cursor#239 char_cursor#240 char_cursor#167 char_cursor#166 char_cursor#104 char_cursor#244 char_cursor#245 char_cursor#116 char_cursor#1 char_cursor#168 char_cursor#170 char_cursor#282 ]
zp ZP_DWORD:16 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mul16u_compare::mn#0 mul16u_error::mn#0 ]
zp ZP_DWORD:20 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp ZP_BYTE:24 [ mul8s_compare::a#7 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 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_BYTE:25 [ mul8s_compare::b#10 mul8s_compare::b#1 mulf8s::b#0 mul8s_error::b#0 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ]
zp ZP_BYTE:26 [ mul8s_compare::a#7 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 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_BYTE:27 [ mul8s_compare::b#10 mul8s_compare::b#1 mulf8s::b#0 mul8s_error::b#0 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ]
reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ]
reg byte x [ print_sbyte::b#4 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#0 ]
reg byte a [ mul8u::b#2 mul8u::b#3 mul8u::b#1 ]
reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#8 mul8u::a#2 mul8u::a#0 ]
zp ZP_WORD:26 [ mulf8s::m#4 mulf8s::m#5 mulf8s::m#1 mulf8s::m#0 mulf8s::m#2 mulf8s::return#2 mul8s_compare::mf#0 mul8s_error::mf#0 mulf8u::return#2 mulf8u::return#0 mulf8u::return#3 mul8u_compare::mf#0 mul8u_error::mf#0 ]
reg byte a [ mulf8u::a#2 mulf8u::a#1 mulf8u::a#4 ]
reg byte x [ mulf8u::b#2 mulf8u::b#1 mulf8u::b#4 ]
reg byte y [ muls8s::i#2 muls8s::i#1 ]

View File

@ -9,8 +9,8 @@ main: {
sta b
sta b+1
b1:
lda b
clc
lda b
adc #<$28*8
sta b
lda b+1

View File

@ -254,9 +254,9 @@ main: {
lda #0
sta i
//SEG12 [5] phi (word) main::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1
lda #0
lda #<0
sta b
lda #0
lda #>0
sta b+1
jmp b1
//SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
@ -267,8 +267,8 @@ main: {
//SEG16 main::@1
b1:
//SEG17 [6] (word) main::b#1 ← (word) main::b#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ main::i#2 main::b#1 ] ( main:2 [ main::i#2 main::b#1 ] ) -- vwuz1=vwuz1_plus_vwuc1
lda b
clc
lda b
adc #<$28*8
sta b
lda b+1
@ -331,9 +331,9 @@ main: {
//SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
ldx #0
//SEG12 [5] phi (word) main::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1
lda #0
lda #<0
sta b
lda #0
lda #>0
sta b+1
jmp b1
//SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
@ -344,8 +344,8 @@ main: {
//SEG16 main::@1
b1:
//SEG17 [6] (word) main::b#1 ← (word) main::b#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ main::i#2 main::b#1 ] ( main:2 [ main::i#2 main::b#1 ] ) -- vwuz1=vwuz1_plus_vwuc1
lda b
clc
lda b
adc #<$28*8
sta b
lda b+1
@ -369,8 +369,8 @@ Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction lda #0 with TXA
Removing instruction lda #0
Replacing instruction lda #<0 with TXA
Removing instruction lda #>0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
@ -437,8 +437,8 @@ main: {
//SEG16 main::@1
b1:
//SEG17 [6] (word) main::b#1 ← (word) main::b#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ main::i#2 main::b#1 ] ( main:2 [ main::i#2 main::b#1 ] ) -- vwuz1=vwuz1_plus_vwuc1
lda b
clc
lda b
adc #<$28*8
sta b
lda b+1