1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +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 // Remainder after unsigned 16-bit division
word rem16u = 0; 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 // Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor. // Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u // 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; 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 // 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 // The 16-bit word remainder can be found in rem16u after the division
dword div32u16u(dword dividend, word divisor) { 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 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 = 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); 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] signed word sinx = (signed word)usinx; // s[0.15]
if(isUpper!=0) { if(isUpper!=0) {
sinx = -(signed word)usinx; // s[0.15]; sinx = -(signed word)usinx; // s[0.15];

View File

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

View File

@ -96,14 +96,6 @@ byte divr8u(byte dividend, byte divisor, byte rem) {
// Remainder after unsigned 16-bit division // Remainder after unsigned 16-bit division
word rem16u = 0; 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 // Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor. // Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u // 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; 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 // Remainder after signed 8 bit division
signed byte rem8s = 0; signed byte rem8s = 0;
@ -335,14 +344,6 @@ divr8u::@return:
return (byte) divr8u::return return (byte) divr8u::return
endproc // divr8u() endproc // divr8u()
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 (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) 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 (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 (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 (word) divr16u::return ← (word) divr16u::return
return (word) divr16u::return return (word) divr16u::return
endproc // divr16u() 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 (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) 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 (byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -707,6 +730,18 @@ SYMBOLS
(word) div16u::dividend (word) div16u::dividend
(word) div16u::divisor (word) div16u::divisor
(word) div16u::return (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) (signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor)
(boolean~) div8s::$0 (boolean~) div8s::$0
(boolean~) div8s::$1 (boolean~) div8s::$1
@ -995,18 +1030,6 @@ divr8u::@7: scope:[divr8u] from
@2: scope:[] from @1 @2: scope:[] from @1
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@3 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 divr16u: scope:[divr16u] from
(word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 (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 (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 to:@return
divr16u::@7: scope:[divr16u] from divr16u::@7: scope:[divr16u] from
to:divr16u::@return 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 @4: scope:[] from @3
(signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@5 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 div8s: scope:[div8s] from
(byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 (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 (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 to:div8s::@5
div8s::@14: scope:[div8s] from div8s::@14: scope:[div8s] from
to:div8s::@6 to:div8s::@6
@5: scope:[] from @4 @6: scope:[] from @5
(signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@6 to:@7
div16s: scope:[div16s] from div16s: scope:[div16s] from
(byte) div16s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 (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 (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 to:div16s::@5
div16s::@14: scope:[div16s] from div16s::@14: scope:[div16s] from
to:div16s::@6 to:div16s::@6
@6: scope:[] from @5 @7: scope:[] from @6
(byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor ← (byte*) SCREEN (byte*) line_cursor ← (byte*) SCREEN
(byte*) char_cursor ← (byte*) line_cursor (byte*) char_cursor ← (byte*) line_cursor
to:@7 to:@8
print_str: scope:[print_str] from print_str: scope:[print_str] from
to:print_str::@1 to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2 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 print_str::@return: scope:[print_str] from print_str::@3
return return
to:@return to:@return
@7: scope:[] from @6 @8: scope:[] from @7
to:@8 to:@9
print_ln: scope:[print_ln] from print_ln: scope:[print_ln] from
to:print_ln::@1 to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln 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 print_ln::@return: scope:[print_ln] from print_ln::@2
return return
to:@return to:@return
@8: scope:[] from @7 @9: scope:[] from @8
to:@9 to:@10
print_sword: scope:[print_sword] from 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::$0 ← (signed word) print_sword::w < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sword::$1 ← ! (boolean~) print_sword::$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 print_sword::@return: scope:[print_sword] from print_sword::@1
return return
to:@return to:@return
@9: scope:[] from @8 @10: scope:[] from @9
to:@10 to:@11
print_sbyte: scope:[print_sbyte] from 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::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sbyte::$1 ← ! (boolean~) print_sbyte::$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 print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@1
return return
to:@return to:@return
@10: scope:[] from @9 @11: scope:[] from @10
to:@11 to:@12
print_word: scope:[print_word] from print_word: scope:[print_word] from
(byte~) print_word::$0 ← > (word) print_word::w (byte~) print_word::$0 ← > (word) print_word::w
(void~) print_word::$1 ← call print_byte (byte~) print_word::$0 (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 print_word::@return: scope:[print_word] from print_word
return return
to:@return to:@return
@11: scope:[] from @10 @12: scope:[] from @11
to:@12 to:@13
print_dword: scope:[print_dword] from print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw (word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0 (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 print_dword::@return: scope:[print_dword] from print_dword
return return
to:@return to:@return
@12: scope:[] from @11 @13: scope:[] from @12
to:@13 to:@14
print_sdword: scope:[print_sdword] from 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::$0 ← (signed dword) print_sdword::dw < (byte/signed byte/word/signed word/dword/signed dword) 0
(boolean~) print_sdword::$1 ← ! (boolean~) print_sdword::$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 print_sdword::@return: scope:[print_sdword] from print_sdword::@1
return return
to:@return to:@return
@13: scope:[] from @12 @14: scope:[] from @13
to:@14 to:@15
print_byte: scope:[print_byte] from print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef" (byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4 (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 print_byte::@return: scope:[print_byte] from print_byte
return return
to:@return to:@return
@14: scope:[] from @13 @15: scope:[] from @14
to:@15 to:@16
print_char: scope:[print_char] from print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch *((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor (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 print_char::@return: scope:[print_char] from print_char
return return
to:@return to:@return
@15: scope:[] from @14 @16: scope:[] from @15
to:@16 to:@17
print_cls: scope:[print_cls] from print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN (byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1 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 print_cls::@return: scope:[print_cls] from print_cls::@2
return return
to:@return to:@return
@16: scope:[] from @15 @17: scope:[] from @16
to:@17 to:@18
main: scope:[main] from main: scope:[main] from
(word[20]) main::lintab1 ← { fill( 20, 0) } (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 (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 main::@return: scope:[main] from main::@2
return return
to:@return to:@return
@17: scope:[] from @16 @18: scope:[] from @17
to:@18 to:@19
lin16u_gen: scope:[lin16u_gen] from lin16u_gen: scope:[lin16u_gen] from
(word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min (word~) lin16u_gen::$0 ← (word) lin16u_gen::max - (word) lin16u_gen::min
(word) lin16u_gen::ampl ← (word~) lin16u_gen::$0 (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 lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@2
return return
to:@return to:@return
@18: scope:[] from @17 @19: scope:[] from @18
call main call main
to:@end to:@end
@end: scope:[] from @18 @end: scope:[] from @19
Removing unused procedure div32u16u
Removing unused procedure div8s Removing unused procedure div8s
Removing unused procedure div16s Removing unused procedure div16s
Removing unused procedure print_sword 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::str7 " @"
Creating constant string variable for inline (const string) main::str8 " @" Creating constant string variable for inline (const string) main::str8 " @"
Removing empty block @1 Removing empty block @1
Removing empty block @3
Removing empty block divr16u::@7 Removing empty block divr16u::@7
Removing empty block @3
Removing empty block @4 Removing empty block @4
Removing empty block @5 Removing empty block @5
Removing empty block @6
Removing empty block print_str::@4 Removing empty block print_str::@4
Removing empty block print_str::@3 Removing empty block print_str::@3
Removing empty block print_str::@5 Removing empty block print_str::@5
Removing empty block print_str::@6 Removing empty block print_str::@6
Removing empty block @7
Removing empty block @8 Removing empty block @8
Removing empty block @9 Removing empty block @9
Removing empty block @10 Removing empty block @10
@ -1517,6 +1571,7 @@ Removing empty block @14
Removing empty block @15 Removing empty block @15
Removing empty block @16 Removing empty block @16
Removing empty block @17 Removing empty block @17
Removing empty block @18
Removing empty block lin16u_gen::@2 Removing empty block lin16u_gen::@2
PROCEDURE MODIFY VARIABLE ANALYSIS PROCEDURE MODIFY VARIABLE ANALYSIS
divr16u modifies rem16u divr16u modifies rem16u
@ -1565,7 +1620,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
to:@2 to:@2
@2: scope:[] from @begin @2: scope:[] from @begin
(word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (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 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::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 ) (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 (word) rem16u#2 ← (word) rem16u#11
return return
to:@return to:@return
@6: scope:[] from @2 @7: scope:[] from @2
(word) rem16u#26 ← phi( @2/(word) rem16u#0 ) (word) rem16u#26 ← phi( @2/(word) rem16u#0 )
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0 (byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#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 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*) 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 ) (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 (byte*) char_cursor#14 ← (byte*) char_cursor#52
return return
to:@return to:@return
main: scope:[main] from @18 main: scope:[main] from @19
(byte*) char_cursor#89 ← phi( @18/(byte*) char_cursor#85 ) (byte*) char_cursor#89 ← phi( @19/(byte*) char_cursor#85 )
(byte*) line_cursor#35 ← phi( @18/(byte*) line_cursor#26 ) (byte*) line_cursor#35 ← phi( @19/(byte*) line_cursor#26 )
(word) rem16u#20 ← phi( @18/(word) rem16u#24 ) (word) rem16u#20 ← phi( @19/(word) rem16u#24 )
(word[20]) main::lintab1#0 ← { fill( 20, 0) } (word[20]) main::lintab1#0 ← { fill( 20, 0) }
(word) lin16u_gen::min#0 ← (word/signed word/dword/signed dword) 557 (word) lin16u_gen::min#0 ← (word/signed word/dword/signed dword) 557
(word) lin16u_gen::max#0 ← (word/signed word/dword/signed dword) 29793 (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 (word) rem16u#9 ← (word) rem16u#18
return return
to:@return to:@return
@18: scope:[] from @6 @19: scope:[] from @7
(byte*) char_cursor#85 ← phi( @6/(byte*) char_cursor#0 ) (byte*) char_cursor#85 ← phi( @7/(byte*) char_cursor#0 )
(byte*) line_cursor#26 ← phi( @6/(byte*) line_cursor#0 ) (byte*) line_cursor#26 ← phi( @7/(byte*) line_cursor#0 )
(word) rem16u#24 ← phi( @6/(word) rem16u#26 ) (word) rem16u#24 ← phi( @7/(word) rem16u#26 )
call main param-assignment call main param-assignment
to:@19 to:@20
@19: scope:[] from @18 @20: scope:[] from @19
(byte*) char_cursor#77 ← phi( @18/(byte*) char_cursor#38 ) (byte*) char_cursor#77 ← phi( @19/(byte*) char_cursor#38 )
(byte*) line_cursor#20 ← phi( @18/(byte*) line_cursor#9 ) (byte*) line_cursor#20 ← phi( @19/(byte*) line_cursor#9 )
(word) rem16u#19 ← phi( @18/(word) rem16u#6 ) (word) rem16u#19 ← phi( @19/(word) rem16u#6 )
(word) rem16u#10 ← (word) rem16u#19 (word) rem16u#10 ← (word) rem16u#19
(byte*) line_cursor#10 ← (byte*) line_cursor#20 (byte*) line_cursor#10 ← (byte*) line_cursor#20
(byte*) char_cursor#39 ← (byte*) char_cursor#77 (byte*) char_cursor#39 ← (byte*) char_cursor#77
to:@end to:@end
@end: scope:[] from @19 @end: scope:[] from @20
SYMBOL TABLE SSA SYMBOL TABLE SSA
(label) @18
(label) @19 (label) @19
(label) @2 (label) @2
(label) @6 (label) @20
(label) @7
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) SCREEN (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 Fixing inline constructor with lin16u_gen::$10 ← lin16u_gen::min#3 dw= 0
Succesful SSA optimization Pass2FixInlineConstructors Succesful SSA optimization Pass2FixInlineConstructors
Culled Empty Block (label) @2 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_ln::@2
Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_word::@2
Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@28 Culled Empty Block (label) main::@28
Culled Empty Block (label) @19 Culled Empty Block (label) @20
Succesful SSA optimization Pass2CullEmptyBlocks Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#1 Not aliassing across scopes: divr16u::dividend#5 divr16u::dividend#1
Not aliassing across scopes: divr16u::divisor#6 divr16u::divisor#0 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 lin16u_gen::lintab#0 = (const word[20]) main::lintab1#0
Constant inlined print_str::str#5 = (const string) main::str4 Constant inlined print_str::str#5 = (const string) main::str4
Succesful SSA optimization Pass2ConstantInlining 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 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_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) 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::@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::@9(between divr16u::@1 and divr16u::@2)
Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) 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 @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 @end
Adding NOP phi() at start of main Adding NOP phi() at start of main
Adding NOP phi() at start of main::@5 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::@8
Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@10
Culled Empty Block (label) divr16u::@9 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 @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 @end
Adding NOP phi() at start of main Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@3
@ -3444,14 +3499,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH FINAL CONTROL FLOW GRAPH
@begin: scope:[] from @begin: scope:[] from
[0] phi() [ ] ( ) [0] phi() [ ] ( )
to:@18 to:@19
@18: scope:[] from @begin @19: scope:[] from @begin
[1] phi() [ ] ( ) [1] phi() [ ] ( )
[2] call main param-assignment [ ] ( ) [2] call main param-assignment [ ] ( )
to:@end to:@end
@end: scope:[] from @18 @end: scope:[] from @19
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @18 main: scope:[main] from @19
[4] phi() [ ] ( main:2 [ ] ) [4] phi() [ ] ( main:2 [ ] )
[5] call lin16u_gen param-assignment [ divr16u::rem#11 ] ( main:2 [ divr16u::rem#11 ] ) [5] call lin16u_gen param-assignment [ divr16u::rem#11 ] ( main:2 [ divr16u::rem#11 ] )
to:main::@3 to:main::@3
@ -3718,66 +3773,66 @@ divr16u::@return: scope:[divr16u] from divr16u::@3
DOMINATORS DOMINATORS
@begin dominated by @begin @begin dominated by @begin
@18 dominated by @begin @18 @19 dominated by @begin @19
@end dominated by @end @begin @18 @end dominated by @end @begin @19
main dominated by main @begin @18 main dominated by main @begin @19
main::@3 dominated by main main::@3 @begin @18 main::@3 dominated by main main::@3 @begin @19
main::@4 dominated by main main::@3 main::@4 @begin @18 main::@4 dominated by main main::@3 main::@4 @begin @19
main::@5 dominated by main main::@5 main::@3 main::@4 @begin @18 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 @18 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 @18 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 @18 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 @18 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 @18 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 @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 @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 @18 main::@12 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 @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 @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 @18 main::@12 main::@14 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 @18 main::@12 main::@15 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 @18 main::@16 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 @18 main::@17 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 @18 main::@17 main::@16 main::@18 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 @18 main::@17 main::@16 main::@19 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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @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 @18 main::@12 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 @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 @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 @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 @19 main::@12
print_word dominated by main::@7 main print_word main::@5 main::@6 main::@3 main::@4 @begin @18 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 @18 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 @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 @19
print_byte dominated by main::@7 main main::@5 main::@6 main::@3 main::@4 @begin print_byte @18 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 @18 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 @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 @19
print_char dominated by main::@7 main print_char main::@5 main::@6 main::@3 main::@4 @begin print_byte @18 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 @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 @19
print_str dominated by main main::@5 main::@6 main::@3 main::@4 @begin @18 print_str 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 @18 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 @18 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 @18 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 @18 print_cls 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 @18 print_cls::@1 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 @18 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 @18 lin16u_gen lin16u_gen dominated by main @begin @19 lin16u_gen
lin16u_gen::@3 dominated by main @begin lin16u_gen::@3 @18 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 @18 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 @18 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 @18 lin16u_gen::@return 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 @18 lin16u_gen divr16u dominated by divr16u main @begin @19 lin16u_gen
divr16u::@1 dominated by divr16u divr16u::@1 main @begin @18 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 @18 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 @18 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 @18 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 @18 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 @18 lin16u_gen divr16u::@return divr16u::@return dominated by divr16u divr16u::@2 divr16u::@1 main divr16u::@3 @begin @19 lin16u_gen divr16u::@return
NATURAL LOOPS NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@21 blocks: null Found back edge: Loop head: main::@1 tails: main::@21 blocks: null
@ -4043,17 +4098,17 @@ INITIAL ASM
.label rem16u = $1f .label rem16u = $1f
//SEG2 @begin //SEG2 @begin
bbegin: bbegin:
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18] //SEG3 [1] phi from @begin to @19 [phi:@begin->@19]
b18_from_bbegin: b19_from_bbegin:
jmp b18 jmp b19
//SEG4 @18 //SEG4 @19
b18: b19:
//SEG5 [2] call main param-assignment [ ] ( ) //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]
main_from_b18: main_from_b19:
jsr main jsr main
//SEG7 [3] phi from @18 to @end [phi:@18->@end] //SEG7 [3] phi from @19 to @end [phi:@19->@end]
bend_from_b18: bend_from_b19:
jmp bend jmp bend
//SEG8 @end //SEG8 @end
bend: bend:
@ -5184,17 +5239,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label rem16u = 3 .label rem16u = 3
//SEG2 @begin //SEG2 @begin
bbegin: bbegin:
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18] //SEG3 [1] phi from @begin to @19 [phi:@begin->@19]
b18_from_bbegin: b19_from_bbegin:
jmp b18 jmp b19
//SEG4 @18 //SEG4 @19
b18: b19:
//SEG5 [2] call main param-assignment [ ] ( ) //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]
main_from_b18: main_from_b19:
jsr main jsr main
//SEG7 [3] phi from @18 to @end [phi:@18->@end] //SEG7 [3] phi from @19 to @end [phi:@19->@end]
bend_from_b18: bend_from_b19:
jmp bend jmp bend
//SEG8 @end //SEG8 @end
bend: bend:
@ -6129,7 +6184,7 @@ divr16u: {
} }
ASSEMBLER OPTIMIZATIONS ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b18 Removing instruction jmp b19
Removing instruction jmp bend Removing instruction jmp bend
Removing instruction jmp b3 Removing instruction jmp b3
Removing instruction jmp b4 Removing instruction jmp b4
@ -6205,9 +6260,9 @@ Replacing label b3_from_b2 with b3
Replacing label b3_from_b2 with b3 Replacing label b3_from_b2 with b3
Replacing label b1_from_b3 with b1 Replacing label b1_from_b3 with b1
Removing instruction bbegin: Removing instruction bbegin:
Removing instruction b18_from_bbegin: Removing instruction b19_from_bbegin:
Removing instruction main_from_b18: Removing instruction main_from_b19:
Removing instruction bend_from_b18: Removing instruction bend_from_b19:
Removing instruction b3_from_main: Removing instruction b3_from_main:
Removing instruction lin16u_gen_from_b3: Removing instruction lin16u_gen_from_b3:
Removing instruction b4_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_b2:
Removing instruction b3_from_b5: Removing instruction b3_from_b5:
Succesful ASM optimization Pass5RedundantLabelElimination Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b18: Removing instruction b19:
Removing instruction bend: Removing instruction bend:
Removing instruction lin16u_gen_from_main: Removing instruction lin16u_gen_from_main:
Removing instruction b3: Removing instruction b3:
@ -6327,7 +6382,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE FINAL SYMBOL TABLE
(label) @18 (label) @19
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) SCREEN (byte*) SCREEN
@ -6539,12 +6594,12 @@ Score: 13624
.label line_cursor = 3 .label line_cursor = 3
.label rem16u = 3 .label rem16u = 3
//SEG2 @begin //SEG2 @begin
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18] //SEG3 [1] phi from @begin to @19 [phi:@begin->@19]
//SEG4 @18 //SEG4 @19
//SEG5 [2] call main param-assignment [ ] ( ) //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 jsr main
//SEG7 [3] phi from @18 to @end [phi:@18->@end] //SEG7 [3] phi from @19 to @end [phi:@19->@end]
//SEG8 @end //SEG8 @end
//SEG9 main //SEG9 main
main: { main: {

View File

@ -1,4 +1,4 @@
(label) @18 (label) @19
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) SCREEN (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 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 = 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); 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] signed word sinx = (signed word)usinx; // s[0.15]
if(isUpper!=0) { if(isUpper!=0) {
sinx = -(signed word)usinx; // s[0.15]; 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 // Remainder after unsigned 16-bit division
word rem16u = 0; 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 // Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor. // Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u // 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; 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 // 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 // The 16-bit word remainder can be found in rem16u after the division
dword div32u16u(dword dividend, word divisor) { dword div32u16u(dword dividend, word divisor) {
@ -479,14 +479,6 @@ divr8u::@return:
return (byte) divr8u::return return (byte) divr8u::return
endproc // divr8u() endproc // divr8u()
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 (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) 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 (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 (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 (word) divr16u::return ← (word) divr16u::return
return (word) divr16u::return return (word) divr16u::return
endproc // divr16u() 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) proc (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(word~) div32u16u::$0 ← > (dword) div32u16u::dividend (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::$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 @2: scope:[] from @1
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@3 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 divr16u: scope:[divr16u] from
(word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 (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 (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 to:@return
divr16u::@7: scope:[divr16u] from divr16u::@7: scope:[divr16u] from
to:divr16u::@return 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 @4: scope:[] from @3
to:@5 to:@5
div32u16u: scope:[div32u16u] from 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::str " @"
Creating constant string variable for inline (const string) main::str1 " @" Creating constant string variable for inline (const string) main::str1 " @"
Removing empty block @1 Removing empty block @1
Removing empty block @3
Removing empty block divr16u::@7 Removing empty block divr16u::@7
Removing empty block @3
Removing empty block @4 Removing empty block @4
Removing empty block div32u16u::@1 Removing empty block div32u16u::@1
Removing empty block @5 Removing empty block @5

View File

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

View File

@ -1,13 +1,13 @@
@begin: scope:[] from @begin: scope:[] from
[0] phi() [ ] ( ) [0] phi() [ ] ( )
to:@21 to:@22
@21: scope:[] from @begin @22: scope:[] from @begin
[1] phi() [ ] ( ) [1] phi() [ ] ( )
[2] call main param-assignment [ ] ( ) [2] call main param-assignment [ ] ( )
to:@end to:@end
@end: scope:[] from @21 @end: scope:[] from @22
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @21 main: scope:[main] from @22
[4] phi() [ ] ( main:2 [ ] ) [4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] ) [5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1 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) 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::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 ] ) [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 ] ) [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#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 ] ) [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#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 ] ) [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#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 ] ) [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 to:div16u::@2
div16u::@2: scope:[div16u] from div16u 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 to:div16u::@return
div16u::@return: scope:[div16u] from div16u::@2 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 ] ) [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 to:@return
divr16u: scope:[divr16u] from div16u 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 to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 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] (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::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#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::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 ] ) [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 ] ) [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#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 ] ) [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#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 ] ) [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#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 ] ) [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 to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1 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 to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 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 ] ) [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#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 ] ) [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#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 ] ) [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#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#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 to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2 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 ] ) [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#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 ] ) [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 to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 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::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#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 ] ) [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#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 ] ) [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#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#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 to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@3 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 to:@return
test_8s: scope:[test_8s] from main::@3 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 ] ) [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) @begin
(label) @end (label) @end
(byte*) SCREEN (byte*) SCREEN
@ -131,8 +131,8 @@
(label) divr16u::@5 (label) divr16u::@5
(label) divr16u::@return (label) divr16u::@return
(word) divr16u::dividend (word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp ZP_WORD:3 1.3333333333333333 (word) divr16u::dividend#0 dividend zp ZP_WORD:3 25.25
(word) divr16u::dividend#1 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::dividend#2 dividend zp ZP_WORD:3 43.57142857142858
(word) divr16u::divisor (word) divr16u::divisor
(word) divr16u::divisor#0 divisor zp ZP_WORD:12 12.0 (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#2 quotient zp ZP_WORD:14 101.0
(word) divr16u::quotient#3 quotient zp ZP_WORD:14 25.25 (word) divr16u::quotient#3 quotient zp ZP_WORD:14 25.25
(word) divr16u::rem (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#10 rem zp ZP_WORD:16 3.8023255813953494
(word) divr16u::rem#2 rem zp ZP_WORD:16 202.0 (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#4 rem zp ZP_WORD:16 202.0
(word) divr16u::rem#5 rem zp ZP_WORD:16 101.0 (word) divr16u::rem#5 rem zp ZP_WORD:16 101.0
(word) divr16u::return (word) divr16u::return
(word) divr16u::return#0 return zp ZP_WORD:14 4.0 (word) divr16u::return#0 return zp ZP_WORD:14 61.0
(word) divr16u::return#1 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((byte) divr8u::dividend , (byte) divr8u::divisor , (byte) divr8u::rem)
(byte~) divr8u::$1 reg byte a 202.0 (byte~) divr8u::$1 reg byte a 202.0
(label) divr8u::@1 (label) divr8u::@1
@ -401,7 +401,7 @@
(const string) test_8u::str2 str2 = (string) " @" (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_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: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_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 ] 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: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 ] 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 ] 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: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#1 divr16u::rem#2 divr16u::rem#3 ] 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 [ divr16u::i#2 divr16u::i#1 ]
reg byte x [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ] reg byte x [ rem8s#18 rem8s#3 rem8s#33 rem8s#1 ]
reg byte y [ div8s::dividendu#3 div8s::dividendu#7 div8s::dividendu#8 ] reg byte y [ div8s::dividendu#3 div8s::dividendu#7 div8s::dividendu#8 ]