1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-02 09:29:35 +00:00

Syntax changes

This commit is contained in:
jespergravgaard 2018-02-25 00:39:19 +01:00
parent 651de919b3
commit 97bc9870f9
10 changed files with 919 additions and 809 deletions

View File

@ -38,14 +38,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) {
// Remainder after unsigned 16-bit division
word rem16u = 0;
// Performs division on two 16 bit unsigned words
// Returns the quotient dividend/divisor.
// The remainder will be set into the global variable rem16u
// Implemented using simple binary division
word div16u(word dividend, word divisor) {
return divr16u(dividend, divisor, 0);
}
// Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
@ -68,6 +60,14 @@ word divr16u(word dividend, word divisor, word rem) {
return quotient;
}
// Performs division on two 16 bit unsigned words
// Returns the quotient dividend/divisor.
// The remainder will be set into the global variable rem16u
// Implemented using simple binary division
word div16u(word dividend, word divisor) {
return divr16u(dividend, divisor, 0);
}
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
dword div32u16u(dword dividend, word divisor) {

View File

@ -74,7 +74,7 @@ signed word sin16s(dword x) {
word x4 = mul_u16_sel(x3, x1, 0); // u[3.13] x^4
word x5 = mul_u16_sel(x4, x1, 0); // u[4.12] x^5
word x5_128 = x5>>4; // // u[1.15] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3);
usinx = usinx + x5_128; // u[1.15] (always an initial zero)
usinx = usinx + x5_128; // u[1.15] (first bit is always zero)
signed word sinx = (signed word)usinx; // s[0.15]
if(isUpper!=0) {
sinx = -(signed word)usinx; // s[0.15];

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 lin16u_gen param-assignment [ divr16u::rem#11 ] ( main:2 [ divr16u::rem#11 ] )
to:main::@3

View File

@ -96,14 +96,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) {
// Remainder after unsigned 16-bit division
word rem16u = 0;
// Performs division on two 16 bit unsigned words
// Returns the quotient dividend/divisor.
// The remainder will be set into the global variable rem16u
// Implemented using simple binary division
word div16u(word dividend, word divisor) {
return divr16u(dividend, divisor, 0);
}
// Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
@ -126,6 +118,23 @@ word divr16u(word dividend, word divisor, word rem) {
return quotient;
}
// Performs division on two 16 bit unsigned words
// Returns the quotient dividend/divisor.
// The remainder will be set into the global variable rem16u
// Implemented using simple binary division
word div16u(word dividend, word divisor) {
return divr16u(dividend, divisor, 0);
}
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
dword div32u16u(dword dividend, word divisor) {
word quotient_hi = divr16u(>dividend, divisor, 0);
word quotient_lo = divr16u(<dividend, divisor, rem16u);
dword quotient = { quotient_hi, quotient_lo};
return quotient;
}
// Remainder after signed 8 bit division
signed byte rem8s = 0;
@ -335,14 +344,6 @@ divr8u::@return:
return (byte) divr8u::return
endproc // divr8u()
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor)
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
goto div16u::@return
div16u::@return:
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
endproc // div16u()
proc (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -378,6 +379,28 @@ divr16u::@return:
(word) divr16u::return ← (word) divr16u::return
return (word) divr16u::return
endproc // divr16u()
proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor)
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
goto div16u::@return
div16u::@return:
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
endproc // div16u()
proc (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(word~) div32u16u::$0 ← > (dword) div32u16u::dividend
(word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div32u16u::quotient_hi ← (word~) div32u16u::$1
(word~) div32u16u::$2 ← < (dword) div32u16u::dividend
(word~) div32u16u::$3 ← call divr16u (word~) div32u16u::$2 (word) div32u16u::divisor (word) rem16u
(word) div32u16u::quotient_lo ← (word~) div32u16u::$3
(dword) div32u16u::quotient ← { (word) div32u16u::quotient_hi, (word) div32u16u::quotient_lo }
(dword) div32u16u::return ← (dword) div32u16u::quotient
goto div32u16u::@return
div32u16u::@return:
(dword) div32u16u::return ← (dword) div32u16u::return
return (dword) div32u16u::return
endproc // div32u16u()
(signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0
proc (signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor)
(byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -707,6 +730,18 @@ SYMBOLS
(word) div16u::dividend
(word) div16u::divisor
(word) div16u::return
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(word~) div32u16u::$0
(word~) div32u16u::$1
(word~) div32u16u::$2
(word~) div32u16u::$3
(label) div32u16u::@return
(dword) div32u16u::dividend
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_lo
(dword) div32u16u::return
(signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor)
(boolean~) div8s::$0
(boolean~) div8s::$1
@ -995,18 +1030,6 @@ divr8u::@7: scope:[divr8u] from
@2: scope:[] from @1
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@3
div16u: scope:[div16u] from
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
to:div16u::@return
div16u::@return: scope:[div16u] from div16u div16u::@1
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
to:@return
div16u::@1: scope:[div16u] from
to:div16u::@return
@3: scope:[] from @2
to:@4
divr16u: scope:[divr16u] from
(word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1053,9 +1076,39 @@ divr16u::@return: scope:[divr16u] from divr16u::@6 divr16u::@7
to:@return
divr16u::@7: scope:[divr16u] from
to:divr16u::@return
@3: scope:[] from @2
to:@4
div16u: scope:[div16u] from
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
to:div16u::@return
div16u::@return: scope:[div16u] from div16u div16u::@1
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
to:@return
div16u::@1: scope:[div16u] from
to:div16u::@return
@4: scope:[] from @3
(signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@5
div32u16u: scope:[div32u16u] from
(word~) div32u16u::$0 ← > (dword) div32u16u::dividend
(word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div32u16u::quotient_hi ← (word~) div32u16u::$1
(word~) div32u16u::$2 ← < (dword) div32u16u::dividend
(word~) div32u16u::$3 ← call divr16u (word~) div32u16u::$2 (word) div32u16u::divisor (word) rem16u
(word) div32u16u::quotient_lo ← (word~) div32u16u::$3
(dword) div32u16u::quotient ← { (word) div32u16u::quotient_hi, (word) div32u16u::quotient_lo }
(dword) div32u16u::return ← (dword) div32u16u::quotient
to:div32u16u::@return
div32u16u::@return: scope:[div32u16u] from div32u16u div32u16u::@1
(dword) div32u16u::return ← (dword) div32u16u::return
return (dword) div32u16u::return
to:@return
div32u16u::@1: scope:[div32u16u] from
to:div32u16u::@return
@5: scope:[] from @4
(signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@6
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
@ -1127,9 +1180,9 @@ div8s::@13: scope:[div8s] from
to:div8s::@5
div8s::@14: scope:[div8s] from
to:div8s::@6
@5: scope:[] from @4
@6: scope:[] from @5
(signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@6
to:@7
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
@ -1201,11 +1254,11 @@ div16s::@13: scope:[div16s] from
to:div16s::@5
div16s::@14: scope:[div16s] from
to:div16s::@6
@6: scope:[] from @5
@7: scope:[] from @6
(byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor ← (byte*) SCREEN
(byte*) char_cursor ← (byte*) line_cursor
to:@7
to:@8
print_str: scope:[print_str] from
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
@ -1228,8 +1281,8 @@ print_str::@6: scope:[print_str] from
print_str::@return: scope:[print_str] from print_str::@3
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_ln: scope:[print_ln] from
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
@ -1244,8 +1297,8 @@ print_ln::@2: scope:[print_ln] from print_ln::@1
print_ln::@return: scope:[print_ln] from print_ln::@2
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
print_sword: scope:[print_sword] from
(boolean~) print_sword::$0 ← (signed word) print_sword::w < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sword::$1 ← ! (boolean~) print_sword::$0
@ -1263,8 +1316,8 @@ print_sword::@2: scope:[print_sword] from print_sword
print_sword::@return: scope:[print_sword] from print_sword::@1
return
to:@return
@9: scope:[] from @8
to:@10
@10: scope:[] from @9
to:@11
print_sbyte: scope:[print_sbyte] from
(boolean~) print_sbyte::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sbyte::$1 ← ! (boolean~) print_sbyte::$0
@ -1282,8 +1335,8 @@ print_sbyte::@2: scope:[print_sbyte] from print_sbyte
print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@1
return
to:@return
@10: scope:[] from @9
to:@11
@11: scope:[] from @10
to:@12
print_word: scope:[print_word] from
(byte~) print_word::$0 ← > (word) print_word::w
(void~) print_word::$1 ← call print_byte (byte~) print_word::$0
@ -1293,8 +1346,8 @@ print_word: scope:[print_word] from
print_word::@return: scope:[print_word] from print_word
return
to:@return
@11: scope:[] from @10
to:@12
@12: scope:[] from @11
to:@13
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
@ -1304,8 +1357,8 @@ print_dword: scope:[print_dword] from
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@12: scope:[] from @11
to:@13
@13: scope:[] from @12
to:@14
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
@ -1323,8 +1376,8 @@ print_sdword::@2: scope:[print_sdword] from print_sdword
print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return
to:@return
@13: scope:[] from @12
to:@14
@14: scope:[] from @13
to:@15
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
@ -1335,8 +1388,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@14: scope:[] from @13
to:@15
@15: scope:[] from @14
to:@16
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -1344,8 +1397,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@15: scope:[] from @14
to:@16
@16: scope:[] from @15
to:@17
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -1363,8 +1416,8 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@16: scope:[] from @15
to:@17
@17: scope:[] from @16
to:@18
main: scope:[main] from
(word[20]) main::lintab1 ← { fill( 20, 0) }
(void~) main::$0 ← call lin16u_gen (word/signed word/dword/signed dword) 557 (word/signed word/dword/signed dword) 29793 (word[20]) main::lintab1 (byte/signed byte/word/signed word/dword/signed dword) 20
@ -1409,8 +1462,8 @@ main::@2: scope:[main] from main::@1
main::@return: scope:[main] from main::@2
return
to:@return
@17: scope:[] from @16
to:@18
@18: scope:[] from @17
to:@19
lin16u_gen: scope:[lin16u_gen] from
(word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min
(word) lin16u_gen::ampl ← (word~) lin16u_gen::$0
@ -1440,11 +1493,12 @@ lin16u_gen::@2: scope:[lin16u_gen] from lin16u_gen::@1
lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@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 div32u16u
Removing unused procedure div8s
Removing unused procedure div16s
Removing unused procedure print_sword
@ -1498,15 +1552,15 @@ Creating constant string variable for inline (const string) main::str6 " @"
Creating constant string variable for inline (const string) main::str7 " @"
Creating constant string variable for inline (const string) main::str8 " @"
Removing empty block @1
Removing empty block @3
Removing empty block divr16u::@7
Removing empty block @3
Removing empty block @4
Removing empty block @5
Removing empty block @6
Removing empty block print_str::@4
Removing empty block print_str::@3
Removing empty block print_str::@5
Removing empty block print_str::@6
Removing empty block @7
Removing empty block @8
Removing empty block @9
Removing empty block @10
@ -1517,6 +1571,7 @@ Removing empty block @14
Removing empty block @15
Removing empty block @16
Removing empty block @17
Removing empty block @18
Removing empty block lin16u_gen::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
divr16u modifies rem16u
@ -1565,7 +1620,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
to:@2
@2: scope:[] from @begin
(word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@6
to:@7
divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3
(word) divr16u::divisor#6 ← phi( lin16u_gen/(word) divr16u::divisor#0 lin16u_gen::@3/(word) divr16u::divisor#1 )
(word) divr16u::dividend#5 ← phi( lin16u_gen/(word) divr16u::dividend#1 lin16u_gen::@3/(word) divr16u::dividend#2 )
@ -1643,12 +1698,12 @@ divr16u::@return: scope:[divr16u] from divr16u::@6
(word) rem16u#2 ← (word) rem16u#11
return
to:@return
@6: scope:[] from @2
@7: scope:[] from @2
(word) rem16u#26 ← phi( @2/(word) rem16u#0 )
(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:@18
to:@19
print_str: scope:[print_str] from main::@10 main::@14 main::@16 main::@18 main::@2 main::@23 main::@25 main::@6 main::@8
(byte*) char_cursor#86 ← phi( main::@10/(byte*) char_cursor#19 main::@14/(byte*) char_cursor#23 main::@16/(byte*) char_cursor#25 main::@18/(byte*) char_cursor#27 main::@2/(byte*) char_cursor#84 main::@23/(byte*) char_cursor#32 main::@25/(byte*) char_cursor#34 main::@6/(byte*) char_cursor#15 main::@8/(byte*) char_cursor#17 )
(byte*) print_str::str#12 ← phi( main::@10/(byte*) print_str::str#3 main::@14/(byte*) print_str::str#4 main::@16/(byte*) print_str::str#5 main::@18/(byte*) print_str::str#6 main::@2/(byte*) print_str::str#7 main::@23/(byte*) print_str::str#8 main::@25/(byte*) print_str::str#9 main::@6/(byte*) print_str::str#1 main::@8/(byte*) print_str::str#2 )
@ -1776,10 +1831,10 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#14 ← (byte*) char_cursor#52
return
to:@return
main: scope:[main] from @18
(byte*) char_cursor#89 ← phi( @18/(byte*) char_cursor#85 )
(byte*) line_cursor#35 ← phi( @18/(byte*) line_cursor#26 )
(word) rem16u#20 ← phi( @18/(word) rem16u#24 )
main: scope:[main] from @19
(byte*) char_cursor#89 ← phi( @19/(byte*) char_cursor#85 )
(byte*) line_cursor#35 ← phi( @19/(byte*) line_cursor#26 )
(word) rem16u#20 ← phi( @19/(word) rem16u#24 )
(word[20]) main::lintab1#0 ← { fill( 20, 0) }
(word) lin16u_gen::min#0 ← (word/signed word/dword/signed dword) 557
(word) lin16u_gen::max#0 ← (word/signed word/dword/signed dword) 29793
@ -2102,27 +2157,27 @@ lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1
(word) rem16u#9 ← (word) rem16u#18
return
to:@return
@18: scope:[] from @6
(byte*) char_cursor#85 ← phi( @6/(byte*) char_cursor#0 )
(byte*) line_cursor#26 ← phi( @6/(byte*) line_cursor#0 )
(word) rem16u#24 ← phi( @6/(word) rem16u#26 )
@19: scope:[] from @7
(byte*) char_cursor#85 ← phi( @7/(byte*) char_cursor#0 )
(byte*) line_cursor#26 ← phi( @7/(byte*) line_cursor#0 )
(word) rem16u#24 ← phi( @7/(word) rem16u#26 )
call main param-assignment
to:@19
@19: scope:[] from @18
(byte*) char_cursor#77 ← phi( @18/(byte*) char_cursor#38 )
(byte*) line_cursor#20 ← phi( @18/(byte*) line_cursor#9 )
(word) rem16u#19 ← phi( @18/(word) rem16u#6 )
to:@20
@20: scope:[] from @19
(byte*) char_cursor#77 ← phi( @19/(byte*) char_cursor#38 )
(byte*) line_cursor#20 ← phi( @19/(byte*) line_cursor#9 )
(word) rem16u#19 ← phi( @19/(word) rem16u#6 )
(word) rem16u#10 ← (word) rem16u#19
(byte*) line_cursor#10 ← (byte*) line_cursor#20
(byte*) char_cursor#39 ← (byte*) char_cursor#77
to:@end
@end: scope:[] from @19
@end: scope:[] from @20
SYMBOL TABLE SSA
(label) @18
(label) @19
(label) @2
(label) @6
(label) @20
(label) @7
(label) @begin
(label) @end
(byte*) SCREEN
@ -3038,14 +3093,14 @@ Fixing inline constructor with lin16u_gen::$9 ← lin16u_gen::stepi#0 dw= lin16u
Fixing inline constructor with lin16u_gen::$10 ← lin16u_gen::min#3 dw= 0
Succesful SSA optimization Pass2FixInlineConstructors
Culled Empty Block (label) @2
Culled Empty Block (label) @6
Culled Empty Block (label) @7
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) print_cls::@2
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@28
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#1
Not aliassing across scopes: divr16u::divisor#6 divr16u::divisor#0
@ -3283,7 +3338,7 @@ Constant inlined print_str::str#6 = (const string) main::str5
Constant inlined lin16u_gen::lintab#0 = (const word[20]) main::lintab1#0
Constant inlined print_str::str#5 = (const string) main::str4
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @18 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 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 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return
Block Sequence Planned @begin @19 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 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 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return
Added new block during phi lifting main::@29(between main::@21 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)
@ -3291,9 +3346,9 @@ Added new block during phi lifting lin16u_gen::@5(between lin16u_gen::@1 and lin
Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1)
Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2)
Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3)
Block Sequence Planned @begin @18 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return main::@29 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 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return lin16u_gen::@5 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9
Block Sequence Planned @begin @19 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return main::@29 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 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return lin16u_gen::@5 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9
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::@5
@ -3398,9 +3453,9 @@ Culled Empty Block (label) divr16u::@6
Culled Empty Block (label) divr16u::@8
Culled Empty Block (label) divr16u::@10
Culled Empty Block (label) divr16u::@9
Block Sequence Planned @begin @18 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 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 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return
Block Sequence Planned @begin @19 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 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 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@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::@3
@ -3444,14 +3499,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 lin16u_gen param-assignment [ divr16u::rem#11 ] ( main:2 [ divr16u::rem#11 ] )
to:main::@3
@ -3718,66 +3773,66 @@ divr16u::@return: scope:[divr16u] from divr16u::@3
DOMINATORS
@begin dominated by @begin
@18 dominated by @begin @18
@end dominated by @end @begin @18
main dominated by main @begin @18
main::@3 dominated by main main::@3 @begin @18
main::@4 dominated by main main::@3 main::@4 @begin @18
main::@5 dominated by main main::@5 main::@3 main::@4 @begin @18
main::@6 dominated by main main::@5 main::@6 main::@3 main::@4 @begin @18
main::@7 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin @18
main::@8 dominated by main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @18
main::@9 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @18
main::@10 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@10 @18
main::@11 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18
main::@12 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12
main::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@16 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@17 main::@16 main::@12 main::@15 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@17 main::@16 main::@18 main::@12 main::@15 main::@14
main::@19 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@20 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@21 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@2 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@22 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@23 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@23 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@24 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@25 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@26 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@27 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@return main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @18 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @18 main::@12
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @18 main::@12
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @18 main::@12
print_word dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin @18
print_word::@1 dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@1 @18
print_word::@return dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@return print_word::@1 @18
print_byte dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte @18
print_byte::@1 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@1 print_byte @18
print_byte::@return dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@return print_byte::@1 print_byte @18
print_char dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 @begin print_byte @18
print_char::@return dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 print_char::@return @begin print_byte @18
print_str dominated by main main::@5 main::@6 main::@3 main::@4 @begin @18 print_str
print_str::@1 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 @18 print_str
print_str::@return dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@return print_str::@1 @18 print_str
print_str::@2 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 print_str::@2 @18 print_str
print_cls dominated by main main::@5 main::@3 main::@4 @begin @18 print_cls
print_cls::@1 dominated by main main::@5 main::@3 main::@4 @begin @18 print_cls::@1 print_cls
print_cls::@return dominated by main main::@5 main::@3 main::@4 @begin print_cls::@return @18 print_cls::@1 print_cls
lin16u_gen dominated by main @begin @18 lin16u_gen
lin16u_gen::@3 dominated by main @begin lin16u_gen::@3 @18 lin16u_gen
lin16u_gen::@4 dominated by main @begin lin16u_gen::@3 lin16u_gen::@4 @18 lin16u_gen
lin16u_gen::@1 dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @18 lin16u_gen
lin16u_gen::@return dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @18 lin16u_gen::@return lin16u_gen
divr16u dominated by divr16u main @begin @18 lin16u_gen
divr16u::@1 dominated by divr16u divr16u::@1 main @begin @18 lin16u_gen
divr16u::@4 dominated by divr16u divr16u::@1 main divr16u::@4 @begin @18 lin16u_gen
divr16u::@2 dominated by divr16u divr16u::@2 divr16u::@1 main @begin @18 lin16u_gen
divr16u::@5 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@5 @begin @18 lin16u_gen
divr16u::@3 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @18 lin16u_gen
divr16u::@return dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @18 lin16u_gen divr16u::@return
@19 dominated by @begin @19
@end dominated by @end @begin @19
main dominated by main @begin @19
main::@3 dominated by main main::@3 @begin @19
main::@4 dominated by main main::@3 main::@4 @begin @19
main::@5 dominated by main main::@5 main::@3 main::@4 @begin @19
main::@6 dominated by main main::@5 main::@6 main::@3 main::@4 @begin @19
main::@7 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin @19
main::@8 dominated by main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @19
main::@9 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin @19
main::@10 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@10 @19
main::@11 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19
main::@12 dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12
main::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@16 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@17 main::@16 main::@12 main::@15 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@17 main::@16 main::@18 main::@12 main::@15 main::@14
main::@19 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@20 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@21 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@2 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@21 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@22 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@23 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@23 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@24 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@25 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@26 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@27 dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@20 main::@return main::@22 main::@21 main::@27 main::@24 main::@23 main::@26 main::@25 main::@11 main::@10 @19 main::@17 main::@16 main::@19 main::@18 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @19 main::@12
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @19 main::@12
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@5 main::@6 main::@3 main::@4 @begin print_ln main::@11 main::@10 @19 main::@12
print_word dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin @19
print_word::@1 dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@1 @19
print_word::@return dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin print_word::@return print_word::@1 @19
print_byte dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte @19
print_byte::@1 dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@1 print_byte @19
print_byte::@return dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte::@return print_byte::@1 print_byte @19
print_char dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 @begin print_byte @19
print_char::@return dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 print_char::@return @begin print_byte @19
print_str dominated by main main::@5 main::@6 main::@3 main::@4 @begin @19 print_str
print_str::@1 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 @19 print_str
print_str::@return dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@return print_str::@1 @19 print_str
print_str::@2 dominated by main main::@5 main::@6 main::@3 main::@4 @begin print_str::@1 print_str::@2 @19 print_str
print_cls dominated by main main::@5 main::@3 main::@4 @begin @19 print_cls
print_cls::@1 dominated by main main::@5 main::@3 main::@4 @begin @19 print_cls::@1 print_cls
print_cls::@return dominated by main main::@5 main::@3 main::@4 @begin print_cls::@return @19 print_cls::@1 print_cls
lin16u_gen dominated by main @begin @19 lin16u_gen
lin16u_gen::@3 dominated by main @begin lin16u_gen::@3 @19 lin16u_gen
lin16u_gen::@4 dominated by main @begin lin16u_gen::@3 lin16u_gen::@4 @19 lin16u_gen
lin16u_gen::@1 dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @19 lin16u_gen
lin16u_gen::@return dominated by main @begin lin16u_gen::@3 lin16u_gen::@1 lin16u_gen::@4 @19 lin16u_gen::@return lin16u_gen
divr16u dominated by divr16u main @begin @19 lin16u_gen
divr16u::@1 dominated by divr16u divr16u::@1 main @begin @19 lin16u_gen
divr16u::@4 dominated by divr16u divr16u::@1 main divr16u::@4 @begin @19 lin16u_gen
divr16u::@2 dominated by divr16u divr16u::@2 divr16u::@1 main @begin @19 lin16u_gen
divr16u::@5 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@5 @begin @19 lin16u_gen
divr16u::@3 dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @19 lin16u_gen
divr16u::@return dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @19 lin16u_gen divr16u::@return
NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@21 blocks: null
@ -4043,17 +4098,17 @@ INITIAL ASM
.label rem16u = $1f
//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:
@ -5184,17 +5239,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label rem16u = 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:
@ -6129,7 +6184,7 @@ divr16u: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b18
Removing instruction jmp b19
Removing instruction jmp bend
Removing instruction jmp b3
Removing instruction jmp b4
@ -6205,9 +6260,9 @@ Replacing label b3_from_b2 with b3
Replacing label b3_from_b2 with b3
Replacing label b1_from_b3 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 b3_from_main:
Removing instruction lin16u_gen_from_b3:
Removing instruction b4_from_b3:
@ -6261,7 +6316,7 @@ Removing instruction b2_from_b4:
Removing instruction b3_from_b2:
Removing instruction b3_from_b5:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b18:
Removing instruction b19:
Removing instruction bend:
Removing instruction lin16u_gen_from_main:
Removing instruction b3:
@ -6327,7 +6382,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @18
(label) @19
(label) @begin
(label) @end
(byte*) SCREEN
@ -6539,12 +6594,12 @@ Score: 13624
.label line_cursor = 3
.label rem16u = 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: {

View File

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

View File

@ -75,7 +75,7 @@ signed word sin16s(dword x) {
word x4 = mul_u16_sel(x3, x1, 0); // u[3.13] x^4
word x5 = mul_u16_sel(x4, x1, 0); // u[4.12] x^5
word x5_128 = x5>>4; // // u[1.15] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3);
usinx = usinx + x5_128; // u[1.15] (always an initial zero)
usinx = usinx + x5_128; // u[1.15] (first bit is always zero)
signed word sinx = (signed word)usinx; // s[0.15]
if(isUpper!=0) {
sinx = -(signed word)usinx; // s[0.15];
@ -172,14 +172,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) {
// Remainder after unsigned 16-bit division
word rem16u = 0;
// Performs division on two 16 bit unsigned words
// Returns the quotient dividend/divisor.
// The remainder will be set into the global variable rem16u
// Implemented using simple binary division
word div16u(word dividend, word divisor) {
return divr16u(dividend, divisor, 0);
}
// Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
@ -202,6 +194,14 @@ word divr16u(word dividend, word divisor, word rem) {
return quotient;
}
// Performs division on two 16 bit unsigned words
// Returns the quotient dividend/divisor.
// The remainder will be set into the global variable rem16u
// Implemented using simple binary division
word div16u(word dividend, word divisor) {
return divr16u(dividend, divisor, 0);
}
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
dword div32u16u(dword dividend, word divisor) {
@ -479,14 +479,6 @@ divr8u::@return:
return (byte) divr8u::return
endproc // divr8u()
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor)
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
goto div16u::@return
div16u::@return:
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
endproc // div16u()
proc (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -522,6 +514,14 @@ divr16u::@return:
(word) divr16u::return ← (word) divr16u::return
return (word) divr16u::return
endproc // divr16u()
proc (word()) div16u((word) div16u::dividend , (word) div16u::divisor)
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
goto div16u::@return
div16u::@return:
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
endproc // div16u()
proc (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(word~) div32u16u::$0 ← > (dword) div32u16u::dividend
(word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1550,18 +1550,6 @@ divr8u::@7: scope:[divr8u] from
@2: scope:[] from @1
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@3
div16u: scope:[div16u] from
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
to:div16u::@return
div16u::@return: scope:[div16u] from div16u div16u::@1
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
to:@return
div16u::@1: scope:[div16u] from
to:div16u::@return
@3: scope:[] from @2
to:@4
divr16u: scope:[divr16u] from
(word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1608,6 +1596,18 @@ divr16u::@return: scope:[divr16u] from divr16u::@6 divr16u::@7
to:@return
divr16u::@7: scope:[divr16u] from
to:divr16u::@return
@3: scope:[] from @2
to:@4
div16u: scope:[div16u] from
(word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::return ← (word~) div16u::$0
to:div16u::@return
div16u::@return: scope:[div16u] from div16u div16u::@1
(word) div16u::return ← (word) div16u::return
return (word) div16u::return
to:@return
div16u::@1: scope:[div16u] from
to:div16u::@return
@4: scope:[] from @3
to:@5
div32u16u: scope:[div32u16u] from
@ -2360,8 +2360,8 @@ Creating constant string variable for inline (const string) print_byte::$4 "0123
Creating constant string variable for inline (const string) main::str " @"
Creating constant string variable for inline (const string) main::str1 " @"
Removing empty block @1
Removing empty block @3
Removing empty block divr16u::@7
Removing empty block @3
Removing empty block @4
Removing empty block div32u16u::@1
Removing empty block @5

View File

@ -270,11 +270,11 @@ div16u: {
rts
}
divr16u: {
.label dividend = 3
.label divisor = $c
.label return = $e
.label rem = $10
.label dividend = 3
.label quotient = $e
.label return = $e
.label divisor = $c
ldx #0
txa
sta quotient

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@21
@21: scope:[] from @begin
to:@22
@22: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @21
@end: scope:[] from @22
[3] phi() [ ] ( )
main: scope:[main] from @21
main: scope:[main] from @22
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -221,51 +221,51 @@ div16u: scope:[div16u] from div16s::@4 test_16u::@1
[106] (word) rem16u#31 ← phi( div16s::@4/(word) divr16u::rem#10 test_16u::@1/(word) rem16u#35 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] )
[106] (word) div16u::divisor#2 ← phi( div16s::@4/(word) div16u::divisor#0 test_16u::@1/(word) div16u::divisor#1 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] )
[106] (word) div16u::dividend#2 ← phi( div16s::@4/(word) div16u::dividend#0 test_16u::@1/(word) div16u::dividend#1 ) [ div16u::dividend#2 div16u::divisor#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::dividend#2 div16u::divisor#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::dividend#2 div16u::divisor#2 ] )
[107] (word) divr16u::dividend#0 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#0 ] )
[108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] )
[109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] )
[110] (word) divr16u::return#0 ← (word) divr16u::return#1 [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] )
[107] (word) divr16u::dividend#1 ← (word) div16u::dividend#2 [ div16u::divisor#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::divisor#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::divisor#2 divr16u::dividend#1 ] )
[108] (word) divr16u::divisor#0 ← (word) div16u::divisor#2 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] )
[109] call divr16u param-assignment [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] )
[110] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16u::return#2 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#2 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#2 ] )
to:div16u::@2
div16u::@2: scope:[div16u] from div16u
[111] (word) div16u::return#0 ← (word) divr16u::return#0 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] )
[111] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] )
to:div16u::@return
div16u::@return: scope:[div16u] from div16u::@2
[112] return [ div16u::return#0 divr16u::rem#10 ] ( main:2::test_16s:13::div16s:21::div16u:94 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 div16u::return#0 divr16u::rem#10 ] main:2::test_16u:9::div16u:220 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 div16u::return#0 divr16u::rem#10 ] )
to:@return
divr16u: scope:[divr16u] from div16u
[113] phi() [ divr16u::dividend#0 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#0 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#0 divr16u::divisor#0 ] )
[113] phi() [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::dividend#1 divr16u::divisor#0 ] )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[114] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] )
[114] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] )
[114] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#0 divr16u::@3/(word) divr16u::dividend#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] )
[114] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] )
[114] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] )
[114] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] )
[115] (word) divr16u::rem#1 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] )
[116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$1 ] )
[117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 divr16u::$2 ] )
[118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] )
[115] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] )
[116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] )
[117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] )
[118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] )
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[119] (word) divr16u::rem#2 ← (word) divr16u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#2 ] )
[119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] )
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[120] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#1 divr16u::@4/(word) divr16u::rem#2 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] )
[121] (word) divr16u::dividend#1 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 ] )
[122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] )
[123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#1 ] )
[120] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] )
[121] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] )
[122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] )
[123] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] )
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::rem#5 divr16u::quotient#2 ] )
[125] (word) divr16u::rem#3 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#1 divr16u::quotient#2 divr16u::rem#3 ] )
[124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] )
[125] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] )
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[126] (word) divr16u::return#1 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] )
[126] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#3 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::i#2 divr16u::dividend#1 ] )
[127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] )
[128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#1 divr16u::dividend#1 divr16u::i#1 ] )
[126] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] )
[126] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] )
[127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] )
[128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] )
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@3
[129] return [ divr16u::rem#10 divr16u::return#1 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#1 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#1 ] )
[129] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::test_16s:13::div16s:21::div16u:94::divr16u:109 [ test_16s::i#10 test_16s::dividend#0 test_16s::divisor#0 line_cursor#1 div16s::neg#4 divr16u::rem#10 divr16u::return#0 ] main:2::test_16u:9::div16u:220::divr16u:109 [ divr8u::rem#10 line_cursor#1 test_16u::i#10 test_16u::dividend#0 test_16u::divisor#0 divr16u::rem#10 divr16u::return#0 ] )
to:@return
test_8s: scope:[test_8s] from main::@3
[130] phi() [ line_cursor#1 divr8u::rem#10 ] ( main:2::test_8s:11 [ divr16u::rem#10 line_cursor#1 divr8u::rem#10 ] )

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
(label) @21
(label) @22
(label) @begin
(label) @end
(byte*) SCREEN
@ -131,8 +131,8 @@
(label) divr16u::@5
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp ZP_WORD:3 1.3333333333333333
(word) divr16u::dividend#1 dividend zp ZP_WORD:3 25.25
(word) divr16u::dividend#0 dividend zp ZP_WORD:3 25.25
(word) divr16u::dividend#1 dividend zp ZP_WORD:3 1.3333333333333333
(word) divr16u::dividend#2 dividend zp ZP_WORD:3 43.57142857142858
(word) divr16u::divisor
(word) divr16u::divisor#0 divisor zp ZP_WORD:12 12.0
@ -144,15 +144,15 @@
(word) divr16u::quotient#2 quotient zp ZP_WORD:14 101.0
(word) divr16u::quotient#3 quotient zp ZP_WORD:14 25.25
(word) divr16u::rem
(word) divr16u::rem#1 rem zp ZP_WORD:16 75.75
(word) divr16u::rem#0 rem zp ZP_WORD:16 75.75
(word) divr16u::rem#1 rem zp ZP_WORD:16 202.0
(word) divr16u::rem#10 rem zp ZP_WORD:16 3.8023255813953494
(word) divr16u::rem#2 rem zp ZP_WORD:16 202.0
(word) divr16u::rem#3 rem zp ZP_WORD:16 202.0
(word) divr16u::rem#4 rem zp ZP_WORD:16 202.0
(word) divr16u::rem#5 rem zp ZP_WORD:16 101.0
(word) divr16u::return
(word) divr16u::return#0 return zp ZP_WORD:14 4.0
(word) divr16u::return#1 return zp ZP_WORD:14 61.0
(word) divr16u::return#0 return zp ZP_WORD:14 61.0
(word) divr16u::return#2 return zp ZP_WORD:14 4.0
(byte()) divr8u((byte) divr8u::dividend , (byte) divr8u::divisor , (byte) divr8u::rem)
(byte~) divr8u::$1 reg byte a 202.0
(label) divr8u::@1
@ -401,7 +401,7 @@
(const string) test_8u::str2 str2 = (string) " @"
zp ZP_BYTE:2 [ test_16s::i#10 test_16s::i#1 test_8s::i#10 test_8s::i#1 test_16u::i#10 test_16u::i#1 test_8u::i#10 test_8u::i#1 ]
zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#0 divr16u::dividend#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:3 [ rem16s#17 rem16s#3 rem16s#32 rem16s#1 div16s::dividendu#3 div16s::dividendu#7 div16s::dividendu#8 div16u::dividend#2 div16u::dividend#0 div16u::dividend#1 div16s::dividend#0 div16s::$2 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:5 [ line_cursor#20 line_cursor#39 line_cursor#1 line_cursor#41 ]
zp ZP_WORD:7 [ print_sword::w#6 print_sword::w#5 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_sword::w#4 print_sword::w#0 print_word::w#5 print_word::w#7 print_word::w#1 print_word::w#2 print_word::w#3 print_word::w#4 test_16s::dividend#0 test_16u::dividend#0 print_str::str#13 print_str::str#15 print_str::str#0 ]
zp ZP_BYTE:9 [ print_byte::b#7 print_byte::b#9 print_byte::b#1 print_byte::b#2 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#6 print_sbyte::b#6 print_sbyte::b#5 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#3 print_sbyte::b#4 print_sbyte::b#0 test_8u::dividend#0 test_8s::dividend#0 ]
@ -409,8 +409,8 @@ reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
zp ZP_WORD:10 [ char_cursor#80 char_cursor#133 char_cursor#130 char_cursor#132 char_cursor#128 char_cursor#129 char_cursor#155 char_cursor#126 char_cursor#17 char_cursor#162 char_cursor#135 char_cursor#131 char_cursor#1 char_cursor#179 char_cursor#185 ]
zp ZP_WORD:12 [ div16s::divisoru#3 div16s::divisoru#4 div16s::divisoru#5 div16u::divisor#2 div16u::divisor#0 div16u::divisor#1 div16s::divisor#0 div16s::$7 divr16u::divisor#0 test_16u::divisor#0 ]
reg byte y [ div16s::neg#4 div16s::neg#3 div16s::neg#2 ]
zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#1 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#0 div16u::return#3 test_16u::res#0 ]
zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#1 divr16u::rem#2 divr16u::rem#3 ]
zp ZP_WORD:14 [ div16s::return#2 div16s::return#6 div16s::return#0 div16s::resultu#0 div16s::return#3 test_16s::res#0 div16u::return#2 div16u::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#3 test_16u::res#0 ]
zp ZP_WORD:16 [ divr16u::rem#4 rem16u#31 divr16u::rem#10 rem16u#35 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
reg byte x [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ]
reg byte y [ div8s::dividendu#3 div8s::dividendu#7 div8s::dividendu#8 ]