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

Finished constant string consolidation. Closes #90

This commit is contained in:
jespergravgaard 2019-02-24 23:23:57 +01:00
parent fe0035af82
commit 0a955d6bec
39 changed files with 4479 additions and 4638 deletions

View File

@ -239,13 +239,13 @@ public class Compiler {
optimizations.add(new PassNVariableReferenceInfos(program));
optimizations.add(new Pass2ConstantAdditionElimination(program));
optimizations.add(new Pass2ConstantIfs(program));
optimizations.add(new Pass2ConstantStringConsolidation(program));
optimizations.add(new Pass2FixInlineConstructors(program));
optimizations.add(new Pass2TypeInference(program));
optimizations.add(new PassNEliminateUnusedVars(program));
optimizations.add(new Pass2NopCastElimination(program));
optimizations.add(new Pass2EliminateUnusedBlocks(program));
optimizations.add(new Pass2RangeResolving(program));
optimizations.add(new Pass2ConstantStringConsolidation(program));
pass2Execute(optimizations);
}
@ -286,6 +286,7 @@ public class Compiler {
constantOptimizations.add(new Pass2ConstantSimplification(program));
constantOptimizations.add(new Pass2ConstantIfs(program));
pass2Execute(constantOptimizations);
}
/**
@ -390,7 +391,6 @@ public class Compiler {
private void pass4RegisterAllocation() {
if(getLog().isVerboseLoopAnalysis()) {
getLog().append("DOMINATORS");
}

View File

@ -2,7 +2,12 @@ package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.symbols.ConstantVar;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.model.symbols.ProgramScope;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.values.ConstantRef;
import dk.camelot64.kickc.model.values.ConstantString;
import dk.camelot64.kickc.model.values.ConstantValue;
import dk.camelot64.kickc.model.values.ScopeRef;
import java.util.ArrayList;
import java.util.HashMap;
@ -33,7 +38,7 @@ public class Pass2ConstantStringConsolidation extends Pass2SsaOptimization {
if(constVal instanceof ConstantString) {
String constString = ((ConstantString) constVal).getString();
List<ConstantVar> constantVars = constantStringMap.get(constString);
if(constantVars==null) {
if(constantVars == null) {
constantVars = new ArrayList<>();
constantStringMap.put(constString, constantVars);
}
@ -41,11 +46,11 @@ public class Pass2ConstantStringConsolidation extends Pass2SsaOptimization {
}
}
// Handle all constant strings with duplicate definitions
for(String str : constantStringMap.keySet()) {
List<ConstantVar> constantVars = constantStringMap.get(str);
if(constantVars.size()>1) {
for(String constantString : constantStringMap.keySet()) {
List<ConstantVar> constantVars = constantStringMap.get(constantString);
if(constantVars.size() > 1) {
// Found duplicate constant strings
modified |= handleDuplicateConstantString(constantVars);
modified |= handleDuplicateConstantString(constantVars, constantString);
}
}
@ -54,20 +59,45 @@ public class Pass2ConstantStringConsolidation extends Pass2SsaOptimization {
/**
* Handle duplicate constants strings with identical values
*
* @param constantVars The constant strings with identical values
* @return true if any optimization was performed
*/
private boolean handleDuplicateConstantString(List<ConstantVar> constantVars) {
private boolean handleDuplicateConstantString(List<ConstantVar> constantVars, String constString) {
boolean modified = false;
// Look for a constant in the root scope
// Look for a constant in the root scope - or check if they are all in the same scope
ConstantVar rootConstant = null;
boolean isCommonScope = true;
ScopeRef commonScope = null;
for(ConstantVar constantVar : constantVars) {
if(constantVar.getScope().getRef().equals(ScopeRef.ROOT)) {
ScopeRef constScope = constantVar.getScope().getRef();
if(constScope.equals(ScopeRef.ROOT)) {
rootConstant = constantVar;
break;
}
if(commonScope == null) {
commonScope = constScope;
} else {
if(!commonScope.equals(constScope)) {
// Found two different scopes
isCommonScope = false;
}
}
}
if(rootConstant == null) {
if(isCommonScope) {
// If all constants are in the same scope pick the first one as root
rootConstant = constantVars.get(0);
} else {
// Create a new root - and roll around again
ProgramScope rootScope = getScope();
String localName = getRootName(constantVars);
ConstantVar newRootConstant = new ConstantVar(localName, rootScope, SymbolType.STRING, new ConstantString(constString));
rootScope.add(newRootConstant);
rootConstant = newRootConstant;
}
}
if(rootConstant!=null) {
// Modify all other constants to be references to the root constant
for(ConstantVar constantVar : constantVars) {
if(!constantVar.equals(rootConstant)) {
@ -75,8 +105,37 @@ public class Pass2ConstantStringConsolidation extends Pass2SsaOptimization {
modified = true;
}
}
if(getLog().isVerboseSSAOptimize()) {
getLog().append("Consolidated constant strings into " + rootConstant);
}
return modified;
}
private String getRootName(List<ConstantVar> constantVars) {
String constName = null;
// Try all variables with non-intermediate names
for(ConstantVar constantVar : constantVars) {
if(!constantVar.getRef().isIntermediate()) {
String candidateName = constantVar.getLocalName();
if(getScope().getSymbol(candidateName) == null) {
if(constName == null || constName.length() > candidateName.length()) {
constName = candidateName;
}
}
}
}
if(constName != null) {
return constName;
}
// Try string_nn until an unused name is found
int i = 0;
do {
String candidateName = "string_" + i;
if(getScope().getSymbol(candidateName) == null) {
return candidateName;
}
} while(true);
}
}

View File

@ -44,6 +44,11 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test
public void testStringConstConsolidationNoRoot() throws IOException, URISyntaxException {
compileAndCompare("string-const-consolidation-noroot");
}
@Test
public void testStringConstConsolidation() throws IOException, URISyntaxException {
compileAndCompare("string-const-consolidation");

View File

@ -0,0 +1,17 @@
// Tests that identical strings are consolidated
byte* screen = $400;
void main() {
byte[] rex1 = "rex@";
byte[] rex2 = "rex@";
print(rex1);
print(rex2);
print("rex@");
}
void print(byte* string) {
while(*string!='@') {
*screen++ = *string++;
}
}

View File

@ -4,7 +4,7 @@ byte[] rex1 = "rex@";
byte* screen = $400;
void main() {
byte[] rex2 = rex1;
byte[] rex2 = "rex@";
print(rex1);
print(rex2);
print("rex@");

View File

@ -1051,93 +1051,88 @@ form_mode: {
render_preset_name: {
.label name = 3
cmp #0
beq b1
beq b33
cmp #1
beq b2
beq b1
cmp #2
beq b3
beq b2
cmp #3
beq b4
beq b3
cmp #4
beq b5
beq b4
cmp #5
beq b6
beq b5
cmp #6
beq b7
beq b6
cmp #7
beq b8
beq b7
cmp #8
beq b9
beq b8
cmp #9
beq b10
beq b9
cmp #$a
beq b11
lda #<name_11
sta name
lda #>name_11
sta name+1
jmp b22
b1:
beq b10
b33:
lda #<name_0
sta name
lda #>name_0
sta name+1
jmp b22
b2:
b1:
lda #<name_1
sta name
lda #>name_1
sta name+1
jmp b22
b3:
b2:
lda #<name_2
sta name
lda #>name_2
sta name+1
jmp b22
b4:
b3:
lda #<name_3
sta name
lda #>name_3
sta name+1
jmp b22
b5:
b4:
lda #<name_4
sta name
lda #>name_4
sta name+1
jmp b22
b6:
b5:
lda #<name_5
sta name
lda #>name_5
sta name+1
jmp b22
b7:
b6:
lda #<name_6
sta name
lda #>name_6
sta name+1
jmp b22
b8:
b7:
lda #<name_7
sta name
lda #>name_7
sta name+1
jmp b22
b9:
b8:
lda #<name_8
sta name
lda #>name_8
sta name+1
jmp b22
b10:
b9:
lda #<name_9
sta name
lda #>name_9
sta name+1
jmp b22
b11:
b10:
lda #<name_10
sta name
lda #>name_10
@ -1156,7 +1151,6 @@ render_preset_name: {
name_8: .text "Sixs Fred @"
name_9: .text "Sixs Fred 2 @"
name_10: .text "8bpp Pixel Cell @"
name_11: .text "Standard Charset @"
}
// Print a string at a specific screen position
// print_str_at(byte* zeropage(3) str, byte* zeropage(5) at)

View File

@ -602,7 +602,7 @@ render_preset_name::@33: scope:[render_preset_name] from render_preset_name::@3
[318] phi()
to:render_preset_name::@22
render_preset_name::@22: scope:[render_preset_name] from render_preset_name render_preset_name::@23 render_preset_name::@24 render_preset_name::@25 render_preset_name::@26 render_preset_name::@27 render_preset_name::@28 render_preset_name::@29 render_preset_name::@30 render_preset_name::@31 render_preset_name::@32 render_preset_name::@33
[319] (byte*) render_preset_name::name#12 ← phi( render_preset_name/(const byte*) render_preset_name::name#0 render_preset_name::@31/(const byte*) render_preset_name::name#9 render_preset_name::@32/(const byte*) render_preset_name::name#10 render_preset_name::@23/(const byte*) render_preset_name::name#1 render_preset_name::@24/(const byte*) render_preset_name::name#2 render_preset_name::@33/(const byte*) render_preset_name::name#11 render_preset_name::@25/(const byte*) render_preset_name::name#3 render_preset_name::@26/(const byte*) render_preset_name::name#4 render_preset_name::@27/(const byte*) render_preset_name::name#5 render_preset_name::@28/(const byte*) render_preset_name::name#6 render_preset_name::@29/(const byte*) render_preset_name::name#7 render_preset_name::@30/(const byte*) render_preset_name::name#8 )
[319] (byte*) render_preset_name::name#12 ← phi( render_preset_name/(const byte*) render_preset_name::name#0 render_preset_name::@31/(const byte*) render_preset_name::name#9 render_preset_name::@32/(const byte*) render_preset_name::name#10 render_preset_name::@23/(const byte*) render_preset_name::name#1 render_preset_name::@24/(const byte*) render_preset_name::name#2 render_preset_name::@33/(const byte*) render_preset_name::name#0 render_preset_name::@25/(const byte*) render_preset_name::name#3 render_preset_name::@26/(const byte*) render_preset_name::name#4 render_preset_name::@27/(const byte*) render_preset_name::name#5 render_preset_name::@28/(const byte*) render_preset_name::name#6 render_preset_name::@29/(const byte*) render_preset_name::name#7 render_preset_name::@30/(const byte*) render_preset_name::name#8 )
[320] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#12
[321] call print_str_at
to:render_preset_name::@return

File diff suppressed because it is too large Load Diff

View File

@ -1545,7 +1545,6 @@
(const byte*) render_preset_name::name#0 name#0 = (string) "Standard Charset @"
(const byte*) render_preset_name::name#1 name#1 = (string) "Extended Color Charset @"
(const byte*) render_preset_name::name#10 name#10 = (string) "8bpp Pixel Cell @"
(const byte*) render_preset_name::name#11 name#11 = (string) "Standard Charset @"
(byte*) render_preset_name::name#12 name zp ZP_WORD:3 2.0
(const byte*) render_preset_name::name#2 name#2 = (string) "Standard Bitmap @"
(const byte*) render_preset_name::name#3 name#3 = (string) "Multicolor Bitmap @"

View File

@ -7955,6 +7955,7 @@ Removing PHI-reference to removed block (menu::@3) in block menu::@return
if() condition always true - replacing block destination [232] if(true) goto menu::@4
if() condition always true - replacing block destination [297] if(true) goto mode_ctrl::@2
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization Pass2ConstantStringConsolidation
Fixing inline constructor with bitmap_clear::$3 ← *(bitmap_plot_xhi#0 + 0) w= *(bitmap_plot_xlo#0 + 0)
Fixing inline constructor with bitmap_plot::$2 ← *(bitmap_plot_xhi#0 + bitmap_plot::x#4) w= *(bitmap_plot_xlo#0 + bitmap_plot::x#4)
Fixing inline constructor with bitmap_plot::$3 ← *(bitmap_plot_yhi#0 + bitmap_plot::y#4) w= *(bitmap_plot_ylo#0 + bitmap_plot::y#4)

View File

@ -62,8 +62,6 @@ test_sbytes: {
sta assert_sbyte.msg+1
jsr assert_sbyte
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=-2@"
msg3: .text "-(0+2-4)=2@"
msg4: .text "-127-127=2@"
@ -101,9 +99,6 @@ assert_sbyte: {
sta print_str.str+1
jsr print_str
jmp b2
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
// Print a zero-terminated string
// print_str(byte* zeropage(2) str)
@ -195,8 +190,6 @@ test_bytes: {
sta assert_byte.msg+1
jsr assert_byte
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=254@"
}
// assert_byte(byte* zeropage(2) msg, byte register(X) b, byte zeropage(4) c)
@ -228,9 +221,6 @@ assert_byte: {
sta print_str.str+1
jsr print_str
jmp b2
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
// Clear the screen. Also resets current line/char cursor.
print_cls: {
@ -255,3 +245,8 @@ print_cls: {
bne b1
rts
}
str: .text " @"
str2: .text "ok@"
msg1: .text "0+2=2@"
msg: .text "0=0@"
str1: .text "fail!@"

View File

@ -48,7 +48,7 @@ test_sbytes::@return: scope:[test_sbytes] from test_sbytes::@4
assert_sbyte: scope:[assert_sbyte] from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
[22] (signed byte) assert_sbyte::c#5 ← phi( test_sbytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_sbytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@2/-(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@3/(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@4/(byte/signed byte/word/signed word/dword/signed dword) 2 )
[22] (signed byte) assert_sbyte::b#5 ← phi( test_sbytes/(const signed byte) test_sbytes::bb#0 test_sbytes::@1/(const signed byte) test_sbytes::bc#0 test_sbytes::@2/(const signed byte) test_sbytes::bd#0 test_sbytes::@3/(const signed byte) test_sbytes::be#0 test_sbytes::@4/(const signed byte) test_sbytes::bf#0 )
[22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) test_sbytes::msg test_sbytes::@1/(const string) test_sbytes::msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
[22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) msg test_sbytes::@1/(const string) msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
[23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
[24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1
[25] call print_str
@ -77,7 +77,7 @@ assert_sbyte::@1: scope:[assert_sbyte] from assert_sbyte::@6
to:assert_sbyte::@2
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
[36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@5/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#87 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@5/(byte*) print_char_cursor#2 )
[36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) assert_byte::str1 assert_byte::@3/(const string) assert_byte::str2 assert_byte::@5/(const string) assert_byte::str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) assert_sbyte::str1 assert_sbyte::@3/(const string) assert_sbyte::str2 assert_sbyte::@5/(const string) assert_sbyte::str )
[36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) str1 assert_byte::@3/(const string) str2 assert_byte::@5/(const string) str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) str1 assert_sbyte::@3/(const string) str2 assert_sbyte::@5/(const string) str )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
@ -123,7 +123,7 @@ assert_byte: scope:[assert_byte] from test_bytes test_bytes::@1 test_bytes::@2
[55] (byte) assert_byte::c#3 ← phi( test_bytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_bytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_bytes::@2/(byte/word/signed word/dword/signed dword) 254 )
[55] (byte) assert_byte::b#3 ← phi( test_bytes/(const byte) test_bytes::bb#0 test_bytes::@1/(const byte) test_bytes::bc#0 test_bytes::@2/(const byte) test_bytes::bd#0 )
[55] (byte*) print_char_cursor#70 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*~) print_char_cursor#93 test_bytes::@2/(byte*~) print_char_cursor#94 )
[55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) test_bytes::msg test_bytes::@1/(const string) test_bytes::msg1 test_bytes::@2/(const string) test_bytes::msg2 )
[55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) msg test_bytes::@1/(const string) msg1 test_bytes::@2/(const string) test_bytes::msg2 )
[56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
[57] call print_str
to:assert_byte::@5

View File

@ -921,6 +921,7 @@ Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) assert_byte::b#2 = test_bytes::bd#0
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization Pass2ConstantStringConsolidation
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Culled Empty Block (label) print_ln::@2
@ -971,13 +972,17 @@ Inlining constant with var siblings (const signed byte) assert_sbyte::b#4
Inlining constant with var siblings (const signed byte) assert_sbyte::b#3
Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined test_bytes::msg = (const string) msg
Constant inlined test_sbytes::msg = (const string) msg
Constant inlined assert_sbyte::b#2 = (const signed byte) test_sbytes::bd#0
Constant inlined assert_sbyte::c#1 = (byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined assert_sbyte::b#1 = (const signed byte) test_sbytes::bc#0
Constant inlined assert_sbyte::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined assert_byte::b#0 = (const byte) test_bytes::bb#0
Constant inlined assert_sbyte::str1 = (const string) str1
Constant inlined assert_sbyte::b#0 = (const signed byte) test_sbytes::bb#0
Constant inlined assert_byte::b#1 = (const byte) test_bytes::bc#0
Constant inlined assert_sbyte::str2 = (const string) str2
Constant inlined assert_byte::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined assert_byte::b#2 = (const byte) test_bytes::bd#0
Constant inlined assert_byte::c#1 = (byte/signed byte/word/signed word/dword/signed dword) 2
@ -991,22 +996,28 @@ Constant inlined assert_sbyte::b#3 = (const signed byte) test_sbytes::be#0
Constant inlined assert_sbyte::c#2 = -(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined test_sbytes::$8 = -(byte/signed byte/word/signed word/dword/signed dword) 127
Constant inlined test_sbytes::$9 = -(byte/signed byte/word/signed word/dword/signed dword) 127-(byte/signed byte/word/signed word/dword/signed dword) 127
Constant inlined assert_byte::msg#0 = (const string) test_bytes::msg
Constant inlined assert_byte::msg#1 = (const string) test_bytes::msg1
Constant inlined assert_byte::str2 = (const string) str2
Constant inlined assert_byte::msg#0 = (const string) msg
Constant inlined test_sbytes::msg1 = (const string) msg1
Constant inlined assert_byte::str1 = (const string) str1
Constant inlined assert_byte::msg#1 = (const string) msg1
Constant inlined assert_byte::msg#2 = (const string) test_bytes::msg2
Constant inlined assert_sbyte::msg#0 = (const string) test_sbytes::msg
Constant inlined assert_sbyte::msg#1 = (const string) test_sbytes::msg1
Constant inlined assert_sbyte::msg#0 = (const string) msg
Constant inlined assert_sbyte::msg#1 = (const string) msg1
Constant inlined assert_sbyte::msg#2 = (const string) test_sbytes::msg2
Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined assert_sbyte::msg#3 = (const string) test_sbytes::msg3
Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined print_str::str#4 = (const string) assert_byte::str2
Constant inlined assert_sbyte::str = (const string) str
Constant inlined assert_byte::str = (const string) str
Constant inlined test_bytes::msg1 = (const string) msg1
Constant inlined print_str::str#4 = (const string) str2
Constant inlined assert_sbyte::msg#4 = (const string) test_sbytes::msg4
Constant inlined print_str::str#3 = (const string) assert_byte::str1
Constant inlined print_str::str#2 = (const string) assert_byte::str
Constant inlined print_str::str#8 = (const string) assert_sbyte::str2
Constant inlined print_str::str#7 = (const string) assert_sbyte::str1
Constant inlined print_str::str#6 = (const string) assert_sbyte::str
Constant inlined print_str::str#3 = (const string) str1
Constant inlined print_str::str#2 = (const string) str
Constant inlined print_str::str#8 = (const string) str2
Constant inlined print_str::str#7 = (const string) str1
Constant inlined print_str::str#6 = (const string) str
Successful SSA optimization Pass2ConstantInlining
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)
@ -1127,7 +1138,7 @@ test_sbytes::@return: scope:[test_sbytes] from test_sbytes::@4
assert_sbyte: scope:[assert_sbyte] from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
[22] (signed byte) assert_sbyte::c#5 ← phi( test_sbytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_sbytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@2/-(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@3/(byte/signed byte/word/signed word/dword/signed dword) 2 test_sbytes::@4/(byte/signed byte/word/signed word/dword/signed dword) 2 )
[22] (signed byte) assert_sbyte::b#5 ← phi( test_sbytes/(const signed byte) test_sbytes::bb#0 test_sbytes::@1/(const signed byte) test_sbytes::bc#0 test_sbytes::@2/(const signed byte) test_sbytes::bd#0 test_sbytes::@3/(const signed byte) test_sbytes::be#0 test_sbytes::@4/(const signed byte) test_sbytes::bf#0 )
[22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) test_sbytes::msg test_sbytes::@1/(const string) test_sbytes::msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
[22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) msg test_sbytes::@1/(const string) msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
[23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
[24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1
[25] call print_str
@ -1156,7 +1167,7 @@ assert_sbyte::@1: scope:[assert_sbyte] from assert_sbyte::@6
to:assert_sbyte::@2
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
[36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@5/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#87 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@5/(byte*) print_char_cursor#2 )
[36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) assert_byte::str1 assert_byte::@3/(const string) assert_byte::str2 assert_byte::@5/(const string) assert_byte::str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) assert_sbyte::str1 assert_sbyte::@3/(const string) assert_sbyte::str2 assert_sbyte::@5/(const string) assert_sbyte::str )
[36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) str1 assert_byte::@3/(const string) str2 assert_byte::@5/(const string) str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) str1 assert_sbyte::@3/(const string) str2 assert_sbyte::@5/(const string) str )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
@ -1202,7 +1213,7 @@ assert_byte: scope:[assert_byte] from test_bytes test_bytes::@1 test_bytes::@2
[55] (byte) assert_byte::c#3 ← phi( test_bytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_bytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_bytes::@2/(byte/word/signed word/dword/signed dword) 254 )
[55] (byte) assert_byte::b#3 ← phi( test_bytes/(const byte) test_bytes::bb#0 test_bytes::@1/(const byte) test_bytes::bc#0 test_bytes::@2/(const byte) test_bytes::bd#0 )
[55] (byte*) print_char_cursor#70 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*~) print_char_cursor#93 test_bytes::@2/(byte*~) print_char_cursor#94 )
[55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) test_bytes::msg test_bytes::@1/(const string) test_bytes::msg1 test_bytes::@2/(const string) test_bytes::msg2 )
[55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) msg test_bytes::@1/(const string) msg1 test_bytes::@2/(const string) test_bytes::msg2 )
[56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
[57] call print_str
to:assert_byte::@5
@ -1408,7 +1419,7 @@ test_sbytes: {
//SEG27 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsz1=vbsc1
lda #bb
sta assert_sbyte.b
//SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
//SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg
sta assert_sbyte.msg
lda #>msg
@ -1428,7 +1439,7 @@ test_sbytes: {
//SEG34 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsz1=vbsc1
lda #bc
sta assert_sbyte.b
//SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
//SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg1
sta assert_sbyte.msg
lda #>msg1
@ -1499,8 +1510,6 @@ test_sbytes: {
breturn:
//SEG58 [21] return
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=-2@"
msg3: .text "-(0+2-4)=2@"
msg4: .text "-127-127=2@"
@ -1536,7 +1545,7 @@ assert_sbyte: {
//SEG69 [36] phi from assert_sbyte::@5 to print_str [phi:assert_sbyte::@5->print_str]
print_str_from_b5:
//SEG70 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@5->print_str#0] -- register_copy
//SEG71 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1
//SEG71 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -1558,7 +1567,7 @@ assert_sbyte: {
//SEG77 [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
print_str_from_b3:
//SEG78 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy
//SEG79 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1
//SEG79 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -1589,16 +1598,13 @@ assert_sbyte: {
//SEG90 [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
print_str_from_b1:
//SEG91 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy
//SEG92 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1
//SEG92 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
sta print_str.str+1
jsr print_str
jmp b2_from_b1
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
//SEG93 print_str
// Print a zero-terminated string
@ -1700,7 +1706,7 @@ test_bytes: {
sta print_char_cursor
lda #>$400
sta print_char_cursor+1
//SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1
//SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1
lda #<msg
sta assert_byte.msg
lda #>msg
@ -1725,7 +1731,7 @@ test_bytes: {
lda #bc
sta assert_byte.b
//SEG128 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
//SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
lda #<msg1
sta assert_byte.msg
lda #>msg1
@ -1761,8 +1767,6 @@ test_bytes: {
breturn:
//SEG140 [54] return
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=254@"
}
//SEG141 assert_byte
@ -1791,7 +1795,7 @@ assert_byte: {
//SEG150 [36] phi from assert_byte::@5 to print_str [phi:assert_byte::@5->print_str]
print_str_from_b5:
//SEG151 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@5->print_str#0] -- register_copy
//SEG152 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1
//SEG152 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -1813,7 +1817,7 @@ assert_byte: {
//SEG158 [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
print_str_from_b3:
//SEG159 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy
//SEG160 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1
//SEG160 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -1844,16 +1848,13 @@ assert_byte: {
//SEG171 [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
print_str_from_b1:
//SEG172 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy
//SEG173 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1
//SEG173 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
sta print_str.str+1
jsr print_str
jmp b2_from_b1
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
//SEG174 print_cls
// Clear the screen. Also resets current line/char cursor.
@ -1895,6 +1896,11 @@ print_cls: {
//SEG184 [73] return
rts
}
str: .text " @"
str2: .text "ok@"
msg1: .text "0+2=2@"
msg: .text "0=0@"
str1: .text "fail!@"
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -2051,7 +2057,7 @@ test_sbytes: {
sta assert_sbyte.c
//SEG27 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1
ldx #bb
//SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
//SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg
sta assert_sbyte.msg
lda #>msg
@ -2070,7 +2076,7 @@ test_sbytes: {
sta assert_sbyte.c
//SEG34 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1
ldx #bc
//SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
//SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg1
sta assert_sbyte.msg
lda #>msg1
@ -2138,8 +2144,6 @@ test_sbytes: {
breturn:
//SEG58 [21] return
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=-2@"
msg3: .text "-(0+2-4)=2@"
msg4: .text "-127-127=2@"
@ -2170,7 +2174,7 @@ assert_sbyte: {
//SEG69 [36] phi from assert_sbyte::@5 to print_str [phi:assert_sbyte::@5->print_str]
print_str_from_b5:
//SEG70 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@5->print_str#0] -- register_copy
//SEG71 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1
//SEG71 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -2191,7 +2195,7 @@ assert_sbyte: {
//SEG77 [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
print_str_from_b3:
//SEG78 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy
//SEG79 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1
//SEG79 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -2222,16 +2226,13 @@ assert_sbyte: {
//SEG90 [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
print_str_from_b1:
//SEG91 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy
//SEG92 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1
//SEG92 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
sta print_str.str+1
jsr print_str
jmp b2_from_b1
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
//SEG93 print_str
// Print a zero-terminated string
@ -2332,7 +2333,7 @@ test_bytes: {
sta print_char_cursor
lda #>$400
sta print_char_cursor+1
//SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1
//SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1
lda #<msg
sta assert_byte.msg
lda #>msg
@ -2356,7 +2357,7 @@ test_bytes: {
//SEG127 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1
ldx #bc
//SEG128 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
//SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
lda #<msg1
sta assert_byte.msg
lda #>msg1
@ -2391,8 +2392,6 @@ test_bytes: {
breturn:
//SEG140 [54] return
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=254@"
}
//SEG141 assert_byte
@ -2416,7 +2415,7 @@ assert_byte: {
//SEG150 [36] phi from assert_byte::@5 to print_str [phi:assert_byte::@5->print_str]
print_str_from_b5:
//SEG151 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@5->print_str#0] -- register_copy
//SEG152 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1
//SEG152 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -2437,7 +2436,7 @@ assert_byte: {
//SEG158 [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
print_str_from_b3:
//SEG159 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy
//SEG160 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1
//SEG160 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -2468,16 +2467,13 @@ assert_byte: {
//SEG171 [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
print_str_from_b1:
//SEG172 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy
//SEG173 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1
//SEG173 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
sta print_str.str+1
jsr print_str
jmp b2_from_b1
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
//SEG174 print_cls
// Clear the screen. Also resets current line/char cursor.
@ -2519,6 +2515,11 @@ print_cls: {
//SEG184 [73] return
rts
}
str: .text " @"
str2: .text "ok@"
msg1: .text "0+2=2@"
msg: .text "0=0@"
str1: .text "fail!@"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b24
@ -2660,9 +2661,6 @@ FINAL SYMBOL TABLE
(byte) assert_byte::c#3 c zp ZP_BYTE:4 0.4
(byte*) assert_byte::msg
(byte*) assert_byte::msg#3 msg zp ZP_WORD:2 2.0
(const string) assert_byte::str str = (string) " @"
(const string) assert_byte::str1 str1 = (string) "fail!@"
(const string) assert_byte::str2 str2 = (string) "ok@"
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(label) assert_sbyte::@1
(label) assert_sbyte::@2
@ -2676,13 +2674,12 @@ FINAL SYMBOL TABLE
(signed byte) assert_sbyte::c#5 c zp ZP_BYTE:4 0.3333333333333333
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#5 msg zp ZP_WORD:2 2.0
(const string) assert_sbyte::str str = (string) " @"
(const string) assert_sbyte::str1 str1 = (string) "fail!@"
(const string) assert_sbyte::str2 str2 = (string) "ok@"
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return
(const string) msg msg = (string) "0=0@"
(const string) msg1 msg1 = (string) "0+2=2@"
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:5 11.0
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:5 2.230769230769231
@ -2717,6 +2714,9 @@ FINAL SYMBOL TABLE
(byte*) print_str::str#10 str zp ZP_WORD:2 11.5
(byte*) print_str::str#11 str zp ZP_WORD:2 6.0
(byte*) print_str::str#5 str zp ZP_WORD:2 2.0
(const string) str str = (string) " @"
(const string) str1 str1 = (string) "fail!@"
(const string) str2 str2 = (string) "ok@"
(void()) test_bytes()
(label) test_bytes::@1
(label) test_bytes::@2
@ -2727,8 +2727,6 @@ FINAL SYMBOL TABLE
(const byte) test_bytes::bc#0 bc = (const byte) test_bytes::bb#0+(byte/signed byte/word/signed word/dword/signed dword) 2
(byte) test_bytes::bd
(const byte) test_bytes::bd#0 bd = ((byte))((signed byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4
(const string) test_bytes::msg msg = (string) "0=0@"
(const string) test_bytes::msg1 msg1 = (string) "0+2=2@"
(const string) test_bytes::msg2 msg2 = (string) "0+2-4=254@"
(void()) test_sbytes()
(label) test_sbytes::@1
@ -2746,8 +2744,6 @@ FINAL SYMBOL TABLE
(const signed byte) test_sbytes::be#0 be = -(const signed byte) test_sbytes::bd#0
(signed byte) test_sbytes::bf
(const signed byte) test_sbytes::bf#0 bf = ((signed byte))-(byte/signed byte/word/signed word/dword/signed dword) 127-(byte/signed byte/word/signed word/dword/signed dword) 127
(const string) test_sbytes::msg msg = (string) "0=0@"
(const string) test_sbytes::msg1 msg1 = (string) "0+2=2@"
(const string) test_sbytes::msg2 msg2 = (string) "0+2-4=-2@"
(const string) test_sbytes::msg3 msg3 = (string) "-(0+2-4)=2@"
(const string) test_sbytes::msg4 msg4 = (string) "-127-127=2@"
@ -2817,7 +2813,7 @@ test_sbytes: {
sta assert_sbyte.c
//SEG27 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1
ldx #bb
//SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
//SEG28 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg
sta assert_sbyte.msg
lda #>msg
@ -2832,7 +2828,7 @@ test_sbytes: {
sta assert_sbyte.c
//SEG34 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1
ldx #bc
//SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
//SEG35 [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg1
sta assert_sbyte.msg
lda #>msg1
@ -2886,8 +2882,6 @@ test_sbytes: {
//SEG57 test_sbytes::@return
//SEG58 [21] return
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=-2@"
msg3: .text "-(0+2-4)=2@"
msg4: .text "-127-127=2@"
@ -2913,7 +2907,7 @@ assert_sbyte: {
//SEG68 [27] call print_str
//SEG69 [36] phi from assert_sbyte::@5 to print_str [phi:assert_sbyte::@5->print_str]
//SEG70 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@5->print_str#0] -- register_copy
//SEG71 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1
//SEG71 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@5->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -2928,7 +2922,7 @@ assert_sbyte: {
//SEG76 [30] call print_str
//SEG77 [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
//SEG78 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy
//SEG79 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1
//SEG79 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -2952,16 +2946,13 @@ assert_sbyte: {
//SEG89 [35] call print_str
//SEG90 [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
//SEG91 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy
//SEG92 [36] phi (byte*) print_str::str#11 = (const string) assert_sbyte::str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1
//SEG92 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
sta print_str.str+1
jsr print_str
jmp b2
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
//SEG93 print_str
// Print a zero-terminated string
@ -3050,7 +3041,7 @@ test_bytes: {
sta print_char_cursor
lda #>$400
sta print_char_cursor+1
//SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1
//SEG120 [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1
lda #<msg
sta assert_byte.msg
lda #>msg
@ -3071,7 +3062,7 @@ test_bytes: {
//SEG127 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1
ldx #bc
//SEG128 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
//SEG129 [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
lda #<msg1
sta assert_byte.msg
lda #>msg1
@ -3101,8 +3092,6 @@ test_bytes: {
//SEG139 test_bytes::@return
//SEG140 [54] return
rts
msg: .text "0=0@"
msg1: .text "0+2=2@"
msg2: .text "0+2-4=254@"
}
//SEG141 assert_byte
@ -3121,7 +3110,7 @@ assert_byte: {
//SEG149 [59] call print_str
//SEG150 [36] phi from assert_byte::@5 to print_str [phi:assert_byte::@5->print_str]
//SEG151 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@5->print_str#0] -- register_copy
//SEG152 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1
//SEG152 [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@5->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -3136,7 +3125,7 @@ assert_byte: {
//SEG157 [62] call print_str
//SEG158 [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
//SEG159 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy
//SEG160 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1
//SEG160 [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -3160,16 +3149,13 @@ assert_byte: {
//SEG170 [67] call print_str
//SEG171 [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
//SEG172 [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy
//SEG173 [36] phi (byte*) print_str::str#11 = (const string) assert_byte::str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1
//SEG173 [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
sta print_str.str+1
jsr print_str
jmp b2
str: .text " @"
str1: .text "fail!@"
str2: .text "ok@"
}
//SEG174 print_cls
// Clear the screen. Also resets current line/char cursor.
@ -3205,4 +3191,9 @@ print_cls: {
//SEG184 [73] return
rts
}
str: .text " @"
str2: .text "ok@"
msg1: .text "0+2=2@"
msg: .text "0=0@"
str1: .text "fail!@"

View File

@ -20,9 +20,6 @@
(byte) assert_byte::c#3 c zp ZP_BYTE:4 0.4
(byte*) assert_byte::msg
(byte*) assert_byte::msg#3 msg zp ZP_WORD:2 2.0
(const string) assert_byte::str str = (string) " @"
(const string) assert_byte::str1 str1 = (string) "fail!@"
(const string) assert_byte::str2 str2 = (string) "ok@"
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(label) assert_sbyte::@1
(label) assert_sbyte::@2
@ -36,13 +33,12 @@
(signed byte) assert_sbyte::c#5 c zp ZP_BYTE:4 0.3333333333333333
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#5 msg zp ZP_WORD:2 2.0
(const string) assert_sbyte::str str = (string) " @"
(const string) assert_sbyte::str1 str1 = (string) "fail!@"
(const string) assert_sbyte::str2 str2 = (string) "ok@"
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return
(const string) msg msg = (string) "0=0@"
(const string) msg1 msg1 = (string) "0+2=2@"
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:5 11.0
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:5 2.230769230769231
@ -77,6 +73,9 @@
(byte*) print_str::str#10 str zp ZP_WORD:2 11.5
(byte*) print_str::str#11 str zp ZP_WORD:2 6.0
(byte*) print_str::str#5 str zp ZP_WORD:2 2.0
(const string) str str = (string) " @"
(const string) str1 str1 = (string) "fail!@"
(const string) str2 str2 = (string) "ok@"
(void()) test_bytes()
(label) test_bytes::@1
(label) test_bytes::@2
@ -87,8 +86,6 @@
(const byte) test_bytes::bc#0 bc = (const byte) test_bytes::bb#0+(byte/signed byte/word/signed word/dword/signed dword) 2
(byte) test_bytes::bd
(const byte) test_bytes::bd#0 bd = ((byte))((signed byte))(const byte) test_bytes::bc#0-(byte/signed byte/word/signed word/dword/signed dword) 4
(const string) test_bytes::msg msg = (string) "0=0@"
(const string) test_bytes::msg1 msg1 = (string) "0+2=2@"
(const string) test_bytes::msg2 msg2 = (string) "0+2-4=254@"
(void()) test_sbytes()
(label) test_sbytes::@1
@ -106,8 +103,6 @@
(const signed byte) test_sbytes::be#0 be = -(const signed byte) test_sbytes::bd#0
(signed byte) test_sbytes::bf
(const signed byte) test_sbytes::bf#0 bf = ((signed byte))-(byte/signed byte/word/signed word/dword/signed dword) 127-(byte/signed byte/word/signed word/dword/signed dword) 127
(const string) test_sbytes::msg msg = (string) "0=0@"
(const string) test_sbytes::msg1 msg1 = (string) "0+2=2@"
(const string) test_sbytes::msg2 msg2 = (string) "0+2-4=-2@"
(const string) test_sbytes::msg3 msg3 = (string) "-(0+2-4)=2@"
(const string) test_sbytes::msg4 msg4 = (string) "-127-127=2@"

View File

@ -53,9 +53,9 @@ do_perspective: {
jsr print_str
ldx #y
jsr print_sbyte
lda #<str2
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
ldx #z
@ -68,9 +68,9 @@ do_perspective: {
jsr perspective
ldx xr
jsr print_byte
lda #<str4
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
ldx yr
@ -84,9 +84,7 @@ do_perspective: {
rts
str: .text "(@"
str1: .text ",@"
str2: .text ",@"
str3: .text ") -> (@"
str4: .text ",@"
str5: .text ")@"
}
// Print a newline

View File

@ -102,7 +102,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
to:@return
print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspective::@2 do_perspective::@4 do_perspective::@6 do_perspective::@9
[44] (byte*) print_char_cursor#74 ← phi( do_perspective/((byte*))(word/signed word/dword/signed dword) 1024 do_perspective::@11/(byte*) print_char_cursor#12 do_perspective::@2/(byte*) print_char_cursor#12 do_perspective::@4/(byte*) print_char_cursor#12 do_perspective::@6/(byte*) print_char_cursor#12 do_perspective::@9/(byte*) print_char_cursor#12 )
[44] (byte*) print_str::str#9 ← phi( do_perspective/(const string) do_perspective::str do_perspective::@11/(const string) do_perspective::str5 do_perspective::@2/(const string) do_perspective::str1 do_perspective::@4/(const string) do_perspective::str2 do_perspective::@6/(const string) do_perspective::str3 do_perspective::@9/(const string) do_perspective::str4 )
[44] (byte*) print_str::str#9 ← phi( do_perspective/(const string) do_perspective::str do_perspective::@11/(const string) do_perspective::str5 do_perspective::@2/(const string) do_perspective::str1 do_perspective::@4/(const string) do_perspective::str1 do_perspective::@6/(const string) do_perspective::str3 do_perspective::@9/(const string) do_perspective::str1 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[45] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 )

View File

@ -1360,6 +1360,7 @@ Successful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in assignment *(mulf_sqr2#0+1 + mulf_init::$5)
Consolidated array index constant in assignment *(mulf_init::$6+1 + mulf_init::$7)
Successful SSA optimization Pass2ConstantAdditionElimination
Successful SSA optimization Pass2ConstantStringConsolidation
Inferred type updated to byte in [73] (byte/signed word/word/dword/signed dword~) mulf_init::$5 ← (byte) mulf_init::i#2
Inferred type updated to byte in [75] (byte/signed word/word/dword/signed dword~) mulf_init::$7 ← (byte) mulf_init::i#2
Successful SSA optimization PassNEliminateUnusedVars
@ -1403,7 +1404,9 @@ Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined print_sbyte::b#1 = (const signed byte) do_perspective::x#0
Constant inlined print_sbyte::b#2 = (const signed byte) do_perspective::y#0
Constant inlined do_perspective::str4 = (const string) do_perspective::str1
Constant inlined print_sbyte::b#3 = (const signed byte) do_perspective::z#0
Constant inlined do_perspective::str2 = (const string) do_perspective::str1
Constant inlined mulf_init::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulf_init::$1 = (const byte[512]) mulf_sqr1#0+(word/signed word/dword/signed dword) 256
Constant inlined $0 = (const byte[]) print_hextab#0
@ -1422,11 +1425,11 @@ Constant inlined main::$2 = ((word))(const byte[512]) mulf_sqr2#0
Constant inlined print_char::ch#1 = (byte) ' '
Constant inlined print_char::ch#0 = (byte) '-'
Constant inlined print_str::str#4 = (const string) do_perspective::str3
Constant inlined print_str::str#3 = (const string) do_perspective::str2
Constant inlined print_str::str#3 = (const string) do_perspective::str1
Constant inlined print_str::str#2 = (const string) do_perspective::str1
Constant inlined print_str::str#1 = (const string) do_perspective::str
Constant inlined print_str::str#6 = (const string) do_perspective::str5
Constant inlined print_str::str#5 = (const string) do_perspective::str4
Constant inlined print_str::str#5 = (const string) do_perspective::str1
Successful SSA optimization Pass2ConstantInlining
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)
@ -1605,7 +1608,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
to:@return
print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspective::@2 do_perspective::@4 do_perspective::@6 do_perspective::@9
[44] (byte*) print_char_cursor#74 ← phi( do_perspective/((byte*))(word/signed word/dword/signed dword) 1024 do_perspective::@11/(byte*) print_char_cursor#12 do_perspective::@2/(byte*) print_char_cursor#12 do_perspective::@4/(byte*) print_char_cursor#12 do_perspective::@6/(byte*) print_char_cursor#12 do_perspective::@9/(byte*) print_char_cursor#12 )
[44] (byte*) print_str::str#9 ← phi( do_perspective/(const string) do_perspective::str do_perspective::@11/(const string) do_perspective::str5 do_perspective::@2/(const string) do_perspective::str1 do_perspective::@4/(const string) do_perspective::str2 do_perspective::@6/(const string) do_perspective::str3 do_perspective::@9/(const string) do_perspective::str4 )
[44] (byte*) print_str::str#9 ← phi( do_perspective/(const string) do_perspective::str do_perspective::@11/(const string) do_perspective::str5 do_perspective::@2/(const string) do_perspective::str1 do_perspective::@4/(const string) do_perspective::str1 do_perspective::@6/(const string) do_perspective::str3 do_perspective::@9/(const string) do_perspective::str1 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[45] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#74 print_str::@2/(byte*) print_char_cursor#1 )
@ -2068,10 +2071,10 @@ do_perspective: {
//SEG48 [44] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str]
print_str_from_b4:
//SEG49 [44] phi (byte*) print_char_cursor#74 = (byte*) print_char_cursor#12 [phi:do_perspective::@4->print_str#0] -- register_copy
//SEG50 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str2 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
//SEG50 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
//SEG51 [22] phi from do_perspective::@4 to do_perspective::@5 [phi:do_perspective::@4->do_perspective::@5]
@ -2129,10 +2132,10 @@ do_perspective: {
//SEG74 [44] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str]
print_str_from_b9:
//SEG75 [44] phi (byte*) print_char_cursor#74 = (byte*) print_char_cursor#12 [phi:do_perspective::@9->print_str#0] -- register_copy
//SEG76 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str4 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1
lda #<str4
//SEG76 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
jmp b10
@ -2178,9 +2181,7 @@ do_perspective: {
rts
str: .text "(@"
str1: .text ",@"
str2: .text ",@"
str3: .text ") -> (@"
str4: .text ",@"
str5: .text ")@"
}
//SEG95 print_ln
@ -2887,10 +2888,10 @@ do_perspective: {
//SEG48 [44] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str]
print_str_from_b4:
//SEG49 [44] phi (byte*) print_char_cursor#74 = (byte*) print_char_cursor#12 [phi:do_perspective::@4->print_str#0] -- register_copy
//SEG50 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str2 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
//SEG50 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
//SEG51 [22] phi from do_perspective::@4 to do_perspective::@5 [phi:do_perspective::@4->do_perspective::@5]
@ -2946,10 +2947,10 @@ do_perspective: {
//SEG74 [44] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str]
print_str_from_b9:
//SEG75 [44] phi (byte*) print_char_cursor#74 = (byte*) print_char_cursor#12 [phi:do_perspective::@9->print_str#0] -- register_copy
//SEG76 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str4 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1
lda #<str4
//SEG76 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
jmp b10
@ -2994,9 +2995,7 @@ do_perspective: {
rts
str: .text "(@"
str1: .text ",@"
str2: .text ",@"
str3: .text ") -> (@"
str4: .text ",@"
str5: .text ")@"
}
//SEG95 print_ln
@ -3657,9 +3656,7 @@ FINAL SYMBOL TABLE
(label) do_perspective::@return
(const string) do_perspective::str str = (string) "(@"
(const string) do_perspective::str1 str1 = (string) ",@"
(const string) do_perspective::str2 str2 = (string) ",@"
(const string) do_perspective::str3 str3 = (string) ") -> (@"
(const string) do_perspective::str4 str4 = (string) ",@"
(const string) do_perspective::str5 str5 = (string) ")@"
(signed byte) do_perspective::x
(const signed byte) do_perspective::x#0 x = (byte/signed byte/word/signed word/dword/signed dword) 57
@ -3888,10 +3885,10 @@ do_perspective: {
//SEG47 [21] call print_str
//SEG48 [44] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str]
//SEG49 [44] phi (byte*) print_char_cursor#74 = (byte*) print_char_cursor#12 [phi:do_perspective::@4->print_str#0] -- register_copy
//SEG50 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str2 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
//SEG50 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
//SEG51 [22] phi from do_perspective::@4 to do_perspective::@5 [phi:do_perspective::@4->do_perspective::@5]
@ -3929,10 +3926,10 @@ do_perspective: {
//SEG73 [31] call print_str
//SEG74 [44] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str]
//SEG75 [44] phi (byte*) print_char_cursor#74 = (byte*) print_char_cursor#12 [phi:do_perspective::@9->print_str#0] -- register_copy
//SEG76 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str4 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1
lda #<str4
//SEG76 [44] phi (byte*) print_str::str#9 = (const string) do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
//SEG77 do_perspective::@10
@ -3964,9 +3961,7 @@ do_perspective: {
rts
str: .text "(@"
str1: .text ",@"
str2: .text ",@"
str3: .text ") -> (@"
str4: .text ",@"
str5: .text ")@"
}
//SEG95 print_ln

View File

@ -98,9 +98,7 @@
(label) do_perspective::@return
(const string) do_perspective::str str = (string) "(@"
(const string) do_perspective::str1 str1 = (string) ",@"
(const string) do_perspective::str2 str2 = (string) ",@"
(const string) do_perspective::str3 str3 = (string) ") -> (@"
(const string) do_perspective::str4 str4 = (string) ",@"
(const string) do_perspective::str5 str5 = (string) ")@"
(signed byte) do_perspective::x
(const signed byte) do_perspective::x#0 x = (byte/signed byte/word/signed word/dword/signed dword) 57

View File

@ -71,9 +71,9 @@ main: {
lda #>$79cb
sta print_word.w+1
jsr print_word
lda #<str2
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
lda #<0
@ -94,9 +94,9 @@ main: {
lda print_line_cursor+1
sta print_char_cursor+1
jsr print_byte
lda #<str3
lda #<str1
sta print_str.str
lda #>str3
lda #>str1
sta print_str.str+1
jsr print_str
ldy i
@ -105,9 +105,9 @@ main: {
lda lintab1+1,y
sta print_word.w+1
jsr print_word
lda #<str4
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
ldy i
@ -116,9 +116,9 @@ main: {
lda lintab2+1,y
sta print_word.w+1
jsr print_word
lda #<str5
lda #<str1
sta print_str.str
lda #>str5
lda #>str1
sta print_str.str+1
jsr print_str
ldy i
@ -138,9 +138,9 @@ main: {
sta print_char_cursor
lda print_line_cursor+1
sta print_char_cursor+1
lda #<str6
lda #<str
sta print_str.str
lda #>str6
lda #>str
sta print_str.str+1
jsr print_str
lda #<$7461
@ -148,9 +148,9 @@ main: {
lda #>$7461
sta print_word.w+1
jsr print_word
lda #<str7
lda #<str1
sta print_str.str
lda #>str7
lda #>str1
sta print_str.str+1
jsr print_str
lda #<$f781
@ -158,9 +158,9 @@ main: {
lda #>$f781
sta print_word.w+1
jsr print_word
lda #<str8
lda #<str1
sta print_str.str
lda #>str8
lda #>str1
sta print_str.str+1
jsr print_str
lda #<$6488
@ -172,13 +172,6 @@ main: {
rts
str: .text " @"
str1: .text " @"
str2: .text " @"
str3: .text " @"
str4: .text " @"
str5: .text " @"
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0

View File

@ -169,7 +169,7 @@ print_char::@return: scope:[print_char] from print_char
to:@return
print_str: scope:[print_str] from main::@10 main::@14 main::@16 main::@18 main::@2 main::@23 main::@25 main::@6 main::@8
[84] (byte*) print_char_cursor#86 ← phi( main::@10/(byte*) print_char_cursor#11 main::@14/(byte*) print_char_cursor#11 main::@16/(byte*) print_char_cursor#11 main::@18/(byte*) print_char_cursor#11 main::@2/(byte*~) print_char_cursor#100 main::@23/(byte*) print_char_cursor#11 main::@25/(byte*) print_char_cursor#11 main::@6/((byte*))(word/signed word/dword/signed dword) 1024 main::@8/(byte*) print_char_cursor#11 )
[84] (byte*) print_str::str#12 ← phi( main::@10/(const string) main::str2 main::@14/(const string) main::str3 main::@16/(const string) main::str4 main::@18/(const string) main::str5 main::@2/(const string) main::str6 main::@23/(const string) main::str7 main::@25/(const string) main::str8 main::@6/(const string) main::str main::@8/(const string) main::str1 )
[84] (byte*) print_str::str#12 ← phi( main::@10/(const string) main::str1 main::@14/(const string) main::str1 main::@16/(const string) main::str1 main::@18/(const string) main::str1 main::@2/(const string) main::str main::@23/(const string) main::str1 main::@25/(const string) main::str1 main::@6/(const string) main::str main::@8/(const string) main::str1 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[85] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 )

View File

@ -1293,6 +1293,7 @@ Constant (const word*) lin16u_gen::lintab#0 = main::lintab1#0
Constant (const word*) lin16u_gen::lintab#1 = main::lintab2#0
Constant (const word*) lin16u_gen::lintab#2 = main::lintab3#0
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization Pass2ConstantStringConsolidation
Fixing inline constructor with lin16u_gen::$9 ← lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0
Fixing inline constructor with lin16u_gen::$10 ← lin16u_gen::min#3 dw= 0
Successful SSA optimization Pass2FixInlineConstructors
@ -1351,9 +1352,15 @@ Inlining constant with var siblings (const word*) lin16u_gen::lintab#0
Inlining constant with var siblings (const word*) lin16u_gen::lintab#1
Inlining constant with var siblings (const word*) lin16u_gen::lintab#2
Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined main::str4 = (const string) main::str1
Constant inlined main::str5 = (const string) main::str1
Constant inlined divr16u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::str6 = (const string) main::str
Constant inlined main::str7 = (const string) main::str1
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::str2 = (const string) main::str1
Constant inlined main::str3 = (const string) main::str1
Constant inlined lin16u_gen::max#0 = (word/signed word/dword/signed dword) 29793
Constant inlined lin16u_gen::max#2 = (word/signed word/dword/signed dword) 25736
Constant inlined lin16u_gen::max#1 = (word/dword/signed dword) 63361
@ -1372,23 +1379,24 @@ Constant inlined print_word::w#7 = (word/dword/signed dword) 63361
Constant inlined print_word::w#6 = (word/signed word/dword/signed dword) 29793
Constant inlined print_word::w#8 = (word/signed word/dword/signed dword) 25736
Constant inlined lin16u_gen::length#2 = (byte/signed byte/word/signed word/dword/signed dword) 20
Constant inlined print_str::str#9 = (const string) main::str8
Constant inlined print_str::str#9 = (const string) main::str1
Constant inlined lin16u_gen::length#1 = (byte/signed byte/word/signed word/dword/signed dword) 20
Constant inlined lin16u_gen::length#0 = (byte/signed byte/word/signed word/dword/signed dword) 20
Constant inlined print_str::str#4 = (const string) main::str3
Constant inlined print_str::str#3 = (const string) main::str2
Constant inlined print_str::str#4 = (const string) main::str1
Constant inlined print_str::str#3 = (const string) main::str1
Constant inlined print_str::str#2 = (const string) main::str1
Constant inlined print_str::str#1 = (const string) main::str
Constant inlined print_str::str#8 = (const string) main::str7
Constant inlined print_str::str#8 = (const string) main::str1
Constant inlined main::str8 = (const string) main::str1
Constant inlined lin16u_gen::lintab#2 = (const word[20]) main::lintab3#0
Constant inlined lin16u_gen::min#1 = (word/signed word/dword/signed dword) 31179
Constant inlined lin16u_gen::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#7 = (const string) main::str6
Constant inlined print_str::str#7 = (const string) main::str
Constant inlined lin16u_gen::lintab#1 = (const word[20]) main::lintab2#0
Constant inlined lin16u_gen::min#2 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#6 = (const string) main::str5
Constant inlined print_str::str#6 = (const string) main::str1
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::str1
Successful SSA optimization Pass2ConstantInlining
Identical Phi Values (word) lin16u_gen::length#3 (byte/signed byte/word/signed word/dword/signed dword) 20
Successful SSA optimization Pass2IdenticalPhiElimination
@ -1687,7 +1695,7 @@ print_char::@return: scope:[print_char] from print_char
to:@return
print_str: scope:[print_str] from main::@10 main::@14 main::@16 main::@18 main::@2 main::@23 main::@25 main::@6 main::@8
[84] (byte*) print_char_cursor#86 ← phi( main::@10/(byte*) print_char_cursor#11 main::@14/(byte*) print_char_cursor#11 main::@16/(byte*) print_char_cursor#11 main::@18/(byte*) print_char_cursor#11 main::@2/(byte*~) print_char_cursor#100 main::@23/(byte*) print_char_cursor#11 main::@25/(byte*) print_char_cursor#11 main::@6/((byte*))(word/signed word/dword/signed dword) 1024 main::@8/(byte*) print_char_cursor#11 )
[84] (byte*) print_str::str#12 ← phi( main::@10/(const string) main::str2 main::@14/(const string) main::str3 main::@16/(const string) main::str4 main::@18/(const string) main::str5 main::@2/(const string) main::str6 main::@23/(const string) main::str7 main::@25/(const string) main::str8 main::@6/(const string) main::str main::@8/(const string) main::str1 )
[84] (byte*) print_str::str#12 ← phi( main::@10/(const string) main::str1 main::@14/(const string) main::str1 main::@16/(const string) main::str1 main::@18/(const string) main::str1 main::@2/(const string) main::str main::@23/(const string) main::str1 main::@25/(const string) main::str1 main::@6/(const string) main::str main::@8/(const string) main::str1 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[85] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#86 print_str::@2/(byte*) print_char_cursor#1 )
@ -2175,10 +2183,10 @@ main: {
//SEG59 [84] phi from main::@10 to print_str [phi:main::@10->print_str]
print_str_from_b10:
//SEG60 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@10->print_str#0] -- register_copy
//SEG61 [84] phi (byte*) print_str::str#12 = (const string) main::str2 [phi:main::@10->print_str#1] -- pbuz1=pbuc1
lda #<str2
//SEG61 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@10->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
//SEG62 [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
@ -2244,10 +2252,10 @@ main: {
//SEG86 [84] phi from main::@14 to print_str [phi:main::@14->print_str]
print_str_from_b14:
//SEG87 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@14->print_str#0] -- register_copy
//SEG88 [84] phi (byte*) print_str::str#12 = (const string) main::str3 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str3
//SEG88 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str3
lda #>str1
sta print_str.str+1
jsr print_str
jmp b15
@ -2273,10 +2281,10 @@ main: {
//SEG97 [84] phi from main::@16 to print_str [phi:main::@16->print_str]
print_str_from_b16:
//SEG98 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@16->print_str#0] -- register_copy
//SEG99 [84] phi (byte*) print_str::str#12 = (const string) main::str4 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str4
//SEG99 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
jmp b17
@ -2302,10 +2310,10 @@ main: {
//SEG108 [84] phi from main::@18 to print_str [phi:main::@18->print_str]
print_str_from_b18:
//SEG109 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@18->print_str#0] -- register_copy
//SEG110 [84] phi (byte*) print_str::str#12 = (const string) main::str5 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str5
//SEG110 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str5
lda #>str1
sta print_str.str+1
jsr print_str
jmp b19
@ -2356,10 +2364,10 @@ main: {
//SEG127 [84] phi from main::@2 to print_str [phi:main::@2->print_str]
print_str_from_b2:
//SEG128 [84] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#100 [phi:main::@2->print_str#0] -- register_copy
//SEG129 [84] phi (byte*) print_str::str#12 = (const string) main::str6 [phi:main::@2->print_str#1] -- pbuz1=pbuc1
lda #<str6
//SEG129 [84] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str6
lda #>str
sta print_str.str+1
jsr print_str
//SEG130 [48] phi from main::@2 to main::@22 [phi:main::@2->main::@22]
@ -2385,10 +2393,10 @@ main: {
//SEG138 [84] phi from main::@23 to print_str [phi:main::@23->print_str]
print_str_from_b23:
//SEG139 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy
//SEG140 [84] phi (byte*) print_str::str#12 = (const string) main::str7 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str7
//SEG140 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str7
lda #>str1
sta print_str.str+1
jsr print_str
//SEG141 [52] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
@ -2414,10 +2422,10 @@ main: {
//SEG149 [84] phi from main::@25 to print_str [phi:main::@25->print_str]
print_str_from_b25:
//SEG150 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy
//SEG151 [84] phi (byte*) print_str::str#12 = (const string) main::str8 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str8
//SEG151 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str8
lda #>str1
sta print_str.str+1
jsr print_str
//SEG152 [56] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
@ -2451,13 +2459,6 @@ main: {
rts
str: .text " @"
str1: .text " @"
str2: .text " @"
str3: .text " @"
str4: .text " @"
str5: .text " @"
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
@ -3316,10 +3317,10 @@ main: {
//SEG59 [84] phi from main::@10 to print_str [phi:main::@10->print_str]
print_str_from_b10:
//SEG60 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@10->print_str#0] -- register_copy
//SEG61 [84] phi (byte*) print_str::str#12 = (const string) main::str2 [phi:main::@10->print_str#1] -- pbuz1=pbuc1
lda #<str2
//SEG61 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@10->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
//SEG62 [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
@ -3384,10 +3385,10 @@ main: {
//SEG86 [84] phi from main::@14 to print_str [phi:main::@14->print_str]
print_str_from_b14:
//SEG87 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@14->print_str#0] -- register_copy
//SEG88 [84] phi (byte*) print_str::str#12 = (const string) main::str3 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str3
//SEG88 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str3
lda #>str1
sta print_str.str+1
jsr print_str
jmp b15
@ -3413,10 +3414,10 @@ main: {
//SEG97 [84] phi from main::@16 to print_str [phi:main::@16->print_str]
print_str_from_b16:
//SEG98 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@16->print_str#0] -- register_copy
//SEG99 [84] phi (byte*) print_str::str#12 = (const string) main::str4 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str4
//SEG99 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
jmp b17
@ -3442,10 +3443,10 @@ main: {
//SEG108 [84] phi from main::@18 to print_str [phi:main::@18->print_str]
print_str_from_b18:
//SEG109 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@18->print_str#0] -- register_copy
//SEG110 [84] phi (byte*) print_str::str#12 = (const string) main::str5 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str5
//SEG110 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str5
lda #>str1
sta print_str.str+1
jsr print_str
jmp b19
@ -3496,10 +3497,10 @@ main: {
//SEG127 [84] phi from main::@2 to print_str [phi:main::@2->print_str]
print_str_from_b2:
//SEG128 [84] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#100 [phi:main::@2->print_str#0] -- register_copy
//SEG129 [84] phi (byte*) print_str::str#12 = (const string) main::str6 [phi:main::@2->print_str#1] -- pbuz1=pbuc1
lda #<str6
//SEG129 [84] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str6
lda #>str
sta print_str.str+1
jsr print_str
//SEG130 [48] phi from main::@2 to main::@22 [phi:main::@2->main::@22]
@ -3525,10 +3526,10 @@ main: {
//SEG138 [84] phi from main::@23 to print_str [phi:main::@23->print_str]
print_str_from_b23:
//SEG139 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy
//SEG140 [84] phi (byte*) print_str::str#12 = (const string) main::str7 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str7
//SEG140 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str7
lda #>str1
sta print_str.str+1
jsr print_str
//SEG141 [52] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
@ -3554,10 +3555,10 @@ main: {
//SEG149 [84] phi from main::@25 to print_str [phi:main::@25->print_str]
print_str_from_b25:
//SEG150 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy
//SEG151 [84] phi (byte*) print_str::str#12 = (const string) main::str8 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str8
//SEG151 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str8
lda #>str1
sta print_str.str+1
jsr print_str
//SEG152 [56] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
@ -3591,13 +3592,6 @@ main: {
rts
str: .text " @"
str1: .text " @"
str2: .text " @"
str3: .text " @"
str4: .text " @"
str5: .text " @"
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
@ -4393,13 +4387,6 @@ FINAL SYMBOL TABLE
(const word[20]) main::lintab3#0 lintab3 = { fill( 20, 0) }
(const string) main::str str = (string) " @"
(const string) main::str1 str1 = (string) " @"
(const string) main::str2 str2 = (string) " @"
(const string) main::str3 str3 = (string) " @"
(const string) main::str4 str4 = (string) " @"
(const string) main::str5 str5 = (string) " @"
(const string) main::str6 str6 = (string) " @"
(const string) main::str7 str7 = (string) " @"
(const string) main::str8 str8 = (string) " @"
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
@ -4619,10 +4606,10 @@ main: {
//SEG58 [21] call print_str
//SEG59 [84] phi from main::@10 to print_str [phi:main::@10->print_str]
//SEG60 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@10->print_str#0] -- register_copy
//SEG61 [84] phi (byte*) print_str::str#12 = (const string) main::str2 [phi:main::@10->print_str#1] -- pbuz1=pbuc1
lda #<str2
//SEG61 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@10->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str2
lda #>str1
sta print_str.str+1
jsr print_str
//SEG62 [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
@ -4669,10 +4656,10 @@ main: {
//SEG85 [31] call print_str
//SEG86 [84] phi from main::@14 to print_str [phi:main::@14->print_str]
//SEG87 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@14->print_str#0] -- register_copy
//SEG88 [84] phi (byte*) print_str::str#12 = (const string) main::str3 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str3
//SEG88 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str3
lda #>str1
sta print_str.str+1
jsr print_str
//SEG89 main::@15
@ -4691,10 +4678,10 @@ main: {
//SEG96 [35] call print_str
//SEG97 [84] phi from main::@16 to print_str [phi:main::@16->print_str]
//SEG98 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@16->print_str#0] -- register_copy
//SEG99 [84] phi (byte*) print_str::str#12 = (const string) main::str4 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str4
//SEG99 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str4
lda #>str1
sta print_str.str+1
jsr print_str
//SEG100 main::@17
@ -4713,10 +4700,10 @@ main: {
//SEG107 [39] call print_str
//SEG108 [84] phi from main::@18 to print_str [phi:main::@18->print_str]
//SEG109 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@18->print_str#0] -- register_copy
//SEG110 [84] phi (byte*) print_str::str#12 = (const string) main::str5 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str5
//SEG110 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str5
lda #>str1
sta print_str.str+1
jsr print_str
//SEG111 main::@19
@ -4754,10 +4741,10 @@ main: {
//SEG126 [47] call print_str
//SEG127 [84] phi from main::@2 to print_str [phi:main::@2->print_str]
//SEG128 [84] phi (byte*) print_char_cursor#86 = (byte*~) print_char_cursor#100 [phi:main::@2->print_str#0] -- register_copy
//SEG129 [84] phi (byte*) print_str::str#12 = (const string) main::str6 [phi:main::@2->print_str#1] -- pbuz1=pbuc1
lda #<str6
//SEG129 [84] phi (byte*) print_str::str#12 = (const string) main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str6
lda #>str
sta print_str.str+1
jsr print_str
//SEG130 [48] phi from main::@2 to main::@22 [phi:main::@2->main::@22]
@ -4775,10 +4762,10 @@ main: {
//SEG137 [51] call print_str
//SEG138 [84] phi from main::@23 to print_str [phi:main::@23->print_str]
//SEG139 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@23->print_str#0] -- register_copy
//SEG140 [84] phi (byte*) print_str::str#12 = (const string) main::str7 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str7
//SEG140 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str7
lda #>str1
sta print_str.str+1
jsr print_str
//SEG141 [52] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
@ -4796,10 +4783,10 @@ main: {
//SEG148 [55] call print_str
//SEG149 [84] phi from main::@25 to print_str [phi:main::@25->print_str]
//SEG150 [84] phi (byte*) print_char_cursor#86 = (byte*) print_char_cursor#11 [phi:main::@25->print_str#0] -- register_copy
//SEG151 [84] phi (byte*) print_str::str#12 = (const string) main::str8 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str8
//SEG151 [84] phi (byte*) print_str::str#12 = (const string) main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str8
lda #>str1
sta print_str.str+1
jsr print_str
//SEG152 [56] phi from main::@25 to main::@26 [phi:main::@25->main::@26]
@ -4823,13 +4810,6 @@ main: {
rts
str: .text " @"
str1: .text " @"
str2: .text " @"
str3: .text " @"
str4: .text " @"
str5: .text " @"
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0

View File

@ -107,13 +107,6 @@
(const word[20]) main::lintab3#0 lintab3 = { fill( 20, 0) }
(const string) main::str str = (string) " @"
(const string) main::str1 str1 = (string) " @"
(const string) main::str2 str2 = (string) " @"
(const string) main::str3 str3 = (string) " @"
(const string) main::str4 str4 = (string) " @"
(const string) main::str5 str5 = (string) " @"
(const string) main::str6 str6 = (string) " @"
(const string) main::str7 str7 = (string) " @"
(const string) main::str8 str8 = (string) " @"
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0

View File

@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA
to:@2
main: scope:[main] from @2
(byte*) screen#15 ← phi( @2/(byte*) screen#17 )
(byte[]) main::rex2#0 ← (byte[]) rex1#0
(byte[]) main::rex2#0 ← (const string) main::$3
(byte*) print::string#0 ← (byte[]) rex1#0
call print
to:main::@1
@ -70,6 +70,7 @@ SYMBOL TABLE SSA
(label) @begin
(label) @end
(void()) main()
(const string) main::$3 = (string) "rex@"
(label) main::@1
(label) main::@2
(label) main::@3
@ -131,11 +132,10 @@ Simple Condition (bool~) print::$0 [22] if(*((byte*) print::string#4)!=(byte) '@
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte[]) rex1#0 = $0
Constant (const byte*) screen#0 = ((byte*))1024
Constant (const byte[]) main::rex2#0 = main::$3
Constant (const byte*) print::string#2 = main::string
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte[]) main::rex2#0 = rex1#0
Constant (const byte*) print::string#0 = rex1#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print::string#1 = main::rex2#0
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization Pass2ConstantStringConsolidation
@ -146,14 +146,15 @@ Inlining constant with var siblings (const byte*) print::string#2
Inlining constant with var siblings (const byte*) print::string#0
Inlining constant with var siblings (const byte*) print::string#1
Inlining constant with var siblings (const byte*) screen#0
Constant inlined main::$3 = (const byte[]) main::rex2#0
Constant inlined print::string#0 = (const byte[]) rex1#0
Constant inlined print::string#1 = (const byte[]) rex1#0
Constant inlined print::string#1 = (const byte[]) main::rex2#0
Constant inlined $0 = (const byte[]) rex1#0
Constant inlined print::string#2 = (const string) main::string
Constant inlined main::rex2#0 = (const byte[]) rex1#0
Constant inlined screen#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Successful SSA optimization Pass2ConstantInlining
Successful SSA optimization Pass2ConstantStringConsolidation
Constant inlined main::rex2#0 = (const byte[]) rex1#0
Constant inlined main::string = (const byte[]) rex1#0
Successful SSA optimization Pass2ConstantInlining
Identical Phi Values (byte*) print::string#6 (const byte[]) rex1#0

View File

@ -50,9 +50,9 @@ main: {
b3:
lda #$37
sta printu.b
lda #<op1
lda #<op
sta printu.op
lda #>op1
lda #>op
sta printu.op+1
jsr printu
lda a
@ -67,9 +67,9 @@ main: {
ldy i
lda cs,y
sta printu.b
lda #<op2
lda #<op
sta printu.op
lda #>op2
lda #>op
sta printu.op+1
jsr printu
lda a
@ -82,9 +82,9 @@ main: {
b5:
lda a
sta printu.b
lda #<op3
lda #<op
sta printu.op
lda #>op3
lda #>op
sta printu.op+1
jsr printu
jsr print_ln
@ -117,9 +117,9 @@ main: {
b7:
lda #$37
sta printu.b
lda #<op5
lda #<op4
sta printu.op
lda #>op5
lda #>op4
sta printu.op+1
jsr printu
ldy i
@ -134,9 +134,9 @@ main: {
ldy i
lda cs,y
sta printu.b
lda #<op6
lda #<op4
sta printu.op
lda #>op6
lda #>op4
sta printu.op+1
jsr printu
lda a
@ -149,9 +149,9 @@ main: {
b9:
lda a
sta printu.b
lda #<op7
lda #<op4
sta printu.op
lda #>op7
lda #>op4
sta printu.op+1
jsr printu
jsr print_ln
@ -186,9 +186,9 @@ main: {
b11:
lda #$37
sta printu.b
lda #<op9
lda #<op8
sta printu.op
lda #>op9
lda #>op8
sta printu.op+1
jsr printu
ldy i
@ -203,9 +203,9 @@ main: {
ldy i
lda cs,y
sta printu.b
lda #<op10
lda #<op8
sta printu.op
lda #>op10
lda #>op8
sta printu.op+1
jsr printu
lda a
@ -218,9 +218,9 @@ main: {
b13:
lda a
sta printu.b
lda #<op11
lda #<op8
sta printu.op
lda #>op11
lda #>op8
sta printu.op+1
jsr printu
jsr print_ln
@ -253,9 +253,9 @@ main: {
b15:
lda #$37
sta printu.b
lda #<op13
lda #<op12
sta printu.op
lda #>op13
lda #>op12
sta printu.op+1
jsr printu
lda a
@ -270,9 +270,9 @@ main: {
ldy i
lda cs,y
sta printu.b
lda #<op14
lda #<op12
sta printu.op
lda #>op14
lda #>op12
sta printu.op+1
jsr printu
lda a
@ -285,9 +285,9 @@ main: {
b17:
lda a
sta printu.b
lda #<op15
lda #<op12
sta printu.op
lda #>op15
lda #>op12
sta printu.op+1
jsr printu
jsr print_ln
@ -320,9 +320,9 @@ main: {
b19:
lda #$37
sta printu.b
lda #<op17
lda #<op16
sta printu.op
lda #>op17
lda #>op16
sta printu.op+1
jsr printu
lda a
@ -337,9 +337,9 @@ main: {
ldy i
lda cs,y
sta printu.b
lda #<op18
lda #<op16
sta printu.op
lda #>op18
lda #>op16
sta printu.op+1
jsr printu
lda a
@ -352,9 +352,9 @@ main: {
b21:
lda a
sta printu.b
lda #<op19
lda #<op16
sta printu.op
lda #>op19
lda #>op16
sta printu.op+1
jsr printu
jsr print_ln
@ -375,25 +375,10 @@ main: {
sta print_char_cursor+1
jmp b1
op: .text "< @"
op1: .text "< @"
op2: .text "< @"
op3: .text "< @"
op4: .text "> @"
op5: .text "> @"
op6: .text "> @"
op7: .text "> @"
op8: .text "<=@"
op9: .text "<=@"
op10: .text "<=@"
op11: .text "<=@"
op12: .text ">=@"
op13: .text ">=@"
op14: .text ">=@"
op15: .text ">=@"
op16: .text "==@"
op17: .text "==@"
op18: .text "==@"
op19: .text "==@"
cs: .byte 7, $c7, $37, $97, $67
}
// Print a newline

View File

@ -320,7 +320,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
printu: scope:[printu] from main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@2 main::@20 main::@21 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9
[167] (byte) printu::res#20 ← phi( main::@10/(byte) printu::res#8 main::@11/(byte) printu::res#9 main::@12/(byte) printu::res#10 main::@13/(byte) printu::res#11 main::@14/(byte) printu::res#12 main::@15/(byte) printu::res#13 main::@16/(byte) printu::res#14 main::@17/(byte) printu::res#15 main::@18/(byte) printu::res#16 main::@19/(byte) printu::res#17 main::@2/(byte) printu::res#0 main::@20/(byte) printu::res#18 main::@21/(byte) printu::res#19 main::@3/(byte) printu::res#1 main::@4/(byte) printu::res#2 main::@5/(byte) printu::res#3 main::@6/(byte) printu::res#4 main::@7/(byte) printu::res#5 main::@8/(byte) printu::res#6 main::@9/(byte) printu::res#7 )
[167] (byte) printu::b#20 ← phi( main::@10/(byte) printu::b#8 main::@11/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@12/(byte) printu::b#10 main::@13/(byte) printu::b#11 main::@14/(byte) printu::b#12 main::@15/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@16/(byte) printu::b#14 main::@17/(byte) printu::b#15 main::@18/(byte) printu::b#16 main::@19/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@2/(byte) printu::b#0 main::@20/(byte) printu::b#18 main::@21/(byte) printu::b#19 main::@3/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@4/(byte) printu::b#2 main::@5/(byte) printu::b#3 main::@6/(byte) printu::b#4 main::@7/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@8/(byte) printu::b#6 main::@9/(byte) printu::b#7 )
[167] (byte[]) printu::op#20 ← phi( main::@10/(const string) main::op8 main::@11/(const string) main::op9 main::@12/(const string) main::op10 main::@13/(const string) main::op11 main::@14/(const string) main::op12 main::@15/(const string) main::op13 main::@16/(const string) main::op14 main::@17/(const string) main::op15 main::@18/(const string) main::op16 main::@19/(const string) main::op17 main::@2/(const string) main::op main::@20/(const string) main::op18 main::@21/(const string) main::op19 main::@3/(const string) main::op1 main::@4/(const string) main::op2 main::@5/(const string) main::op3 main::@6/(const string) main::op4 main::@7/(const string) main::op5 main::@8/(const string) main::op6 main::@9/(const string) main::op7 )
[167] (byte[]) printu::op#20 ← phi( main::@10/(const string) main::op8 main::@11/(const string) main::op8 main::@12/(const string) main::op8 main::@13/(const string) main::op8 main::@14/(const string) main::op12 main::@15/(const string) main::op12 main::@16/(const string) main::op12 main::@17/(const string) main::op12 main::@18/(const string) main::op16 main::@19/(const string) main::op16 main::@2/(const string) main::op main::@20/(const string) main::op16 main::@21/(const string) main::op16 main::@3/(const string) main::op main::@4/(const string) main::op main::@5/(const string) main::op main::@6/(const string) main::op4 main::@7/(const string) main::op4 main::@8/(const string) main::op4 main::@9/(const string) main::op4 )
[167] (byte) printu::a#20 ← phi( main::@10/(byte) printu::a#8 main::@11/(byte) printu::a#9 main::@12/(byte) printu::a#10 main::@13/(byte) printu::a#11 main::@14/(byte) printu::a#12 main::@15/(byte) printu::a#13 main::@16/(byte) printu::a#14 main::@17/(byte) printu::a#15 main::@18/(byte) printu::a#16 main::@19/(byte) printu::a#17 main::@2/(byte) printu::a#0 main::@20/(byte) printu::a#18 main::@21/(byte) printu::a#19 main::@3/(byte) printu::a#1 main::@4/(byte) printu::a#2 main::@5/(byte) printu::a#3 main::@6/(byte) printu::a#4 main::@7/(byte) printu::a#5 main::@8/(byte) printu::a#6 main::@9/(byte) printu::a#7 )
[167] (byte*) print_char_cursor#95 ← phi( main::@10/(byte*~) print_char_cursor#143 main::@11/(byte*) print_char_cursor#55 main::@12/(byte*) print_char_cursor#55 main::@13/(byte*) print_char_cursor#55 main::@14/(byte*~) print_char_cursor#147 main::@15/(byte*) print_char_cursor#55 main::@16/(byte*) print_char_cursor#55 main::@17/(byte*) print_char_cursor#55 main::@18/(byte*~) print_char_cursor#151 main::@19/(byte*) print_char_cursor#55 main::@2/(byte*) print_char_cursor#120 main::@20/(byte*) print_char_cursor#55 main::@21/(byte*) print_char_cursor#55 main::@3/(byte*) print_char_cursor#55 main::@4/(byte*) print_char_cursor#55 main::@5/(byte*) print_char_cursor#55 main::@6/(byte*~) print_char_cursor#159 main::@7/(byte*) print_char_cursor#55 main::@8/(byte*) print_char_cursor#55 main::@9/(byte*) print_char_cursor#55 )
[168] call print_char

View File

@ -2076,6 +2076,7 @@ Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [154] if(true) goto main::@22
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization Pass2ConstantStringConsolidation
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value main::i#1 ← ++ main::i#10 to ++
@ -2160,17 +2161,17 @@ Inlining constant with var siblings (const byte[]) printu::op#18
Inlining constant with var siblings (const byte[]) printu::op#19
Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined printu::op#0 = (const string) main::op
Constant inlined printu::op#1 = (const string) main::op1
Constant inlined printu::op#1 = (const string) main::op
Constant inlined printu::op#8 = (const string) main::op8
Constant inlined printu::op#9 = (const string) main::op9
Constant inlined printu::op#6 = (const string) main::op6
Constant inlined printu::op#9 = (const string) main::op8
Constant inlined printu::op#6 = (const string) main::op4
Constant inlined main::r#39 = (byte) '+'
Constant inlined printu::op#7 = (const string) main::op7
Constant inlined printu::op#7 = (const string) main::op4
Constant inlined printu::op#4 = (const string) main::op4
Constant inlined $0 = (const byte[]) print_hextab#0
Constant inlined printu::op#5 = (const string) main::op5
Constant inlined printu::op#2 = (const string) main::op2
Constant inlined printu::op#3 = (const string) main::op3
Constant inlined printu::op#5 = (const string) main::op4
Constant inlined printu::op#2 = (const string) main::op
Constant inlined printu::op#3 = (const string) main::op
Constant inlined main::r#33 = (byte) '-'
Constant inlined main::r#34 = (byte) '+'
Constant inlined main::r#31 = (byte) '-'
@ -2180,14 +2181,19 @@ Constant inlined main::r#38 = (byte) '+'
Constant inlined main::r#35 = (byte) '-'
Constant inlined main::r#36 = (byte) '+'
Constant inlined main::r#30 = (byte) '+'
Constant inlined main::op11 = (const string) main::op8
Constant inlined printu::b#17 = (byte/signed byte/word/signed word/dword/signed dword) 55
Constant inlined main::op10 = (const string) main::op8
Constant inlined main::op15 = (const string) main::op12
Constant inlined printu::b#13 = (byte/signed byte/word/signed word/dword/signed dword) 55
Constant inlined main::op13 = (const string) main::op12
Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined main::op14 = (const string) main::op12
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined printu::op#17 = (const string) main::op17
Constant inlined printu::op#17 = (const string) main::op16
Constant inlined main::r#19 = (byte) '-'
Constant inlined printu::op#18 = (const string) main::op18
Constant inlined printu::op#19 = (const string) main::op19
Constant inlined printu::op#18 = (const string) main::op16
Constant inlined printu::op#19 = (const string) main::op16
Constant inlined main::r#17 = (byte) '-'
Constant inlined main::r#18 = (byte) '+'
Constant inlined main::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 7
@ -2198,7 +2204,10 @@ Constant inlined main::r#15 = (byte) '-'
Constant inlined main::r#16 = (byte) '+'
Constant inlined main::r#13 = (byte) '-'
Constant inlined main::r#14 = (byte) '+'
Constant inlined main::op19 = (const string) main::op16
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::op17 = (const string) main::op16
Constant inlined main::op18 = (const string) main::op16
Constant inlined main::r#0 = (byte) '-'
Constant inlined main::r#1 = (byte) '-'
Constant inlined main::r#8 = (byte) '+'
@ -2216,22 +2225,29 @@ Constant inlined main::r#3 = (byte) '-'
Constant inlined print_char::ch#3 = (byte) ' '
Constant inlined main::r#22 = (byte) '+'
Constant inlined printu::b#5 = (byte/signed byte/word/signed word/dword/signed dword) 55
Constant inlined printu::op#10 = (const string) main::op10
Constant inlined main::op1 = (const string) main::op
Constant inlined printu::op#10 = (const string) main::op8
Constant inlined print_char::ch#2 = (byte) ' '
Constant inlined main::r#23 = (byte) '-'
Constant inlined printu::op#11 = (const string) main::op11
Constant inlined printu::op#11 = (const string) main::op8
Constant inlined main::r#20 = (byte) '+'
Constant inlined printu::op#12 = (const string) main::op12
Constant inlined main::r#21 = (byte) '-'
Constant inlined printu::op#13 = (const string) main::op13
Constant inlined printu::op#13 = (const string) main::op12
Constant inlined main::r#26 = (byte) '+'
Constant inlined printu::b#1 = (byte/signed byte/word/signed word/dword/signed dword) 55
Constant inlined printu::op#14 = (const string) main::op14
Constant inlined printu::op#14 = (const string) main::op12
Constant inlined main::r#27 = (byte) '-'
Constant inlined printu::op#15 = (const string) main::op15
Constant inlined printu::op#15 = (const string) main::op12
Constant inlined main::r#24 = (byte) '+'
Constant inlined printu::op#16 = (const string) main::op16
Constant inlined main::r#25 = (byte) '-'
Constant inlined main::op9 = (const string) main::op8
Constant inlined main::op6 = (const string) main::op4
Constant inlined main::op7 = (const string) main::op4
Constant inlined main::op5 = (const string) main::op4
Constant inlined main::op2 = (const string) main::op
Constant inlined main::op3 = (const string) main::op
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@71(between main::@70 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
@ -2732,7 +2748,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
printu: scope:[printu] from main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@2 main::@20 main::@21 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9
[167] (byte) printu::res#20 ← phi( main::@10/(byte) printu::res#8 main::@11/(byte) printu::res#9 main::@12/(byte) printu::res#10 main::@13/(byte) printu::res#11 main::@14/(byte) printu::res#12 main::@15/(byte) printu::res#13 main::@16/(byte) printu::res#14 main::@17/(byte) printu::res#15 main::@18/(byte) printu::res#16 main::@19/(byte) printu::res#17 main::@2/(byte) printu::res#0 main::@20/(byte) printu::res#18 main::@21/(byte) printu::res#19 main::@3/(byte) printu::res#1 main::@4/(byte) printu::res#2 main::@5/(byte) printu::res#3 main::@6/(byte) printu::res#4 main::@7/(byte) printu::res#5 main::@8/(byte) printu::res#6 main::@9/(byte) printu::res#7 )
[167] (byte) printu::b#20 ← phi( main::@10/(byte) printu::b#8 main::@11/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@12/(byte) printu::b#10 main::@13/(byte) printu::b#11 main::@14/(byte) printu::b#12 main::@15/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@16/(byte) printu::b#14 main::@17/(byte) printu::b#15 main::@18/(byte) printu::b#16 main::@19/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@2/(byte) printu::b#0 main::@20/(byte) printu::b#18 main::@21/(byte) printu::b#19 main::@3/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@4/(byte) printu::b#2 main::@5/(byte) printu::b#3 main::@6/(byte) printu::b#4 main::@7/(byte/signed byte/word/signed word/dword/signed dword) 55 main::@8/(byte) printu::b#6 main::@9/(byte) printu::b#7 )
[167] (byte[]) printu::op#20 ← phi( main::@10/(const string) main::op8 main::@11/(const string) main::op9 main::@12/(const string) main::op10 main::@13/(const string) main::op11 main::@14/(const string) main::op12 main::@15/(const string) main::op13 main::@16/(const string) main::op14 main::@17/(const string) main::op15 main::@18/(const string) main::op16 main::@19/(const string) main::op17 main::@2/(const string) main::op main::@20/(const string) main::op18 main::@21/(const string) main::op19 main::@3/(const string) main::op1 main::@4/(const string) main::op2 main::@5/(const string) main::op3 main::@6/(const string) main::op4 main::@7/(const string) main::op5 main::@8/(const string) main::op6 main::@9/(const string) main::op7 )
[167] (byte[]) printu::op#20 ← phi( main::@10/(const string) main::op8 main::@11/(const string) main::op8 main::@12/(const string) main::op8 main::@13/(const string) main::op8 main::@14/(const string) main::op12 main::@15/(const string) main::op12 main::@16/(const string) main::op12 main::@17/(const string) main::op12 main::@18/(const string) main::op16 main::@19/(const string) main::op16 main::@2/(const string) main::op main::@20/(const string) main::op16 main::@21/(const string) main::op16 main::@3/(const string) main::op main::@4/(const string) main::op main::@5/(const string) main::op main::@6/(const string) main::op4 main::@7/(const string) main::op4 main::@8/(const string) main::op4 main::@9/(const string) main::op4 )
[167] (byte) printu::a#20 ← phi( main::@10/(byte) printu::a#8 main::@11/(byte) printu::a#9 main::@12/(byte) printu::a#10 main::@13/(byte) printu::a#11 main::@14/(byte) printu::a#12 main::@15/(byte) printu::a#13 main::@16/(byte) printu::a#14 main::@17/(byte) printu::a#15 main::@18/(byte) printu::a#16 main::@19/(byte) printu::a#17 main::@2/(byte) printu::a#0 main::@20/(byte) printu::a#18 main::@21/(byte) printu::a#19 main::@3/(byte) printu::a#1 main::@4/(byte) printu::a#2 main::@5/(byte) printu::a#3 main::@6/(byte) printu::a#4 main::@7/(byte) printu::a#5 main::@8/(byte) printu::a#6 main::@9/(byte) printu::a#7 )
[167] (byte*) print_char_cursor#95 ← phi( main::@10/(byte*~) print_char_cursor#143 main::@11/(byte*) print_char_cursor#55 main::@12/(byte*) print_char_cursor#55 main::@13/(byte*) print_char_cursor#55 main::@14/(byte*~) print_char_cursor#147 main::@15/(byte*) print_char_cursor#55 main::@16/(byte*) print_char_cursor#55 main::@17/(byte*) print_char_cursor#55 main::@18/(byte*~) print_char_cursor#151 main::@19/(byte*) print_char_cursor#55 main::@2/(byte*) print_char_cursor#120 main::@20/(byte*) print_char_cursor#55 main::@21/(byte*) print_char_cursor#55 main::@3/(byte*) print_char_cursor#55 main::@4/(byte*) print_char_cursor#55 main::@5/(byte*) print_char_cursor#55 main::@6/(byte*~) print_char_cursor#159 main::@7/(byte*) print_char_cursor#55 main::@8/(byte*) print_char_cursor#55 main::@9/(byte*) print_char_cursor#55 )
[168] call print_char
@ -3226,10 +3242,10 @@ main: {
//SEG52 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@3->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG53 [167] phi (byte[]) printu::op#20 = (const string) main::op1 [phi:main::@3->printu#2] -- pbuz1=pbuc1
lda #<op1
//SEG53 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@3->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op1
lda #>op
sta printu.op+1
//SEG54 [167] phi (byte) printu::a#20 = (byte) printu::a#1 [phi:main::@3->printu#3] -- register_copy
//SEG55 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@3->printu#4] -- register_copy
@ -3276,10 +3292,10 @@ main: {
printu_from_b4:
//SEG70 [167] phi (byte) printu::res#20 = (byte) printu::res#2 [phi:main::@4->printu#0] -- register_copy
//SEG71 [167] phi (byte) printu::b#20 = (byte) printu::b#2 [phi:main::@4->printu#1] -- register_copy
//SEG72 [167] phi (byte[]) printu::op#20 = (const string) main::op2 [phi:main::@4->printu#2] -- pbuz1=pbuc1
lda #<op2
//SEG72 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@4->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op2
lda #>op
sta printu.op+1
//SEG73 [167] phi (byte) printu::a#20 = (byte) printu::a#2 [phi:main::@4->printu#3] -- register_copy
//SEG74 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@4->printu#4] -- register_copy
@ -3324,10 +3340,10 @@ main: {
printu_from_b5:
//SEG89 [167] phi (byte) printu::res#20 = (byte) printu::res#3 [phi:main::@5->printu#0] -- register_copy
//SEG90 [167] phi (byte) printu::b#20 = (byte) printu::b#3 [phi:main::@5->printu#1] -- register_copy
//SEG91 [167] phi (byte[]) printu::op#20 = (const string) main::op3 [phi:main::@5->printu#2] -- pbuz1=pbuc1
lda #<op3
//SEG91 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@5->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op3
lda #>op
sta printu.op+1
//SEG92 [167] phi (byte) printu::a#20 = (byte) printu::a#3 [phi:main::@5->printu#3] -- register_copy
//SEG93 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@5->printu#4] -- register_copy
@ -3434,10 +3450,10 @@ main: {
//SEG133 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@7->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG134 [167] phi (byte[]) printu::op#20 = (const string) main::op5 [phi:main::@7->printu#2] -- pbuz1=pbuc1
lda #<op5
//SEG134 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@7->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op5
lda #>op4
sta printu.op+1
//SEG135 [167] phi (byte) printu::a#20 = (byte) printu::a#5 [phi:main::@7->printu#3] -- register_copy
//SEG136 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@7->printu#4] -- register_copy
@ -3484,10 +3500,10 @@ main: {
printu_from_b8:
//SEG151 [167] phi (byte) printu::res#20 = (byte) printu::res#6 [phi:main::@8->printu#0] -- register_copy
//SEG152 [167] phi (byte) printu::b#20 = (byte) printu::b#6 [phi:main::@8->printu#1] -- register_copy
//SEG153 [167] phi (byte[]) printu::op#20 = (const string) main::op6 [phi:main::@8->printu#2] -- pbuz1=pbuc1
lda #<op6
//SEG153 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@8->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op6
lda #>op4
sta printu.op+1
//SEG154 [167] phi (byte) printu::a#20 = (byte) printu::a#6 [phi:main::@8->printu#3] -- register_copy
//SEG155 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@8->printu#4] -- register_copy
@ -3532,10 +3548,10 @@ main: {
printu_from_b9:
//SEG170 [167] phi (byte) printu::res#20 = (byte) printu::res#7 [phi:main::@9->printu#0] -- register_copy
//SEG171 [167] phi (byte) printu::b#20 = (byte) printu::b#7 [phi:main::@9->printu#1] -- register_copy
//SEG172 [167] phi (byte[]) printu::op#20 = (const string) main::op7 [phi:main::@9->printu#2] -- pbuz1=pbuc1
lda #<op7
//SEG172 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@9->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op7
lda #>op4
sta printu.op+1
//SEG173 [167] phi (byte) printu::a#20 = (byte) printu::a#7 [phi:main::@9->printu#3] -- register_copy
//SEG174 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@9->printu#4] -- register_copy
@ -3644,10 +3660,10 @@ main: {
//SEG214 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@11->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG215 [167] phi (byte[]) printu::op#20 = (const string) main::op9 [phi:main::@11->printu#2] -- pbuz1=pbuc1
lda #<op9
//SEG215 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@11->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op9
lda #>op8
sta printu.op+1
//SEG216 [167] phi (byte) printu::a#20 = (byte) printu::a#9 [phi:main::@11->printu#3] -- register_copy
//SEG217 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@11->printu#4] -- register_copy
@ -3694,10 +3710,10 @@ main: {
printu_from_b12:
//SEG232 [167] phi (byte) printu::res#20 = (byte) printu::res#10 [phi:main::@12->printu#0] -- register_copy
//SEG233 [167] phi (byte) printu::b#20 = (byte) printu::b#10 [phi:main::@12->printu#1] -- register_copy
//SEG234 [167] phi (byte[]) printu::op#20 = (const string) main::op10 [phi:main::@12->printu#2] -- pbuz1=pbuc1
lda #<op10
//SEG234 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@12->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op10
lda #>op8
sta printu.op+1
//SEG235 [167] phi (byte) printu::a#20 = (byte) printu::a#10 [phi:main::@12->printu#3] -- register_copy
//SEG236 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@12->printu#4] -- register_copy
@ -3742,10 +3758,10 @@ main: {
printu_from_b13:
//SEG251 [167] phi (byte) printu::res#20 = (byte) printu::res#11 [phi:main::@13->printu#0] -- register_copy
//SEG252 [167] phi (byte) printu::b#20 = (byte) printu::b#11 [phi:main::@13->printu#1] -- register_copy
//SEG253 [167] phi (byte[]) printu::op#20 = (const string) main::op11 [phi:main::@13->printu#2] -- pbuz1=pbuc1
lda #<op11
//SEG253 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@13->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op11
lda #>op8
sta printu.op+1
//SEG254 [167] phi (byte) printu::a#20 = (byte) printu::a#11 [phi:main::@13->printu#3] -- register_copy
//SEG255 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@13->printu#4] -- register_copy
@ -3852,10 +3868,10 @@ main: {
//SEG295 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@15->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG296 [167] phi (byte[]) printu::op#20 = (const string) main::op13 [phi:main::@15->printu#2] -- pbuz1=pbuc1
lda #<op13
//SEG296 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@15->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op13
lda #>op12
sta printu.op+1
//SEG297 [167] phi (byte) printu::a#20 = (byte) printu::a#13 [phi:main::@15->printu#3] -- register_copy
//SEG298 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@15->printu#4] -- register_copy
@ -3902,10 +3918,10 @@ main: {
printu_from_b16:
//SEG313 [167] phi (byte) printu::res#20 = (byte) printu::res#14 [phi:main::@16->printu#0] -- register_copy
//SEG314 [167] phi (byte) printu::b#20 = (byte) printu::b#14 [phi:main::@16->printu#1] -- register_copy
//SEG315 [167] phi (byte[]) printu::op#20 = (const string) main::op14 [phi:main::@16->printu#2] -- pbuz1=pbuc1
lda #<op14
//SEG315 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@16->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op14
lda #>op12
sta printu.op+1
//SEG316 [167] phi (byte) printu::a#20 = (byte) printu::a#14 [phi:main::@16->printu#3] -- register_copy
//SEG317 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@16->printu#4] -- register_copy
@ -3950,10 +3966,10 @@ main: {
printu_from_b17:
//SEG332 [167] phi (byte) printu::res#20 = (byte) printu::res#15 [phi:main::@17->printu#0] -- register_copy
//SEG333 [167] phi (byte) printu::b#20 = (byte) printu::b#15 [phi:main::@17->printu#1] -- register_copy
//SEG334 [167] phi (byte[]) printu::op#20 = (const string) main::op15 [phi:main::@17->printu#2] -- pbuz1=pbuc1
lda #<op15
//SEG334 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@17->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op15
lda #>op12
sta printu.op+1
//SEG335 [167] phi (byte) printu::a#20 = (byte) printu::a#15 [phi:main::@17->printu#3] -- register_copy
//SEG336 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@17->printu#4] -- register_copy
@ -4060,10 +4076,10 @@ main: {
//SEG376 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@19->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG377 [167] phi (byte[]) printu::op#20 = (const string) main::op17 [phi:main::@19->printu#2] -- pbuz1=pbuc1
lda #<op17
//SEG377 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@19->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op17
lda #>op16
sta printu.op+1
//SEG378 [167] phi (byte) printu::a#20 = (byte) printu::a#17 [phi:main::@19->printu#3] -- register_copy
//SEG379 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@19->printu#4] -- register_copy
@ -4110,10 +4126,10 @@ main: {
printu_from_b20:
//SEG394 [167] phi (byte) printu::res#20 = (byte) printu::res#18 [phi:main::@20->printu#0] -- register_copy
//SEG395 [167] phi (byte) printu::b#20 = (byte) printu::b#18 [phi:main::@20->printu#1] -- register_copy
//SEG396 [167] phi (byte[]) printu::op#20 = (const string) main::op18 [phi:main::@20->printu#2] -- pbuz1=pbuc1
lda #<op18
//SEG396 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@20->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op18
lda #>op16
sta printu.op+1
//SEG397 [167] phi (byte) printu::a#20 = (byte) printu::a#18 [phi:main::@20->printu#3] -- register_copy
//SEG398 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@20->printu#4] -- register_copy
@ -4158,10 +4174,10 @@ main: {
printu_from_b21:
//SEG413 [167] phi (byte) printu::res#20 = (byte) printu::res#19 [phi:main::@21->printu#0] -- register_copy
//SEG414 [167] phi (byte) printu::b#20 = (byte) printu::b#19 [phi:main::@21->printu#1] -- register_copy
//SEG415 [167] phi (byte[]) printu::op#20 = (const string) main::op19 [phi:main::@21->printu#2] -- pbuz1=pbuc1
lda #<op19
//SEG415 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@21->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op19
lda #>op16
sta printu.op+1
//SEG416 [167] phi (byte) printu::a#20 = (byte) printu::a#19 [phi:main::@21->printu#3] -- register_copy
//SEG417 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@21->printu#4] -- register_copy
@ -4212,25 +4228,10 @@ main: {
//SEG435 [6] phi (byte) main::a#10 = (byte) main::a#1 [phi:main::@71->main::@1#3] -- register_copy
jmp b1
op: .text "< @"
op1: .text "< @"
op2: .text "< @"
op3: .text "< @"
op4: .text "> @"
op5: .text "> @"
op6: .text "> @"
op7: .text "> @"
op8: .text "<=@"
op9: .text "<=@"
op10: .text "<=@"
op11: .text "<=@"
op12: .text ">=@"
op13: .text ">=@"
op14: .text ">=@"
op15: .text ">=@"
op16: .text "==@"
op17: .text "==@"
op18: .text "==@"
op19: .text "==@"
cs: .byte 7, $c7, $37, $97, $67
}
//SEG436 print_ln
@ -4863,10 +4864,10 @@ main: {
//SEG52 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@3->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG53 [167] phi (byte[]) printu::op#20 = (const string) main::op1 [phi:main::@3->printu#2] -- pbuz1=pbuc1
lda #<op1
//SEG53 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@3->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op1
lda #>op
sta printu.op+1
//SEG54 [167] phi (byte) printu::a#20 = (byte) printu::a#1 [phi:main::@3->printu#3] -- register_copy
//SEG55 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@3->printu#4] -- register_copy
@ -4907,10 +4908,10 @@ main: {
printu_from_b4:
//SEG70 [167] phi (byte) printu::res#20 = (byte) printu::res#2 [phi:main::@4->printu#0] -- register_copy
//SEG71 [167] phi (byte) printu::b#20 = (byte) printu::b#2 [phi:main::@4->printu#1] -- register_copy
//SEG72 [167] phi (byte[]) printu::op#20 = (const string) main::op2 [phi:main::@4->printu#2] -- pbuz1=pbuc1
lda #<op2
//SEG72 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@4->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op2
lda #>op
sta printu.op+1
//SEG73 [167] phi (byte) printu::a#20 = (byte) printu::a#2 [phi:main::@4->printu#3] -- register_copy
//SEG74 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@4->printu#4] -- register_copy
@ -4949,10 +4950,10 @@ main: {
printu_from_b5:
//SEG89 [167] phi (byte) printu::res#20 = (byte) printu::res#3 [phi:main::@5->printu#0] -- register_copy
//SEG90 [167] phi (byte) printu::b#20 = (byte) printu::b#3 [phi:main::@5->printu#1] -- register_copy
//SEG91 [167] phi (byte[]) printu::op#20 = (const string) main::op3 [phi:main::@5->printu#2] -- pbuz1=pbuc1
lda #<op3
//SEG91 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@5->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op3
lda #>op
sta printu.op+1
//SEG92 [167] phi (byte) printu::a#20 = (byte) printu::a#3 [phi:main::@5->printu#3] -- register_copy
//SEG93 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@5->printu#4] -- register_copy
@ -5047,10 +5048,10 @@ main: {
//SEG133 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@7->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG134 [167] phi (byte[]) printu::op#20 = (const string) main::op5 [phi:main::@7->printu#2] -- pbuz1=pbuc1
lda #<op5
//SEG134 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@7->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op5
lda #>op4
sta printu.op+1
//SEG135 [167] phi (byte) printu::a#20 = (byte) printu::a#5 [phi:main::@7->printu#3] -- register_copy
//SEG136 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@7->printu#4] -- register_copy
@ -5091,10 +5092,10 @@ main: {
printu_from_b8:
//SEG151 [167] phi (byte) printu::res#20 = (byte) printu::res#6 [phi:main::@8->printu#0] -- register_copy
//SEG152 [167] phi (byte) printu::b#20 = (byte) printu::b#6 [phi:main::@8->printu#1] -- register_copy
//SEG153 [167] phi (byte[]) printu::op#20 = (const string) main::op6 [phi:main::@8->printu#2] -- pbuz1=pbuc1
lda #<op6
//SEG153 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@8->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op6
lda #>op4
sta printu.op+1
//SEG154 [167] phi (byte) printu::a#20 = (byte) printu::a#6 [phi:main::@8->printu#3] -- register_copy
//SEG155 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@8->printu#4] -- register_copy
@ -5133,10 +5134,10 @@ main: {
printu_from_b9:
//SEG170 [167] phi (byte) printu::res#20 = (byte) printu::res#7 [phi:main::@9->printu#0] -- register_copy
//SEG171 [167] phi (byte) printu::b#20 = (byte) printu::b#7 [phi:main::@9->printu#1] -- register_copy
//SEG172 [167] phi (byte[]) printu::op#20 = (const string) main::op7 [phi:main::@9->printu#2] -- pbuz1=pbuc1
lda #<op7
//SEG172 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@9->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op7
lda #>op4
sta printu.op+1
//SEG173 [167] phi (byte) printu::a#20 = (byte) printu::a#7 [phi:main::@9->printu#3] -- register_copy
//SEG174 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@9->printu#4] -- register_copy
@ -5233,10 +5234,10 @@ main: {
//SEG214 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@11->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG215 [167] phi (byte[]) printu::op#20 = (const string) main::op9 [phi:main::@11->printu#2] -- pbuz1=pbuc1
lda #<op9
//SEG215 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@11->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op9
lda #>op8
sta printu.op+1
//SEG216 [167] phi (byte) printu::a#20 = (byte) printu::a#9 [phi:main::@11->printu#3] -- register_copy
//SEG217 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@11->printu#4] -- register_copy
@ -5277,10 +5278,10 @@ main: {
printu_from_b12:
//SEG232 [167] phi (byte) printu::res#20 = (byte) printu::res#10 [phi:main::@12->printu#0] -- register_copy
//SEG233 [167] phi (byte) printu::b#20 = (byte) printu::b#10 [phi:main::@12->printu#1] -- register_copy
//SEG234 [167] phi (byte[]) printu::op#20 = (const string) main::op10 [phi:main::@12->printu#2] -- pbuz1=pbuc1
lda #<op10
//SEG234 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@12->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op10
lda #>op8
sta printu.op+1
//SEG235 [167] phi (byte) printu::a#20 = (byte) printu::a#10 [phi:main::@12->printu#3] -- register_copy
//SEG236 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@12->printu#4] -- register_copy
@ -5319,10 +5320,10 @@ main: {
printu_from_b13:
//SEG251 [167] phi (byte) printu::res#20 = (byte) printu::res#11 [phi:main::@13->printu#0] -- register_copy
//SEG252 [167] phi (byte) printu::b#20 = (byte) printu::b#11 [phi:main::@13->printu#1] -- register_copy
//SEG253 [167] phi (byte[]) printu::op#20 = (const string) main::op11 [phi:main::@13->printu#2] -- pbuz1=pbuc1
lda #<op11
//SEG253 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@13->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op11
lda #>op8
sta printu.op+1
//SEG254 [167] phi (byte) printu::a#20 = (byte) printu::a#11 [phi:main::@13->printu#3] -- register_copy
//SEG255 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@13->printu#4] -- register_copy
@ -5417,10 +5418,10 @@ main: {
//SEG295 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@15->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG296 [167] phi (byte[]) printu::op#20 = (const string) main::op13 [phi:main::@15->printu#2] -- pbuz1=pbuc1
lda #<op13
//SEG296 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@15->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op13
lda #>op12
sta printu.op+1
//SEG297 [167] phi (byte) printu::a#20 = (byte) printu::a#13 [phi:main::@15->printu#3] -- register_copy
//SEG298 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@15->printu#4] -- register_copy
@ -5461,10 +5462,10 @@ main: {
printu_from_b16:
//SEG313 [167] phi (byte) printu::res#20 = (byte) printu::res#14 [phi:main::@16->printu#0] -- register_copy
//SEG314 [167] phi (byte) printu::b#20 = (byte) printu::b#14 [phi:main::@16->printu#1] -- register_copy
//SEG315 [167] phi (byte[]) printu::op#20 = (const string) main::op14 [phi:main::@16->printu#2] -- pbuz1=pbuc1
lda #<op14
//SEG315 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@16->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op14
lda #>op12
sta printu.op+1
//SEG316 [167] phi (byte) printu::a#20 = (byte) printu::a#14 [phi:main::@16->printu#3] -- register_copy
//SEG317 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@16->printu#4] -- register_copy
@ -5503,10 +5504,10 @@ main: {
printu_from_b17:
//SEG332 [167] phi (byte) printu::res#20 = (byte) printu::res#15 [phi:main::@17->printu#0] -- register_copy
//SEG333 [167] phi (byte) printu::b#20 = (byte) printu::b#15 [phi:main::@17->printu#1] -- register_copy
//SEG334 [167] phi (byte[]) printu::op#20 = (const string) main::op15 [phi:main::@17->printu#2] -- pbuz1=pbuc1
lda #<op15
//SEG334 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@17->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op15
lda #>op12
sta printu.op+1
//SEG335 [167] phi (byte) printu::a#20 = (byte) printu::a#15 [phi:main::@17->printu#3] -- register_copy
//SEG336 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@17->printu#4] -- register_copy
@ -5601,10 +5602,10 @@ main: {
//SEG376 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@19->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG377 [167] phi (byte[]) printu::op#20 = (const string) main::op17 [phi:main::@19->printu#2] -- pbuz1=pbuc1
lda #<op17
//SEG377 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@19->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op17
lda #>op16
sta printu.op+1
//SEG378 [167] phi (byte) printu::a#20 = (byte) printu::a#17 [phi:main::@19->printu#3] -- register_copy
//SEG379 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@19->printu#4] -- register_copy
@ -5645,10 +5646,10 @@ main: {
printu_from_b20:
//SEG394 [167] phi (byte) printu::res#20 = (byte) printu::res#18 [phi:main::@20->printu#0] -- register_copy
//SEG395 [167] phi (byte) printu::b#20 = (byte) printu::b#18 [phi:main::@20->printu#1] -- register_copy
//SEG396 [167] phi (byte[]) printu::op#20 = (const string) main::op18 [phi:main::@20->printu#2] -- pbuz1=pbuc1
lda #<op18
//SEG396 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@20->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op18
lda #>op16
sta printu.op+1
//SEG397 [167] phi (byte) printu::a#20 = (byte) printu::a#18 [phi:main::@20->printu#3] -- register_copy
//SEG398 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@20->printu#4] -- register_copy
@ -5687,10 +5688,10 @@ main: {
printu_from_b21:
//SEG413 [167] phi (byte) printu::res#20 = (byte) printu::res#19 [phi:main::@21->printu#0] -- register_copy
//SEG414 [167] phi (byte) printu::b#20 = (byte) printu::b#19 [phi:main::@21->printu#1] -- register_copy
//SEG415 [167] phi (byte[]) printu::op#20 = (const string) main::op19 [phi:main::@21->printu#2] -- pbuz1=pbuc1
lda #<op19
//SEG415 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@21->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op19
lda #>op16
sta printu.op+1
//SEG416 [167] phi (byte) printu::a#20 = (byte) printu::a#19 [phi:main::@21->printu#3] -- register_copy
//SEG417 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@21->printu#4] -- register_copy
@ -5741,25 +5742,10 @@ main: {
//SEG435 [6] phi (byte) main::a#10 = (byte) main::a#1 [phi:main::@71->main::@1#3] -- register_copy
jmp b1
op: .text "< @"
op1: .text "< @"
op2: .text "< @"
op3: .text "< @"
op4: .text "> @"
op5: .text "> @"
op6: .text "> @"
op7: .text "> @"
op8: .text "<=@"
op9: .text "<=@"
op10: .text "<=@"
op11: .text "<=@"
op12: .text ">=@"
op13: .text ">=@"
op14: .text ">=@"
op15: .text ">=@"
op16: .text "==@"
op17: .text "==@"
op18: .text "==@"
op19: .text "==@"
cs: .byte 7, $c7, $37, $97, $67
}
//SEG436 print_ln
@ -6373,25 +6359,10 @@ FINAL SYMBOL TABLE
(byte) main::i#1 i zp ZP_BYTE:3 11.0
(byte) main::i#10 i zp ZP_BYTE:3 0.8684210526315792
(const string) main::op op = (string) "< @"
(const string) main::op1 op1 = (string) "< @"
(const string) main::op10 op10 = (string) "<=@"
(const string) main::op11 op11 = (string) "<=@"
(const string) main::op12 op12 = (string) ">=@"
(const string) main::op13 op13 = (string) ">=@"
(const string) main::op14 op14 = (string) ">=@"
(const string) main::op15 op15 = (string) ">=@"
(const string) main::op16 op16 = (string) "==@"
(const string) main::op17 op17 = (string) "==@"
(const string) main::op18 op18 = (string) "==@"
(const string) main::op19 op19 = (string) "==@"
(const string) main::op2 op2 = (string) "< @"
(const string) main::op3 op3 = (string) "< @"
(const string) main::op4 op4 = (string) "> @"
(const string) main::op5 op5 = (string) "> @"
(const string) main::op6 op6 = (string) "> @"
(const string) main::op7 op7 = (string) "> @"
(const string) main::op8 op8 = (string) "<=@"
(const string) main::op9 op9 = (string) "<=@"
(byte) main::r
(byte) main::r#40 reg byte x 3.6666666666666665
(byte) main::r#41 reg byte x 5.5
@ -6680,10 +6651,10 @@ main: {
//SEG52 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@3->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG53 [167] phi (byte[]) printu::op#20 = (const string) main::op1 [phi:main::@3->printu#2] -- pbuz1=pbuc1
lda #<op1
//SEG53 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@3->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op1
lda #>op
sta printu.op+1
//SEG54 [167] phi (byte) printu::a#20 = (byte) printu::a#1 [phi:main::@3->printu#3] -- register_copy
//SEG55 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@3->printu#4] -- register_copy
@ -6716,10 +6687,10 @@ main: {
//SEG69 [167] phi from main::@4 to printu [phi:main::@4->printu]
//SEG70 [167] phi (byte) printu::res#20 = (byte) printu::res#2 [phi:main::@4->printu#0] -- register_copy
//SEG71 [167] phi (byte) printu::b#20 = (byte) printu::b#2 [phi:main::@4->printu#1] -- register_copy
//SEG72 [167] phi (byte[]) printu::op#20 = (const string) main::op2 [phi:main::@4->printu#2] -- pbuz1=pbuc1
lda #<op2
//SEG72 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@4->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op2
lda #>op
sta printu.op+1
//SEG73 [167] phi (byte) printu::a#20 = (byte) printu::a#2 [phi:main::@4->printu#3] -- register_copy
//SEG74 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@4->printu#4] -- register_copy
@ -6750,10 +6721,10 @@ main: {
//SEG88 [167] phi from main::@5 to printu [phi:main::@5->printu]
//SEG89 [167] phi (byte) printu::res#20 = (byte) printu::res#3 [phi:main::@5->printu#0] -- register_copy
//SEG90 [167] phi (byte) printu::b#20 = (byte) printu::b#3 [phi:main::@5->printu#1] -- register_copy
//SEG91 [167] phi (byte[]) printu::op#20 = (const string) main::op3 [phi:main::@5->printu#2] -- pbuz1=pbuc1
lda #<op3
//SEG91 [167] phi (byte[]) printu::op#20 = (const string) main::op [phi:main::@5->printu#2] -- pbuz1=pbuc1
lda #<op
sta printu.op
lda #>op3
lda #>op
sta printu.op+1
//SEG92 [167] phi (byte) printu::a#20 = (byte) printu::a#3 [phi:main::@5->printu#3] -- register_copy
//SEG93 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@5->printu#4] -- register_copy
@ -6828,10 +6799,10 @@ main: {
//SEG133 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@7->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG134 [167] phi (byte[]) printu::op#20 = (const string) main::op5 [phi:main::@7->printu#2] -- pbuz1=pbuc1
lda #<op5
//SEG134 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@7->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op5
lda #>op4
sta printu.op+1
//SEG135 [167] phi (byte) printu::a#20 = (byte) printu::a#5 [phi:main::@7->printu#3] -- register_copy
//SEG136 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@7->printu#4] -- register_copy
@ -6864,10 +6835,10 @@ main: {
//SEG150 [167] phi from main::@8 to printu [phi:main::@8->printu]
//SEG151 [167] phi (byte) printu::res#20 = (byte) printu::res#6 [phi:main::@8->printu#0] -- register_copy
//SEG152 [167] phi (byte) printu::b#20 = (byte) printu::b#6 [phi:main::@8->printu#1] -- register_copy
//SEG153 [167] phi (byte[]) printu::op#20 = (const string) main::op6 [phi:main::@8->printu#2] -- pbuz1=pbuc1
lda #<op6
//SEG153 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@8->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op6
lda #>op4
sta printu.op+1
//SEG154 [167] phi (byte) printu::a#20 = (byte) printu::a#6 [phi:main::@8->printu#3] -- register_copy
//SEG155 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@8->printu#4] -- register_copy
@ -6898,10 +6869,10 @@ main: {
//SEG169 [167] phi from main::@9 to printu [phi:main::@9->printu]
//SEG170 [167] phi (byte) printu::res#20 = (byte) printu::res#7 [phi:main::@9->printu#0] -- register_copy
//SEG171 [167] phi (byte) printu::b#20 = (byte) printu::b#7 [phi:main::@9->printu#1] -- register_copy
//SEG172 [167] phi (byte[]) printu::op#20 = (const string) main::op7 [phi:main::@9->printu#2] -- pbuz1=pbuc1
lda #<op7
//SEG172 [167] phi (byte[]) printu::op#20 = (const string) main::op4 [phi:main::@9->printu#2] -- pbuz1=pbuc1
lda #<op4
sta printu.op
lda #>op7
lda #>op4
sta printu.op+1
//SEG173 [167] phi (byte) printu::a#20 = (byte) printu::a#7 [phi:main::@9->printu#3] -- register_copy
//SEG174 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@9->printu#4] -- register_copy
@ -6978,10 +6949,10 @@ main: {
//SEG214 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@11->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG215 [167] phi (byte[]) printu::op#20 = (const string) main::op9 [phi:main::@11->printu#2] -- pbuz1=pbuc1
lda #<op9
//SEG215 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@11->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op9
lda #>op8
sta printu.op+1
//SEG216 [167] phi (byte) printu::a#20 = (byte) printu::a#9 [phi:main::@11->printu#3] -- register_copy
//SEG217 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@11->printu#4] -- register_copy
@ -7014,10 +6985,10 @@ main: {
//SEG231 [167] phi from main::@12 to printu [phi:main::@12->printu]
//SEG232 [167] phi (byte) printu::res#20 = (byte) printu::res#10 [phi:main::@12->printu#0] -- register_copy
//SEG233 [167] phi (byte) printu::b#20 = (byte) printu::b#10 [phi:main::@12->printu#1] -- register_copy
//SEG234 [167] phi (byte[]) printu::op#20 = (const string) main::op10 [phi:main::@12->printu#2] -- pbuz1=pbuc1
lda #<op10
//SEG234 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@12->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op10
lda #>op8
sta printu.op+1
//SEG235 [167] phi (byte) printu::a#20 = (byte) printu::a#10 [phi:main::@12->printu#3] -- register_copy
//SEG236 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@12->printu#4] -- register_copy
@ -7048,10 +7019,10 @@ main: {
//SEG250 [167] phi from main::@13 to printu [phi:main::@13->printu]
//SEG251 [167] phi (byte) printu::res#20 = (byte) printu::res#11 [phi:main::@13->printu#0] -- register_copy
//SEG252 [167] phi (byte) printu::b#20 = (byte) printu::b#11 [phi:main::@13->printu#1] -- register_copy
//SEG253 [167] phi (byte[]) printu::op#20 = (const string) main::op11 [phi:main::@13->printu#2] -- pbuz1=pbuc1
lda #<op11
//SEG253 [167] phi (byte[]) printu::op#20 = (const string) main::op8 [phi:main::@13->printu#2] -- pbuz1=pbuc1
lda #<op8
sta printu.op
lda #>op11
lda #>op8
sta printu.op+1
//SEG254 [167] phi (byte) printu::a#20 = (byte) printu::a#11 [phi:main::@13->printu#3] -- register_copy
//SEG255 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@13->printu#4] -- register_copy
@ -7126,10 +7097,10 @@ main: {
//SEG295 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@15->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG296 [167] phi (byte[]) printu::op#20 = (const string) main::op13 [phi:main::@15->printu#2] -- pbuz1=pbuc1
lda #<op13
//SEG296 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@15->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op13
lda #>op12
sta printu.op+1
//SEG297 [167] phi (byte) printu::a#20 = (byte) printu::a#13 [phi:main::@15->printu#3] -- register_copy
//SEG298 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@15->printu#4] -- register_copy
@ -7162,10 +7133,10 @@ main: {
//SEG312 [167] phi from main::@16 to printu [phi:main::@16->printu]
//SEG313 [167] phi (byte) printu::res#20 = (byte) printu::res#14 [phi:main::@16->printu#0] -- register_copy
//SEG314 [167] phi (byte) printu::b#20 = (byte) printu::b#14 [phi:main::@16->printu#1] -- register_copy
//SEG315 [167] phi (byte[]) printu::op#20 = (const string) main::op14 [phi:main::@16->printu#2] -- pbuz1=pbuc1
lda #<op14
//SEG315 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@16->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op14
lda #>op12
sta printu.op+1
//SEG316 [167] phi (byte) printu::a#20 = (byte) printu::a#14 [phi:main::@16->printu#3] -- register_copy
//SEG317 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@16->printu#4] -- register_copy
@ -7196,10 +7167,10 @@ main: {
//SEG331 [167] phi from main::@17 to printu [phi:main::@17->printu]
//SEG332 [167] phi (byte) printu::res#20 = (byte) printu::res#15 [phi:main::@17->printu#0] -- register_copy
//SEG333 [167] phi (byte) printu::b#20 = (byte) printu::b#15 [phi:main::@17->printu#1] -- register_copy
//SEG334 [167] phi (byte[]) printu::op#20 = (const string) main::op15 [phi:main::@17->printu#2] -- pbuz1=pbuc1
lda #<op15
//SEG334 [167] phi (byte[]) printu::op#20 = (const string) main::op12 [phi:main::@17->printu#2] -- pbuz1=pbuc1
lda #<op12
sta printu.op
lda #>op15
lda #>op12
sta printu.op+1
//SEG335 [167] phi (byte) printu::a#20 = (byte) printu::a#15 [phi:main::@17->printu#3] -- register_copy
//SEG336 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@17->printu#4] -- register_copy
@ -7274,10 +7245,10 @@ main: {
//SEG376 [167] phi (byte) printu::b#20 = (byte/signed byte/word/signed word/dword/signed dword) 55 [phi:main::@19->printu#1] -- vbuz1=vbuc1
lda #$37
sta printu.b
//SEG377 [167] phi (byte[]) printu::op#20 = (const string) main::op17 [phi:main::@19->printu#2] -- pbuz1=pbuc1
lda #<op17
//SEG377 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@19->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op17
lda #>op16
sta printu.op+1
//SEG378 [167] phi (byte) printu::a#20 = (byte) printu::a#17 [phi:main::@19->printu#3] -- register_copy
//SEG379 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@19->printu#4] -- register_copy
@ -7310,10 +7281,10 @@ main: {
//SEG393 [167] phi from main::@20 to printu [phi:main::@20->printu]
//SEG394 [167] phi (byte) printu::res#20 = (byte) printu::res#18 [phi:main::@20->printu#0] -- register_copy
//SEG395 [167] phi (byte) printu::b#20 = (byte) printu::b#18 [phi:main::@20->printu#1] -- register_copy
//SEG396 [167] phi (byte[]) printu::op#20 = (const string) main::op18 [phi:main::@20->printu#2] -- pbuz1=pbuc1
lda #<op18
//SEG396 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@20->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op18
lda #>op16
sta printu.op+1
//SEG397 [167] phi (byte) printu::a#20 = (byte) printu::a#18 [phi:main::@20->printu#3] -- register_copy
//SEG398 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@20->printu#4] -- register_copy
@ -7344,10 +7315,10 @@ main: {
//SEG412 [167] phi from main::@21 to printu [phi:main::@21->printu]
//SEG413 [167] phi (byte) printu::res#20 = (byte) printu::res#19 [phi:main::@21->printu#0] -- register_copy
//SEG414 [167] phi (byte) printu::b#20 = (byte) printu::b#19 [phi:main::@21->printu#1] -- register_copy
//SEG415 [167] phi (byte[]) printu::op#20 = (const string) main::op19 [phi:main::@21->printu#2] -- pbuz1=pbuc1
lda #<op19
//SEG415 [167] phi (byte[]) printu::op#20 = (const string) main::op16 [phi:main::@21->printu#2] -- pbuz1=pbuc1
lda #<op16
sta printu.op
lda #>op19
lda #>op16
sta printu.op+1
//SEG416 [167] phi (byte) printu::a#20 = (byte) printu::a#19 [phi:main::@21->printu#3] -- register_copy
//SEG417 [167] phi (byte*) print_char_cursor#95 = (byte*) print_char_cursor#55 [phi:main::@21->printu#4] -- register_copy
@ -7388,25 +7359,10 @@ main: {
//SEG435 [6] phi (byte) main::a#10 = (byte) main::a#1 [phi:main::@71->main::@1#3] -- register_copy
jmp b1
op: .text "< @"
op1: .text "< @"
op2: .text "< @"
op3: .text "< @"
op4: .text "> @"
op5: .text "> @"
op6: .text "> @"
op7: .text "> @"
op8: .text "<=@"
op9: .text "<=@"
op10: .text "<=@"
op11: .text "<=@"
op12: .text ">=@"
op13: .text ">=@"
op14: .text ">=@"
op15: .text ">=@"
op16: .text "==@"
op17: .text "==@"
op18: .text "==@"
op19: .text "==@"
cs: .byte 7, $c7, $37, $97, $67
}
//SEG436 print_ln

View File

@ -81,25 +81,10 @@
(byte) main::i#1 i zp ZP_BYTE:3 11.0
(byte) main::i#10 i zp ZP_BYTE:3 0.8684210526315792
(const string) main::op op = (string) "< @"
(const string) main::op1 op1 = (string) "< @"
(const string) main::op10 op10 = (string) "<=@"
(const string) main::op11 op11 = (string) "<=@"
(const string) main::op12 op12 = (string) ">=@"
(const string) main::op13 op13 = (string) ">=@"
(const string) main::op14 op14 = (string) ">=@"
(const string) main::op15 op15 = (string) ">=@"
(const string) main::op16 op16 = (string) "==@"
(const string) main::op17 op17 = (string) "==@"
(const string) main::op18 op18 = (string) "==@"
(const string) main::op19 op19 = (string) "==@"
(const string) main::op2 op2 = (string) "< @"
(const string) main::op3 op3 = (string) "< @"
(const string) main::op4 op4 = (string) "> @"
(const string) main::op5 op5 = (string) "> @"
(const string) main::op6 op6 = (string) "> @"
(const string) main::op7 op7 = (string) "> @"
(const string) main::op8 op8 = (string) "<=@"
(const string) main::op9 op9 = (string) "<=@"
(byte) main::r
(byte) main::r#40 reg byte x 3.6666666666666665
(byte) main::r#41 reg byte x 5.5

View File

@ -75,9 +75,6 @@ test_16s: {
cmp #$c
bne b1
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff
divisors: .word 5, -7, $b, -$d, -$11, $13
}
@ -398,9 +395,6 @@ test_8s: {
cmp #6
bne b1
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $7f, -$7f, -$7f, $7f, $7f, $7f
divisors: .byte 5, 7, -$b, -$d, $11, $13
}
@ -598,9 +592,6 @@ test_16u: {
cmp #$c
bne b1
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $ffff, $ffff, $ffff, $ffff, $ffff, $ffff
divisors: .word 5, 7, $b, $d, $11, $13
}
@ -684,9 +675,6 @@ test_8u: {
lda print_line_cursor+1
sta print_char_cursor+1
jmp b1
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff
divisors: .byte 5, 7, $b, $d, $11, $13
}
@ -714,3 +702,6 @@ print_cls: {
rts
}
print_hextab: .text "0123456789abcdef"
str: .text " / @"
str2: .text " @"
str1: .text " = @"

View File

@ -153,7 +153,7 @@ print_char::@return: scope:[print_char] from print_char
[75] return
to:@return
print_str: scope:[print_str] from test_16s::@4 test_16s::@6 test_16s::@8 test_16u::@4 test_16u::@6 test_16u::@8 test_8s::@4 test_8s::@6 test_8s::@8 test_8u::@4 test_8u::@6 test_8u::@8
[76] (byte*) print_str::str#15 ← phi( test_16s::@4/(const string) test_16s::str test_16s::@6/(const string) test_16s::str1 test_16s::@8/(const string) test_16s::str2 test_16u::@4/(const string) test_16u::str test_16u::@6/(const string) test_16u::str1 test_16u::@8/(const string) test_16u::str2 test_8s::@4/(const string) test_8s::str test_8s::@6/(const string) test_8s::str1 test_8s::@8/(const string) test_8s::str2 test_8u::@4/(const string) test_8u::str test_8u::@6/(const string) test_8u::str1 test_8u::@8/(const string) test_8u::str2 )
[76] (byte*) print_str::str#15 ← phi( test_16s::@4/(const string) str test_16s::@6/(const string) str1 test_16s::@8/(const string) str2 test_16u::@4/(const string) str test_16u::@6/(const string) str1 test_16u::@8/(const string) str2 test_8s::@4/(const string) str test_8s::@6/(const string) str1 test_8s::@8/(const string) str2 test_8u::@4/(const string) str test_8u::@6/(const string) str1 test_8u::@8/(const string) str2 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[77] (byte*) print_char_cursor#128 ← phi( print_str/(byte*) print_char_cursor#18 print_str::@2/(byte*) print_char_cursor#1 )

View File

@ -3007,6 +3007,7 @@ Constant (const word) divr16s::remu#1 = ((word))divr16s::$7
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [256] if((const bool) divr16s::$1) goto divr16s::@1
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization Pass2ConstantStringConsolidation
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
@ -3095,50 +3096,62 @@ Inlining constant with var siblings (const byte) test_8s::i#0
Inlining constant with var siblings (const byte) test_16s::i#0
Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined divr16u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#12 = (const string) test_16s::str2
Constant inlined print_str::str#11 = (const string) test_16s::str1
Constant inlined print_str::str#10 = (const string) test_16s::str
Constant inlined test_8s::str1 = (const string) str1
Constant inlined test_8s::str2 = (const string) str2
Constant inlined $0 = (const byte[]) print_hextab#0
Constant inlined divr16s::$7 = -(const signed word) divr16s::rem#0
Constant inlined divr16s::neg#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined divr8u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr16s::neg#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined test_16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined test_8u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined test_8s::$3 = -(byte/signed byte/word/signed word/dword/signed dword) 13
Constant inlined test_8s::$2 = -(byte/signed byte/word/signed word/dword/signed dword) 11
Constant inlined test_8s::$1 = -(byte/signed byte/word/signed word/dword/signed dword) 127
Constant inlined test_8s::$0 = -(byte/signed byte/word/signed word/dword/signed dword) 127
Constant inlined test_16s::str1 = (const string) str1
Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined test_16s::str2 = (const string) str2
Constant inlined test_16s::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr8u::rem#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#9 = (const string) str2
Constant inlined print_str::str#4 = (const string) str
Constant inlined print_str::str#3 = (const string) str2
Constant inlined div8s::neg#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined print_str::str#2 = (const string) str1
Constant inlined div8s::neg#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#1 = (const string) str
Constant inlined print_str::str#8 = (const string) str1
Constant inlined print_str::str#7 = (const string) str
Constant inlined test_8u::str = (const string) str
Constant inlined print_str::str#6 = (const string) str2
Constant inlined print_str::str#5 = (const string) str1
Constant inlined test_16s::str = (const string) str
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#12 = (const string) str2
Constant inlined print_str::str#11 = (const string) str1
Constant inlined print_str::str#10 = (const string) str
Constant inlined divr16s::$7 = -(const signed word) divr16s::rem#0
Constant inlined divr16s::neg#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined divr16s::neg#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined test_8u::str2 = (const string) str2
Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined test_8u::str1 = (const string) str1
Constant inlined test_8s::str = (const string) str
Constant inlined test_16s::$3 = -(byte/signed byte/word/signed word/dword/signed dword) 7
Constant inlined test_16s::$4 = -(byte/signed byte/word/signed word/dword/signed dword) 13
Constant inlined test_16s::$5 = -(byte/signed byte/word/signed word/dword/signed dword) 17
Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined test_16s::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined divr8u::rem#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr8u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined test_16u::str1 = (const string) str1
Constant inlined print_char::ch#2 = (byte) ' '
Constant inlined print_str::str#9 = (const string) test_8s::str2
Constant inlined test_16u::str = (const string) str
Constant inlined test_16u::str2 = (const string) str2
Constant inlined print_char::ch#1 = (byte) '-'
Constant inlined print_char::ch#0 = (byte) '-'
Constant inlined print_str::str#4 = (const string) test_16u::str
Constant inlined print_str::str#3 = (const string) test_8u::str2
Constant inlined div8s::neg#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined print_str::str#2 = (const string) test_8u::str1
Constant inlined div8s::neg#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#1 = (const string) test_8u::str
Constant inlined print_str::str#8 = (const string) test_8s::str1
Constant inlined test_16s::$0 = -(word/signed word/dword/signed dword) 32767
Constant inlined print_str::str#7 = (const string) test_8s::str
Constant inlined test_16s::$1 = -(word/signed word/dword/signed dword) 32767
Constant inlined print_str::str#6 = (const string) test_16u::str2
Constant inlined divr16s::remu#1 = ((word))-(const signed word) divr16s::rem#0
Constant inlined test_8s::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined test_16s::$2 = -(word/signed word/dword/signed dword) 32767
Constant inlined print_str::str#5 = (const string) test_16u::str1
Constant inlined divr16s::remu#2 = ((word))(const signed word) divr16s::rem#0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting test_16s::@12(between test_16s::@11 and test_16s::@1)
@ -3517,7 +3530,7 @@ print_char::@return: scope:[print_char] from print_char
[75] return
to:@return
print_str: scope:[print_str] from test_16s::@4 test_16s::@6 test_16s::@8 test_16u::@4 test_16u::@6 test_16u::@8 test_8s::@4 test_8s::@6 test_8s::@8 test_8u::@4 test_8u::@6 test_8u::@8
[76] (byte*) print_str::str#15 ← phi( test_16s::@4/(const string) test_16s::str test_16s::@6/(const string) test_16s::str1 test_16s::@8/(const string) test_16s::str2 test_16u::@4/(const string) test_16u::str test_16u::@6/(const string) test_16u::str1 test_16u::@8/(const string) test_16u::str2 test_8s::@4/(const string) test_8s::str test_8s::@6/(const string) test_8s::str1 test_8s::@8/(const string) test_8s::str2 test_8u::@4/(const string) test_8u::str test_8u::@6/(const string) test_8u::str1 test_8u::@8/(const string) test_8u::str2 )
[76] (byte*) print_str::str#15 ← phi( test_16s::@4/(const string) str test_16s::@6/(const string) str1 test_16s::@8/(const string) str2 test_16u::@4/(const string) str test_16u::@6/(const string) str1 test_16u::@8/(const string) str2 test_8s::@4/(const string) str test_8s::@6/(const string) str1 test_8s::@8/(const string) str2 test_8u::@4/(const string) str test_8u::@6/(const string) str1 test_8u::@8/(const string) str2 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[77] (byte*) print_char_cursor#128 ← phi( print_str/(byte*) print_char_cursor#18 print_str::@2/(byte*) print_char_cursor#1 )
@ -4630,7 +4643,7 @@ test_16s: {
//SEG53 [28] call print_str
//SEG54 [76] phi from test_16s::@4 to print_str [phi:test_16s::@4->print_str]
print_str_from_b4:
//SEG55 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str [phi:test_16s::@4->print_str#0] -- pbuz1=pbuc1
//SEG55 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_16s::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -4658,7 +4671,7 @@ test_16s: {
//SEG64 [32] call print_str
//SEG65 [76] phi from test_16s::@6 to print_str [phi:test_16s::@6->print_str]
print_str_from_b6:
//SEG66 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str1 [phi:test_16s::@6->print_str#0] -- pbuz1=pbuc1
//SEG66 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_16s::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -4686,7 +4699,7 @@ test_16s: {
//SEG75 [36] call print_str
//SEG76 [76] phi from test_16s::@8 to print_str [phi:test_16s::@8->print_str]
print_str_from_b8:
//SEG77 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str2 [phi:test_16s::@8->print_str#0] -- pbuz1=pbuc1
//SEG77 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_16s::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -4733,9 +4746,6 @@ test_16s: {
breturn:
//SEG93 [43] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff
divisors: .word 5, -7, $b, -$d, -$11, $13
}
@ -5408,7 +5418,7 @@ test_8s: {
//SEG288 [144] call print_str
//SEG289 [76] phi from test_8s::@4 to print_str [phi:test_8s::@4->print_str]
print_str_from_b4:
//SEG290 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str [phi:test_8s::@4->print_str#0] -- pbuz1=pbuc1
//SEG290 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_8s::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -5434,7 +5444,7 @@ test_8s: {
//SEG299 [148] call print_str
//SEG300 [76] phi from test_8s::@6 to print_str [phi:test_8s::@6->print_str]
print_str_from_b6:
//SEG301 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str1 [phi:test_8s::@6->print_str#0] -- pbuz1=pbuc1
//SEG301 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_8s::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -5460,7 +5470,7 @@ test_8s: {
//SEG310 [152] call print_str
//SEG311 [76] phi from test_8s::@8 to print_str [phi:test_8s::@8->print_str]
print_str_from_b8:
//SEG312 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str2 [phi:test_8s::@8->print_str#0] -- pbuz1=pbuc1
//SEG312 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_8s::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -5502,9 +5512,6 @@ test_8s: {
breturn:
//SEG328 [159] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $7f, -$7f, -$7f, $7f, $7f, $7f
divisors: .byte 5, 7, -$b, -$d, $11, $13
}
@ -5943,7 +5950,7 @@ test_16u: {
//SEG469 [231] call print_str
//SEG470 [76] phi from test_16u::@4 to print_str [phi:test_16u::@4->print_str]
print_str_from_b4:
//SEG471 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str [phi:test_16u::@4->print_str#0] -- pbuz1=pbuc1
//SEG471 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_16u::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -5971,7 +5978,7 @@ test_16u: {
//SEG480 [235] call print_str
//SEG481 [76] phi from test_16u::@6 to print_str [phi:test_16u::@6->print_str]
print_str_from_b6:
//SEG482 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str1 [phi:test_16u::@6->print_str#0] -- pbuz1=pbuc1
//SEG482 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_16u::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -5999,7 +6006,7 @@ test_16u: {
//SEG491 [239] call print_str
//SEG492 [76] phi from test_16u::@8 to print_str [phi:test_16u::@8->print_str]
print_str_from_b8:
//SEG493 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str2 [phi:test_16u::@8->print_str#0] -- pbuz1=pbuc1
//SEG493 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_16u::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -6046,9 +6053,6 @@ test_16u: {
breturn:
//SEG509 [246] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $ffff, $ffff, $ffff, $ffff, $ffff, $ffff
divisors: .word 5, 7, $b, $d, $11, $13
}
@ -6173,7 +6177,7 @@ test_8u: {
//SEG547 [265] call print_str
//SEG548 [76] phi from test_8u::@4 to print_str [phi:test_8u::@4->print_str]
print_str_from_b4:
//SEG549 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str [phi:test_8u::@4->print_str#0] -- pbuz1=pbuc1
//SEG549 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_8u::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -6199,7 +6203,7 @@ test_8u: {
//SEG558 [269] call print_str
//SEG559 [76] phi from test_8u::@6 to print_str [phi:test_8u::@6->print_str]
print_str_from_b6:
//SEG560 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str1 [phi:test_8u::@6->print_str#0] -- pbuz1=pbuc1
//SEG560 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_8u::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -6225,7 +6229,7 @@ test_8u: {
//SEG569 [273] call print_str
//SEG570 [76] phi from test_8u::@8 to print_str [phi:test_8u::@8->print_str]
print_str_from_b8:
//SEG571 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str2 [phi:test_8u::@8->print_str#0] -- pbuz1=pbuc1
//SEG571 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_8u::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -6280,9 +6284,6 @@ test_8u: {
//SEG592 [254] phi (byte*) print_char_cursor#138 = (byte*~) print_char_cursor#188 [phi:test_8u::@12->test_8u::@1#1] -- register_copy
//SEG593 [254] phi (byte) test_8u::i#10 = (byte) test_8u::i#1 [phi:test_8u::@12->test_8u::@1#2] -- register_copy
jmp b1
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff
divisors: .byte 5, 7, $b, $d, $11, $13
}
@ -6327,6 +6328,9 @@ print_cls: {
rts
}
print_hextab: .text "0123456789abcdef"
str: .text " / @"
str2: .text " @"
str1: .text " = @"
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [17] (signed word) test_16s::dividend#0 ← *((const signed word[]) test_16s::dividends#0 + (byte) test_16s::i#10) [ test_16s::i#10 test_16s::dividend#0 print_line_cursor#1 ] ( main:2::test_16s:13 [ test_16s::i#10 test_16s::dividend#0 print_line_cursor#1 ] ) always clobbers reg byte a
@ -6893,7 +6897,7 @@ test_16s: {
//SEG53 [28] call print_str
//SEG54 [76] phi from test_16s::@4 to print_str [phi:test_16s::@4->print_str]
print_str_from_b4:
//SEG55 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str [phi:test_16s::@4->print_str#0] -- pbuz1=pbuc1
//SEG55 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_16s::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -6921,7 +6925,7 @@ test_16s: {
//SEG64 [32] call print_str
//SEG65 [76] phi from test_16s::@6 to print_str [phi:test_16s::@6->print_str]
print_str_from_b6:
//SEG66 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str1 [phi:test_16s::@6->print_str#0] -- pbuz1=pbuc1
//SEG66 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_16s::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -6949,7 +6953,7 @@ test_16s: {
//SEG75 [36] call print_str
//SEG76 [76] phi from test_16s::@8 to print_str [phi:test_16s::@8->print_str]
print_str_from_b8:
//SEG77 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str2 [phi:test_16s::@8->print_str#0] -- pbuz1=pbuc1
//SEG77 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_16s::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -6996,9 +7000,6 @@ test_16s: {
breturn:
//SEG93 [43] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff
divisors: .word 5, -7, $b, -$d, -$11, $13
}
@ -7578,7 +7579,7 @@ test_8s: {
//SEG288 [144] call print_str
//SEG289 [76] phi from test_8s::@4 to print_str [phi:test_8s::@4->print_str]
print_str_from_b4:
//SEG290 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str [phi:test_8s::@4->print_str#0] -- pbuz1=pbuc1
//SEG290 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_8s::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -7604,7 +7605,7 @@ test_8s: {
//SEG299 [148] call print_str
//SEG300 [76] phi from test_8s::@6 to print_str [phi:test_8s::@6->print_str]
print_str_from_b6:
//SEG301 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str1 [phi:test_8s::@6->print_str#0] -- pbuz1=pbuc1
//SEG301 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_8s::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -7630,7 +7631,7 @@ test_8s: {
//SEG310 [152] call print_str
//SEG311 [76] phi from test_8s::@8 to print_str [phi:test_8s::@8->print_str]
print_str_from_b8:
//SEG312 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str2 [phi:test_8s::@8->print_str#0] -- pbuz1=pbuc1
//SEG312 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_8s::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -7671,9 +7672,6 @@ test_8s: {
breturn:
//SEG328 [159] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $7f, -$7f, -$7f, $7f, $7f, $7f
divisors: .byte 5, 7, -$b, -$d, $11, $13
}
@ -8043,7 +8041,7 @@ test_16u: {
//SEG469 [231] call print_str
//SEG470 [76] phi from test_16u::@4 to print_str [phi:test_16u::@4->print_str]
print_str_from_b4:
//SEG471 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str [phi:test_16u::@4->print_str#0] -- pbuz1=pbuc1
//SEG471 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_16u::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -8071,7 +8069,7 @@ test_16u: {
//SEG480 [235] call print_str
//SEG481 [76] phi from test_16u::@6 to print_str [phi:test_16u::@6->print_str]
print_str_from_b6:
//SEG482 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str1 [phi:test_16u::@6->print_str#0] -- pbuz1=pbuc1
//SEG482 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_16u::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -8099,7 +8097,7 @@ test_16u: {
//SEG491 [239] call print_str
//SEG492 [76] phi from test_16u::@8 to print_str [phi:test_16u::@8->print_str]
print_str_from_b8:
//SEG493 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str2 [phi:test_16u::@8->print_str#0] -- pbuz1=pbuc1
//SEG493 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_16u::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -8146,9 +8144,6 @@ test_16u: {
breturn:
//SEG509 [246] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $ffff, $ffff, $ffff, $ffff, $ffff, $ffff
divisors: .word 5, 7, $b, $d, $11, $13
}
@ -8253,7 +8248,7 @@ test_8u: {
//SEG547 [265] call print_str
//SEG548 [76] phi from test_8u::@4 to print_str [phi:test_8u::@4->print_str]
print_str_from_b4:
//SEG549 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str [phi:test_8u::@4->print_str#0] -- pbuz1=pbuc1
//SEG549 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_8u::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -8279,7 +8274,7 @@ test_8u: {
//SEG558 [269] call print_str
//SEG559 [76] phi from test_8u::@6 to print_str [phi:test_8u::@6->print_str]
print_str_from_b6:
//SEG560 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str1 [phi:test_8u::@6->print_str#0] -- pbuz1=pbuc1
//SEG560 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_8u::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -8305,7 +8300,7 @@ test_8u: {
//SEG569 [273] call print_str
//SEG570 [76] phi from test_8u::@8 to print_str [phi:test_8u::@8->print_str]
print_str_from_b8:
//SEG571 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str2 [phi:test_8u::@8->print_str#0] -- pbuz1=pbuc1
//SEG571 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_8u::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -8359,9 +8354,6 @@ test_8u: {
//SEG592 [254] phi (byte*) print_char_cursor#138 = (byte*~) print_char_cursor#188 [phi:test_8u::@12->test_8u::@1#1] -- register_copy
//SEG593 [254] phi (byte) test_8u::i#10 = (byte) test_8u::i#1 [phi:test_8u::@12->test_8u::@1#2] -- register_copy
jmp b1
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff
divisors: .byte 5, 7, $b, $d, $11, $13
}
@ -8406,6 +8398,9 @@ print_cls: {
rts
}
print_hextab: .text "0123456789abcdef"
str: .text " / @"
str2: .text " @"
str1: .text " = @"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b32
@ -9074,6 +9069,9 @@ FINAL SYMBOL TABLE
(signed byte~) rem8s#33 reg byte x 4.0
(byte) rem8u
(byte) rem8u#17 reg byte x 0.5
(const string) str str = (string) " / @"
(const string) str1 str1 = (string) " = @"
(const string) str2 str2 = (string) " @"
(void()) test_16s()
(label) test_16s::@1
(label) test_16s::@10
@ -9099,9 +9097,6 @@ FINAL SYMBOL TABLE
(byte) test_16s::i#10 i zp ZP_BYTE:2 1.76
(signed word) test_16s::res
(signed word) test_16s::res#0 res zp ZP_WORD:14 2.2
(const string) test_16s::str str = (string) " / @"
(const string) test_16s::str1 str1 = (string) " = @"
(const string) test_16s::str2 str2 = (string) " @"
(void()) test_16u()
(label) test_16u::@1
(label) test_16u::@10
@ -9127,9 +9122,6 @@ FINAL SYMBOL TABLE
(byte) test_16u::i#10 i zp ZP_BYTE:2 1.76
(word) test_16u::res
(word) test_16u::res#0 res zp ZP_WORD:14 2.2
(const string) test_16u::str str = (string) " / @"
(const string) test_16u::str1 str1 = (string) " = @"
(const string) test_16u::str2 str2 = (string) " @"
(void()) test_8s()
(label) test_8s::@1
(label) test_8s::@10
@ -9155,9 +9147,6 @@ FINAL SYMBOL TABLE
(byte) test_8s::i#10 i zp ZP_BYTE:2 1.76
(signed byte) test_8s::res
(signed byte) test_8s::res#0 res zp ZP_BYTE:16 2.2
(const string) test_8s::str str = (string) " / @"
(const string) test_8s::str1 str1 = (string) " = @"
(const string) test_8s::str2 str2 = (string) " @"
(void()) test_8u()
(label) test_8u::@1
(label) test_8u::@10
@ -9185,9 +9174,6 @@ FINAL SYMBOL TABLE
(byte) test_8u::rem
(byte) test_8u::res
(byte) test_8u::res#0 res zp ZP_BYTE:17 2.4444444444444446
(const string) test_8u::str str = (string) " / @"
(const string) test_8u::str1 str1 = (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_WORD:3 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 print_line_cursor#41 print_cls::sc#2 print_cls::sc#1 ]
@ -9329,7 +9315,7 @@ test_16s: {
//SEG52 test_16s::@4
//SEG53 [28] call print_str
//SEG54 [76] phi from test_16s::@4 to print_str [phi:test_16s::@4->print_str]
//SEG55 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str [phi:test_16s::@4->print_str#0] -- pbuz1=pbuc1
//SEG55 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_16s::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -9350,7 +9336,7 @@ test_16s: {
//SEG63 test_16s::@6
//SEG64 [32] call print_str
//SEG65 [76] phi from test_16s::@6 to print_str [phi:test_16s::@6->print_str]
//SEG66 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str1 [phi:test_16s::@6->print_str#0] -- pbuz1=pbuc1
//SEG66 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_16s::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -9371,7 +9357,7 @@ test_16s: {
//SEG74 test_16s::@8
//SEG75 [36] call print_str
//SEG76 [76] phi from test_16s::@8 to print_str [phi:test_16s::@8->print_str]
//SEG77 [76] phi (byte*) print_str::str#15 = (const string) test_16s::str2 [phi:test_16s::@8->print_str#0] -- pbuz1=pbuc1
//SEG77 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_16s::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -9406,9 +9392,6 @@ test_16s: {
//SEG92 test_16s::@return
//SEG93 [43] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff
divisors: .word 5, -7, $b, -$d, -$11, $13
}
@ -9896,7 +9879,7 @@ test_8s: {
//SEG287 test_8s::@4
//SEG288 [144] call print_str
//SEG289 [76] phi from test_8s::@4 to print_str [phi:test_8s::@4->print_str]
//SEG290 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str [phi:test_8s::@4->print_str#0] -- pbuz1=pbuc1
//SEG290 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_8s::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -9915,7 +9898,7 @@ test_8s: {
//SEG298 test_8s::@6
//SEG299 [148] call print_str
//SEG300 [76] phi from test_8s::@6 to print_str [phi:test_8s::@6->print_str]
//SEG301 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str1 [phi:test_8s::@6->print_str#0] -- pbuz1=pbuc1
//SEG301 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_8s::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -9934,7 +9917,7 @@ test_8s: {
//SEG309 test_8s::@8
//SEG310 [152] call print_str
//SEG311 [76] phi from test_8s::@8 to print_str [phi:test_8s::@8->print_str]
//SEG312 [76] phi (byte*) print_str::str#15 = (const string) test_8s::str2 [phi:test_8s::@8->print_str#0] -- pbuz1=pbuc1
//SEG312 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_8s::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -9964,9 +9947,6 @@ test_8s: {
//SEG327 test_8s::@return
//SEG328 [159] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $7f, -$7f, -$7f, $7f, $7f, $7f
divisors: .byte 5, 7, -$b, -$d, $11, $13
}
@ -10268,7 +10248,7 @@ test_16u: {
//SEG468 test_16u::@4
//SEG469 [231] call print_str
//SEG470 [76] phi from test_16u::@4 to print_str [phi:test_16u::@4->print_str]
//SEG471 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str [phi:test_16u::@4->print_str#0] -- pbuz1=pbuc1
//SEG471 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_16u::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -10289,7 +10269,7 @@ test_16u: {
//SEG479 test_16u::@6
//SEG480 [235] call print_str
//SEG481 [76] phi from test_16u::@6 to print_str [phi:test_16u::@6->print_str]
//SEG482 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str1 [phi:test_16u::@6->print_str#0] -- pbuz1=pbuc1
//SEG482 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_16u::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -10310,7 +10290,7 @@ test_16u: {
//SEG490 test_16u::@8
//SEG491 [239] call print_str
//SEG492 [76] phi from test_16u::@8 to print_str [phi:test_16u::@8->print_str]
//SEG493 [76] phi (byte*) print_str::str#15 = (const string) test_16u::str2 [phi:test_16u::@8->print_str#0] -- pbuz1=pbuc1
//SEG493 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_16u::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -10345,9 +10325,6 @@ test_16u: {
//SEG508 test_16u::@return
//SEG509 [246] return
rts
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .word $ffff, $ffff, $ffff, $ffff, $ffff, $ffff
divisors: .word 5, 7, $b, $d, $11, $13
}
@ -10435,7 +10412,7 @@ test_8u: {
//SEG546 test_8u::@4
//SEG547 [265] call print_str
//SEG548 [76] phi from test_8u::@4 to print_str [phi:test_8u::@4->print_str]
//SEG549 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str [phi:test_8u::@4->print_str#0] -- pbuz1=pbuc1
//SEG549 [76] phi (byte*) print_str::str#15 = (const string) str [phi:test_8u::@4->print_str#0] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -10454,7 +10431,7 @@ test_8u: {
//SEG557 test_8u::@6
//SEG558 [269] call print_str
//SEG559 [76] phi from test_8u::@6 to print_str [phi:test_8u::@6->print_str]
//SEG560 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str1 [phi:test_8u::@6->print_str#0] -- pbuz1=pbuc1
//SEG560 [76] phi (byte*) print_str::str#15 = (const string) str1 [phi:test_8u::@6->print_str#0] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -10473,7 +10450,7 @@ test_8u: {
//SEG568 test_8u::@8
//SEG569 [273] call print_str
//SEG570 [76] phi from test_8u::@8 to print_str [phi:test_8u::@8->print_str]
//SEG571 [76] phi (byte*) print_str::str#15 = (const string) test_8u::str2 [phi:test_8u::@8->print_str#0] -- pbuz1=pbuc1
//SEG571 [76] phi (byte*) print_str::str#15 = (const string) str2 [phi:test_8u::@8->print_str#0] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -10515,9 +10492,6 @@ test_8u: {
//SEG592 [254] phi (byte*) print_char_cursor#138 = (byte*~) print_char_cursor#188 [phi:test_8u::@12->test_8u::@1#1] -- register_copy
//SEG593 [254] phi (byte) test_8u::i#10 = (byte) test_8u::i#1 [phi:test_8u::@12->test_8u::@1#2] -- register_copy
jmp b1
str: .text " / @"
str1: .text " = @"
str2: .text " @"
dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff
divisors: .byte 5, 7, $b, $d, $11, $13
}
@ -10556,4 +10530,7 @@ print_cls: {
rts
}
print_hextab: .text "0123456789abcdef"
str: .text " / @"
str2: .text " @"
str1: .text " = @"

View File

@ -299,6 +299,9 @@
(signed byte~) rem8s#33 reg byte x 4.0
(byte) rem8u
(byte) rem8u#17 reg byte x 0.5
(const string) str str = (string) " / @"
(const string) str1 str1 = (string) " = @"
(const string) str2 str2 = (string) " @"
(void()) test_16s()
(label) test_16s::@1
(label) test_16s::@10
@ -324,9 +327,6 @@
(byte) test_16s::i#10 i zp ZP_BYTE:2 1.76
(signed word) test_16s::res
(signed word) test_16s::res#0 res zp ZP_WORD:14 2.2
(const string) test_16s::str str = (string) " / @"
(const string) test_16s::str1 str1 = (string) " = @"
(const string) test_16s::str2 str2 = (string) " @"
(void()) test_16u()
(label) test_16u::@1
(label) test_16u::@10
@ -352,9 +352,6 @@
(byte) test_16u::i#10 i zp ZP_BYTE:2 1.76
(word) test_16u::res
(word) test_16u::res#0 res zp ZP_WORD:14 2.2
(const string) test_16u::str str = (string) " / @"
(const string) test_16u::str1 str1 = (string) " = @"
(const string) test_16u::str2 str2 = (string) " @"
(void()) test_8s()
(label) test_8s::@1
(label) test_8s::@10
@ -380,9 +377,6 @@
(byte) test_8s::i#10 i zp ZP_BYTE:2 1.76
(signed byte) test_8s::res
(signed byte) test_8s::res#0 res zp ZP_BYTE:16 2.2
(const string) test_8s::str str = (string) " / @"
(const string) test_8s::str1 str1 = (string) " = @"
(const string) test_8s::str2 str2 = (string) " @"
(void()) test_8u()
(label) test_8u::@1
(label) test_8u::@10
@ -410,9 +404,6 @@
(byte) test_8u::rem
(byte) test_8u::res
(byte) test_8u::res#0 res zp ZP_BYTE:17 2.4444444444444446
(const string) test_8u::str str = (string) " / @"
(const string) test_8u::str1 str1 = (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_WORD:3 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 print_line_cursor#41 print_cls::sc#2 print_cls::sc#1 ]

View File

@ -123,7 +123,6 @@ mul16s_compare: {
jsr print_str
jsr print_ln
jmp breturn
str: .text ".@"
str1: .text "signed word multiply results match!@"
}
// Print a newline
@ -230,10 +229,6 @@ mul16s_error: {
jsr print_ln
rts
str: .text "signed word multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
// Print a signed dword as HEX
// print_sdword(signed dword zeropage($b) dw)
@ -880,7 +875,6 @@ mul16u_compare: {
jsr print_str
jsr print_ln
jmp breturn
str: .text ".@"
str1: .text "word multiply results match!@"
}
// mul16u_error(word zeropage(3) a, word zeropage($17) b, dword zeropage($b) ms, dword zeropage($19) mn, dword zeropage($11) mf)
@ -947,10 +941,6 @@ mul16u_error: {
jsr print_ln
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
// Slow multiplication of unsigned words
// Calculate an unsigned multiplication by repeated addition
@ -1152,3 +1142,8 @@ print_cls: {
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
.align $100
mulf_sqr2_hi: .fill $200, 0
str: .text ".@"
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"

View File

@ -125,7 +125,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
to:@return
print_str: scope:[print_str] from mul16s_compare::@1 mul16s_compare::@17 mul16s_error mul16s_error::@2 mul16s_error::@4 mul16s_error::@6 mul16s_error::@8 mul16u_compare::@1 mul16u_compare::@17 mul16u_error mul16u_error::@2 mul16u_error::@4 mul16u_error::@6 mul16u_error::@8
[64] (byte*) print_char_cursor#148 ← phi( mul16s_compare::@1/(byte*) print_char_cursor#143 mul16s_compare::@17/(byte*~) print_char_cursor#185 mul16s_error/(byte*) print_char_cursor#128 mul16s_error::@2/(byte*) print_char_cursor#20 mul16s_error::@4/(byte*) print_char_cursor#20 mul16s_error::@6/(byte*) print_char_cursor#20 mul16s_error::@8/(byte*) print_char_cursor#20 mul16u_compare::@1/(byte*) print_char_cursor#139 mul16u_compare::@17/(byte*~) print_char_cursor#192 mul16u_error/(byte*) print_char_cursor#128 mul16u_error::@2/(byte*) print_char_cursor#20 mul16u_error::@4/(byte*) print_char_cursor#20 mul16u_error::@6/(byte*) print_char_cursor#20 mul16u_error::@8/(byte*) print_char_cursor#20 )
[64] (byte*) print_str::str#17 ← phi( mul16s_compare::@1/(const string) mul16s_compare::str mul16s_compare::@17/(const string) mul16s_compare::str1 mul16s_error/(const string) mul16s_error::str mul16s_error::@2/(const string) mul16s_error::str1 mul16s_error::@4/(const string) mul16s_error::str2 mul16s_error::@6/(const string) mul16s_error::str3 mul16s_error::@8/(const string) mul16s_error::str4 mul16u_compare::@1/(const string) mul16u_compare::str mul16u_compare::@17/(const string) mul16u_compare::str1 mul16u_error/(const string) mul16u_error::str mul16u_error::@2/(const string) mul16u_error::str1 mul16u_error::@4/(const string) mul16u_error::str2 mul16u_error::@6/(const string) mul16u_error::str3 mul16u_error::@8/(const string) mul16u_error::str4 )
[64] (byte*) print_str::str#17 ← phi( mul16s_compare::@1/(const string) str mul16s_compare::@17/(const string) mul16s_compare::str1 mul16s_error/(const string) mul16s_error::str mul16s_error::@2/(const string) str1 mul16s_error::@4/(const string) str2 mul16s_error::@6/(const string) str3 mul16s_error::@8/(const string) str4 mul16u_compare::@1/(const string) str mul16u_compare::@17/(const string) mul16u_compare::str1 mul16u_error/(const string) mul16u_error::str mul16u_error::@2/(const string) str1 mul16u_error::@4/(const string) str2 mul16u_error::@6/(const string) str3 mul16u_error::@8/(const string) str4 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[65] (byte*) print_char_cursor#128 ← phi( print_str/(byte*) print_char_cursor#148 print_str::@2/(byte*) print_char_cursor#1 )

View File

@ -3092,6 +3092,7 @@ Constant (const byte*) mulf_init::$18 = mulf_sqr1_lo#0+256
Constant (const byte*) mulf_init::$19 = mulf_sqr2_hi#0+511
Constant (const byte*) mulf_init::$20 = mulf_sqr1_hi#0+256
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization Pass2ConstantStringConsolidation
Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#4
Eliminating Noop Cast (word) mul16u::a#1 ← ((word)) (signed word) mul16s::a#0
Eliminating Noop Cast (word) mul16u::b#0 ← ((word)) (signed word) mul16s::b#0
@ -3196,7 +3197,11 @@ Inlining constant with var siblings (const byte) mul16s_compare::ok#1
Inlining constant with var siblings (const byte) mul16s_compare::ok#2
Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined mulf_init::sqr2_lo#0 = (const byte[512]) mulf_sqr2_lo#0
Constant inlined mul16u_error::str1 = (const string) str1
Constant inlined mul16u_error::str3 = (const string) str3
Constant inlined mulf_init::sqr2_hi#0 = (const byte[512]) mulf_sqr2_hi#0
Constant inlined mul16u_error::str2 = (const string) str2
Constant inlined mul16u_error::str4 = (const string) str4
Constant inlined $0 = (const byte[]) print_hextab#0
Constant inlined muls16s::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16u_compare::ok#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
@ -3206,9 +3211,13 @@ Constant inlined muls16u::i#0 = (byte/signed byte/word/signed word/dword/signed
Constant inlined mul16u_compare::ok#2 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulf_init::$20 = (const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256
Constant inlined mul16u_compare::ok#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16s_error::str1 = (const string) str1
Constant inlined muls16u::m#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16s_compare::a#0 = -(word/signed word/dword/signed dword) 32767
Constant inlined mulf_init::x_255#0 = ((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mul16s_error::str4 = (const string) str4
Constant inlined mul16s_error::str3 = (const string) str3
Constant inlined mul16s_error::str2 = (const string) str2
Constant inlined mulf_init::x_2#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16u_compare::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16s_compare::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
@ -3218,29 +3227,30 @@ Constant inlined print_str::str#9 = (const string) mul16s_compare::str1
Constant inlined mulf_init::sqr1_hi#0 = (const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulf_init::$10 = -(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulf_init::sqr1_lo#0 = (const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined print_str::str#4 = (const string) mul16u_error::str1
Constant inlined print_str::str#4 = (const string) str1
Constant inlined mulf_init::$15 = (const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511
Constant inlined print_str::str#3 = (const string) mul16u_error::str
Constant inlined print_str::str#2 = (const string) mul16u_compare::str1
Constant inlined print_str::str#1 = (const string) mul16u_compare::str
Constant inlined print_str::str#1 = (const string) str
Constant inlined mulf_init::$18 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256
Constant inlined print_str::str#8 = (const string) mul16s_compare::str
Constant inlined print_str::str#8 = (const string) str
Constant inlined mulf_init::$19 = (const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511
Constant inlined print_str::str#7 = (const string) mul16u_error::str4
Constant inlined print_str::str#6 = (const string) mul16u_error::str3
Constant inlined print_str::str#7 = (const string) str4
Constant inlined print_str::str#6 = (const string) str3
Constant inlined mulf_init::$17 = (const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511
Constant inlined print_str::str#5 = (const string) mul16u_error::str2
Constant inlined print_str::str#5 = (const string) str2
Constant inlined mulf_init::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined muls16s::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined print_str::str#13 = (const string) mul16s_error::str3
Constant inlined print_str::str#12 = (const string) mul16s_error::str2
Constant inlined print_str::str#11 = (const string) mul16s_error::str1
Constant inlined mul16s_compare::str = (const string) str
Constant inlined print_str::str#13 = (const string) str3
Constant inlined print_str::str#12 = (const string) str2
Constant inlined print_str::str#11 = (const string) str1
Constant inlined print_str::str#10 = (const string) mul16s_error::str
Constant inlined muls16s::m#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16s_compare::ok#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mul16s_compare::ok#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#14 = (const string) mul16s_error::str4
Constant inlined print_str::str#14 = (const string) str4
Constant inlined mul16s_compare::ok#2 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16u::res#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16s_compare::b#0 = -(word/signed word/dword/signed dword) 32767
@ -3252,6 +3262,7 @@ Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword
Constant inlined mulf_init::$8 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512
Constant inlined print_char::ch#1 = (byte) '-'
Constant inlined print_char::ch#0 = (byte) '-'
Constant inlined mul16u_compare::str = (const string) str
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting mul16s_compare::@20(between mul16s_compare::@10 and mul16s_compare::@1)
Added new block during phi lifting mul16s_compare::@21(between mul16s_compare::@5 and mul16s_compare::@2)
@ -3629,7 +3640,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
to:@return
print_str: scope:[print_str] from mul16s_compare::@1 mul16s_compare::@17 mul16s_error mul16s_error::@2 mul16s_error::@4 mul16s_error::@6 mul16s_error::@8 mul16u_compare::@1 mul16u_compare::@17 mul16u_error mul16u_error::@2 mul16u_error::@4 mul16u_error::@6 mul16u_error::@8
[64] (byte*) print_char_cursor#148 ← phi( mul16s_compare::@1/(byte*) print_char_cursor#143 mul16s_compare::@17/(byte*~) print_char_cursor#185 mul16s_error/(byte*) print_char_cursor#128 mul16s_error::@2/(byte*) print_char_cursor#20 mul16s_error::@4/(byte*) print_char_cursor#20 mul16s_error::@6/(byte*) print_char_cursor#20 mul16s_error::@8/(byte*) print_char_cursor#20 mul16u_compare::@1/(byte*) print_char_cursor#139 mul16u_compare::@17/(byte*~) print_char_cursor#192 mul16u_error/(byte*) print_char_cursor#128 mul16u_error::@2/(byte*) print_char_cursor#20 mul16u_error::@4/(byte*) print_char_cursor#20 mul16u_error::@6/(byte*) print_char_cursor#20 mul16u_error::@8/(byte*) print_char_cursor#20 )
[64] (byte*) print_str::str#17 ← phi( mul16s_compare::@1/(const string) mul16s_compare::str mul16s_compare::@17/(const string) mul16s_compare::str1 mul16s_error/(const string) mul16s_error::str mul16s_error::@2/(const string) mul16s_error::str1 mul16s_error::@4/(const string) mul16s_error::str2 mul16s_error::@6/(const string) mul16s_error::str3 mul16s_error::@8/(const string) mul16s_error::str4 mul16u_compare::@1/(const string) mul16u_compare::str mul16u_compare::@17/(const string) mul16u_compare::str1 mul16u_error/(const string) mul16u_error::str mul16u_error::@2/(const string) mul16u_error::str1 mul16u_error::@4/(const string) mul16u_error::str2 mul16u_error::@6/(const string) mul16u_error::str3 mul16u_error::@8/(const string) mul16u_error::str4 )
[64] (byte*) print_str::str#17 ← phi( mul16s_compare::@1/(const string) str mul16s_compare::@17/(const string) mul16s_compare::str1 mul16s_error/(const string) mul16s_error::str mul16s_error::@2/(const string) str1 mul16s_error::@4/(const string) str2 mul16s_error::@6/(const string) str3 mul16s_error::@8/(const string) str4 mul16u_compare::@1/(const string) str mul16u_compare::@17/(const string) mul16u_compare::str1 mul16u_error/(const string) mul16u_error::str mul16u_error::@2/(const string) str1 mul16u_error::@4/(const string) str2 mul16u_error::@6/(const string) str3 mul16u_error::@8/(const string) str4 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[65] (byte*) print_char_cursor#128 ← phi( print_str/(byte*) print_char_cursor#148 print_str::@2/(byte*) print_char_cursor#1 )
@ -4825,7 +4836,7 @@ mul16s_compare: {
//SEG40 [64] phi from mul16s_compare::@1 to print_str [phi:mul16s_compare::@1->print_str]
print_str_from_b1:
//SEG41 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#143 [phi:mul16s_compare::@1->print_str#0] -- register_copy
//SEG42 [64] phi (byte*) print_str::str#17 = (const string) mul16s_compare::str [phi:mul16s_compare::@1->print_str#1] -- pbuz1=pbuc1
//SEG42 [64] phi (byte*) print_str::str#17 = (const string) str [phi:mul16s_compare::@1->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -5140,7 +5151,6 @@ mul16s_compare: {
b4_from_b22:
//SEG123 [38] phi (byte) mul16s_compare::ok#3 = (byte) mul16s_compare::ok#4 [phi:mul16s_compare::@22->mul16s_compare::@4#0] -- register_copy
jmp b4
str: .text ".@"
str1: .text "signed word multiply results match!@"
}
//SEG124 print_ln
@ -5258,7 +5268,7 @@ mul16s_error: {
//SEG157 [64] phi from mul16s_error::@2 to print_str [phi:mul16s_error::@2->print_str]
print_str_from_b2:
//SEG158 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@2->print_str#0] -- register_copy
//SEG159 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str1 [phi:mul16s_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG159 [64] phi (byte*) print_str::str#17 = (const string) str1 [phi:mul16s_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -5286,7 +5296,7 @@ mul16s_error: {
//SEG168 [64] phi from mul16s_error::@4 to print_str [phi:mul16s_error::@4->print_str]
print_str_from_b4:
//SEG169 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@4->print_str#0] -- register_copy
//SEG170 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str2 [phi:mul16s_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG170 [64] phi (byte*) print_str::str#17 = (const string) str2 [phi:mul16s_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -5318,7 +5328,7 @@ mul16s_error: {
//SEG179 [64] phi from mul16s_error::@6 to print_str [phi:mul16s_error::@6->print_str]
print_str_from_b6:
//SEG180 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@6->print_str#0] -- register_copy
//SEG181 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str3 [phi:mul16s_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG181 [64] phi (byte*) print_str::str#17 = (const string) str3 [phi:mul16s_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -5350,7 +5360,7 @@ mul16s_error: {
//SEG190 [64] phi from mul16s_error::@8 to print_str [phi:mul16s_error::@8->print_str]
print_str_from_b8:
//SEG191 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@8->print_str#0] -- register_copy
//SEG192 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str4 [phi:mul16s_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG192 [64] phi (byte*) print_str::str#17 = (const string) str4 [phi:mul16s_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -5390,10 +5400,6 @@ mul16s_error: {
//SEG205 [93] return
rts
str: .text "signed word multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG206 print_sdword
// Print a signed dword as HEX
@ -6373,7 +6379,7 @@ mul16u_compare: {
//SEG434 [64] phi from mul16u_compare::@1 to print_str [phi:mul16u_compare::@1->print_str]
print_str_from_b1:
//SEG435 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#139 [phi:mul16u_compare::@1->print_str#0] -- register_copy
//SEG436 [64] phi (byte*) print_str::str#17 = (const string) mul16u_compare::str [phi:mul16u_compare::@1->print_str#1] -- pbuz1=pbuc1
//SEG436 [64] phi (byte*) print_str::str#17 = (const string) str [phi:mul16u_compare::@1->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -6700,7 +6706,6 @@ mul16u_compare: {
b4_from_b22:
//SEG523 [228] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@22->mul16u_compare::@4#0] -- register_copy
jmp b4
str: .text ".@"
str1: .text "word multiply results match!@"
}
//SEG524 mul16u_error
@ -6744,7 +6749,7 @@ mul16u_error: {
//SEG538 [64] phi from mul16u_error::@2 to print_str [phi:mul16u_error::@2->print_str]
print_str_from_b2:
//SEG539 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@2->print_str#0] -- register_copy
//SEG540 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str1 [phi:mul16u_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG540 [64] phi (byte*) print_str::str#17 = (const string) str1 [phi:mul16u_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -6773,7 +6778,7 @@ mul16u_error: {
//SEG550 [64] phi from mul16u_error::@4 to print_str [phi:mul16u_error::@4->print_str]
print_str_from_b4:
//SEG551 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@4->print_str#0] -- register_copy
//SEG552 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str2 [phi:mul16u_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG552 [64] phi (byte*) print_str::str#17 = (const string) str2 [phi:mul16u_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -6806,7 +6811,7 @@ mul16u_error: {
//SEG562 [64] phi from mul16u_error::@6 to print_str [phi:mul16u_error::@6->print_str]
print_str_from_b6:
//SEG563 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@6->print_str#0] -- register_copy
//SEG564 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str3 [phi:mul16u_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG564 [64] phi (byte*) print_str::str#17 = (const string) str3 [phi:mul16u_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -6839,7 +6844,7 @@ mul16u_error: {
//SEG574 [64] phi from mul16u_error::@8 to print_str [phi:mul16u_error::@8->print_str]
print_str_from_b8:
//SEG575 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@8->print_str#0] -- register_copy
//SEG576 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str4 [phi:mul16u_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG576 [64] phi (byte*) print_str::str#17 = (const string) str4 [phi:mul16u_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -6884,10 +6889,6 @@ mul16u_error: {
//SEG590 [271] return
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG591 muls16u
// Slow multiplication of unsigned words
@ -7243,6 +7244,11 @@ print_cls: {
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
.align $100
mulf_sqr2_hi: .fill $200, 0
str: .text ".@"
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -7887,7 +7893,7 @@ mul16s_compare: {
//SEG40 [64] phi from mul16s_compare::@1 to print_str [phi:mul16s_compare::@1->print_str]
print_str_from_b1:
//SEG41 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#143 [phi:mul16s_compare::@1->print_str#0] -- register_copy
//SEG42 [64] phi (byte*) print_str::str#17 = (const string) mul16s_compare::str [phi:mul16s_compare::@1->print_str#1] -- pbuz1=pbuc1
//SEG42 [64] phi (byte*) print_str::str#17 = (const string) str [phi:mul16s_compare::@1->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -8092,7 +8098,6 @@ mul16s_compare: {
b4_from_b22:
//SEG123 [38] phi (byte) mul16s_compare::ok#3 = (byte) mul16s_compare::ok#4 [phi:mul16s_compare::@22->mul16s_compare::@4#0] -- register_copy
jmp b4
str: .text ".@"
str1: .text "signed word multiply results match!@"
}
//SEG124 print_ln
@ -8206,7 +8211,7 @@ mul16s_error: {
//SEG157 [64] phi from mul16s_error::@2 to print_str [phi:mul16s_error::@2->print_str]
print_str_from_b2:
//SEG158 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@2->print_str#0] -- register_copy
//SEG159 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str1 [phi:mul16s_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG159 [64] phi (byte*) print_str::str#17 = (const string) str1 [phi:mul16s_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -8234,7 +8239,7 @@ mul16s_error: {
//SEG168 [64] phi from mul16s_error::@4 to print_str [phi:mul16s_error::@4->print_str]
print_str_from_b4:
//SEG169 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@4->print_str#0] -- register_copy
//SEG170 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str2 [phi:mul16s_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG170 [64] phi (byte*) print_str::str#17 = (const string) str2 [phi:mul16s_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -8258,7 +8263,7 @@ mul16s_error: {
//SEG179 [64] phi from mul16s_error::@6 to print_str [phi:mul16s_error::@6->print_str]
print_str_from_b6:
//SEG180 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@6->print_str#0] -- register_copy
//SEG181 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str3 [phi:mul16s_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG181 [64] phi (byte*) print_str::str#17 = (const string) str3 [phi:mul16s_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -8290,7 +8295,7 @@ mul16s_error: {
//SEG190 [64] phi from mul16s_error::@8 to print_str [phi:mul16s_error::@8->print_str]
print_str_from_b8:
//SEG191 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@8->print_str#0] -- register_copy
//SEG192 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str4 [phi:mul16s_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG192 [64] phi (byte*) print_str::str#17 = (const string) str4 [phi:mul16s_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -8330,10 +8335,6 @@ mul16s_error: {
//SEG205 [93] return
rts
str: .text "signed word multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG206 print_sdword
// Print a signed dword as HEX
@ -9231,7 +9232,7 @@ mul16u_compare: {
//SEG434 [64] phi from mul16u_compare::@1 to print_str [phi:mul16u_compare::@1->print_str]
print_str_from_b1:
//SEG435 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#139 [phi:mul16u_compare::@1->print_str#0] -- register_copy
//SEG436 [64] phi (byte*) print_str::str#17 = (const string) mul16u_compare::str [phi:mul16u_compare::@1->print_str#1] -- pbuz1=pbuc1
//SEG436 [64] phi (byte*) print_str::str#17 = (const string) str [phi:mul16u_compare::@1->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -9456,7 +9457,6 @@ mul16u_compare: {
b4_from_b22:
//SEG523 [228] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@22->mul16u_compare::@4#0] -- register_copy
jmp b4
str: .text ".@"
str1: .text "word multiply results match!@"
}
//SEG524 mul16u_error
@ -9496,7 +9496,7 @@ mul16u_error: {
//SEG538 [64] phi from mul16u_error::@2 to print_str [phi:mul16u_error::@2->print_str]
print_str_from_b2:
//SEG539 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@2->print_str#0] -- register_copy
//SEG540 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str1 [phi:mul16u_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG540 [64] phi (byte*) print_str::str#17 = (const string) str1 [phi:mul16u_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -9525,7 +9525,7 @@ mul16u_error: {
//SEG550 [64] phi from mul16u_error::@4 to print_str [phi:mul16u_error::@4->print_str]
print_str_from_b4:
//SEG551 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@4->print_str#0] -- register_copy
//SEG552 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str2 [phi:mul16u_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG552 [64] phi (byte*) print_str::str#17 = (const string) str2 [phi:mul16u_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -9550,7 +9550,7 @@ mul16u_error: {
//SEG562 [64] phi from mul16u_error::@6 to print_str [phi:mul16u_error::@6->print_str]
print_str_from_b6:
//SEG563 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@6->print_str#0] -- register_copy
//SEG564 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str3 [phi:mul16u_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG564 [64] phi (byte*) print_str::str#17 = (const string) str3 [phi:mul16u_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -9583,7 +9583,7 @@ mul16u_error: {
//SEG574 [64] phi from mul16u_error::@8 to print_str [phi:mul16u_error::@8->print_str]
print_str_from_b8:
//SEG575 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@8->print_str#0] -- register_copy
//SEG576 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str4 [phi:mul16u_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG576 [64] phi (byte*) print_str::str#17 = (const string) str4 [phi:mul16u_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -9628,10 +9628,6 @@ mul16u_error: {
//SEG590 [271] return
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG591 muls16u
// Slow multiplication of unsigned words
@ -9970,6 +9966,11 @@ print_cls: {
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
.align $100
mulf_sqr2_hi: .fill $200, 0
str: .text ".@"
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b40
@ -10384,7 +10385,7 @@ Removing unreachable instruction jmp b4
Removing unreachable instruction jmp b4
Succesful ASM optimization Pass5UnreachableCodeElimination
Fixing long branch [110] bne b1 to beq
Fixing long branch [863] bne b1 to beq
Fixing long branch [858] bne b1 to beq
FINAL SYMBOL TABLE
(label) @40
@ -10463,7 +10464,6 @@ FINAL SYMBOL TABLE
(byte) mul16s_compare::ok
(byte) mul16s_compare::ok#3 reg byte x 202.0
(byte) mul16s_compare::ok#4 reg byte x 33.666666666666664
(const string) mul16s_compare::str str = (string) ".@"
(const string) mul16s_compare::str1 str1 = (string) "signed word multiply results match!@"
(void()) mul16s_error((signed word) mul16s_error::a , (signed word) mul16s_error::b , (signed dword) mul16s_error::ms , (signed dword) mul16s_error::mn , (signed dword) mul16s_error::mf)
(label) mul16s_error::@1
@ -10488,10 +10488,6 @@ FINAL SYMBOL TABLE
(signed dword) mul16s_error::ms
(signed dword) mul16s_error::ms#0 ms zp ZP_DWORD:11 0.3076923076923077
(const string) mul16s_error::str str = (string) "signed word multiply mismatch @"
(const string) mul16s_error::str1 str1 = (string) "*@"
(const string) mul16s_error::str2 str2 = (string) " slow:@"
(const string) mul16s_error::str3 str3 = (string) " / normal:@"
(const string) mul16s_error::str4 str4 = (string) " / fast:@"
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte/word~) mul16u::$1 reg byte a 2002.0
(label) mul16u::@1
@ -10560,7 +10556,6 @@ FINAL SYMBOL TABLE
(byte) mul16u_compare::ok
(byte) mul16u_compare::ok#3 reg byte x 202.0
(byte) mul16u_compare::ok#4 reg byte x 33.666666666666664
(const string) mul16u_compare::str str = (string) ".@"
(const string) mul16u_compare::str1 str1 = (string) "word multiply results match!@"
(void()) mul16u_error((word) mul16u_error::a , (word) mul16u_error::b , (dword) mul16u_error::ms , (dword) mul16u_error::mn , (dword) mul16u_error::mf)
(label) mul16u_error::@1
@ -10585,10 +10580,6 @@ FINAL SYMBOL TABLE
(dword) mul16u_error::ms
(dword) mul16u_error::ms#0 ms zp ZP_DWORD:11 0.3076923076923077
(const string) mul16u_error::str str = (string) "multiply mismatch @"
(const string) mul16u_error::str1 str1 = (string) "*@"
(const string) mul16u_error::str2 str2 = (string) " slow:@"
(const string) mul16u_error::str3 str3 = (string) " / normal:@"
(const string) mul16u_error::str4 str4 = (string) " / fast:@"
(signed dword()) mulf16s((signed word) mulf16s::a , (signed word) mulf16s::b)
(word~) mulf16s::$11 $11 zp ZP_WORD:3 20.0
(word~) mulf16s::$12 $12 zp ZP_WORD:9 4.0
@ -10824,6 +10815,11 @@ FINAL SYMBOL TABLE
(word) print_word::w#3 w zp ZP_WORD:3 4.0
(word) print_word::w#4 w zp ZP_WORD:3 4.0
(word) print_word::w#5 w zp ZP_WORD:3 4.666666666666666
(const string) str str = (string) ".@"
(const string) str1 str1 = (string) "*@"
(const string) str2 str2 = (string) " slow:@"
(const string) str3 str3 = (string) " / normal:@"
(const string) str4 str4 = (string) " / fast:@"
zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 mul16u_compare::i#12 mul16u_compare::i#1 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 mul16u_error::a#0 muls16u::i#2 muls16u::i#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 mulf16s::$5 mulf16s::$11 mul16s::$5 mul16s::$11 ]
@ -10936,7 +10932,7 @@ mul16s_compare: {
//SEG39 [15] call print_str
//SEG40 [64] phi from mul16s_compare::@1 to print_str [phi:mul16s_compare::@1->print_str]
//SEG41 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#143 [phi:mul16s_compare::@1->print_str#0] -- register_copy
//SEG42 [64] phi (byte*) print_str::str#17 = (const string) mul16s_compare::str [phi:mul16s_compare::@1->print_str#1] -- pbuz1=pbuc1
//SEG42 [64] phi (byte*) print_str::str#17 = (const string) str [phi:mul16s_compare::@1->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -11104,7 +11100,6 @@ mul16s_compare: {
//SEG121 mul16s_compare::@22
//SEG122 [38] phi from mul16s_compare::@22 to mul16s_compare::@4 [phi:mul16s_compare::@22->mul16s_compare::@4]
//SEG123 [38] phi (byte) mul16s_compare::ok#3 = (byte) mul16s_compare::ok#4 [phi:mul16s_compare::@22->mul16s_compare::@4#0] -- register_copy
str: .text ".@"
str1: .text "signed word multiply results match!@"
}
//SEG124 print_ln
@ -11199,7 +11194,7 @@ mul16s_error: {
//SEG156 [76] call print_str
//SEG157 [64] phi from mul16s_error::@2 to print_str [phi:mul16s_error::@2->print_str]
//SEG158 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@2->print_str#0] -- register_copy
//SEG159 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str1 [phi:mul16s_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG159 [64] phi (byte*) print_str::str#17 = (const string) str1 [phi:mul16s_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -11220,7 +11215,7 @@ mul16s_error: {
//SEG167 [80] call print_str
//SEG168 [64] phi from mul16s_error::@4 to print_str [phi:mul16s_error::@4->print_str]
//SEG169 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@4->print_str#0] -- register_copy
//SEG170 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str2 [phi:mul16s_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG170 [64] phi (byte*) print_str::str#17 = (const string) str2 [phi:mul16s_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -11237,7 +11232,7 @@ mul16s_error: {
//SEG178 [84] call print_str
//SEG179 [64] phi from mul16s_error::@6 to print_str [phi:mul16s_error::@6->print_str]
//SEG180 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@6->print_str#0] -- register_copy
//SEG181 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str3 [phi:mul16s_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG181 [64] phi (byte*) print_str::str#17 = (const string) str3 [phi:mul16s_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -11262,7 +11257,7 @@ mul16s_error: {
//SEG189 [88] call print_str
//SEG190 [64] phi from mul16s_error::@8 to print_str [phi:mul16s_error::@8->print_str]
//SEG191 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16s_error::@8->print_str#0] -- register_copy
//SEG192 [64] phi (byte*) print_str::str#17 = (const string) mul16s_error::str4 [phi:mul16s_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG192 [64] phi (byte*) print_str::str#17 = (const string) str4 [phi:mul16s_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -11293,10 +11288,6 @@ mul16s_error: {
//SEG205 [93] return
rts
str: .text "signed word multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG206 print_sdword
// Print a signed dword as HEX
@ -12075,7 +12066,7 @@ mul16u_compare: {
//SEG433 [205] call print_str
//SEG434 [64] phi from mul16u_compare::@1 to print_str [phi:mul16u_compare::@1->print_str]
//SEG435 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#139 [phi:mul16u_compare::@1->print_str#0] -- register_copy
//SEG436 [64] phi (byte*) print_str::str#17 = (const string) mul16u_compare::str [phi:mul16u_compare::@1->print_str#1] -- pbuz1=pbuc1
//SEG436 [64] phi (byte*) print_str::str#17 = (const string) str [phi:mul16u_compare::@1->print_str#1] -- pbuz1=pbuc1
lda #<str
sta print_str.str
lda #>str
@ -12261,7 +12252,6 @@ mul16u_compare: {
//SEG521 mul16u_compare::@22
//SEG522 [228] phi from mul16u_compare::@22 to mul16u_compare::@4 [phi:mul16u_compare::@22->mul16u_compare::@4]
//SEG523 [228] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@22->mul16u_compare::@4#0] -- register_copy
str: .text ".@"
str1: .text "word multiply results match!@"
}
//SEG524 mul16u_error
@ -12293,7 +12283,7 @@ mul16u_error: {
//SEG537 [254] call print_str
//SEG538 [64] phi from mul16u_error::@2 to print_str [phi:mul16u_error::@2->print_str]
//SEG539 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@2->print_str#0] -- register_copy
//SEG540 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str1 [phi:mul16u_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG540 [64] phi (byte*) print_str::str#17 = (const string) str1 [phi:mul16u_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -12315,7 +12305,7 @@ mul16u_error: {
//SEG549 [258] call print_str
//SEG550 [64] phi from mul16u_error::@4 to print_str [phi:mul16u_error::@4->print_str]
//SEG551 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@4->print_str#0] -- register_copy
//SEG552 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str2 [phi:mul16u_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG552 [64] phi (byte*) print_str::str#17 = (const string) str2 [phi:mul16u_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -12333,7 +12323,7 @@ mul16u_error: {
//SEG561 [262] call print_str
//SEG562 [64] phi from mul16u_error::@6 to print_str [phi:mul16u_error::@6->print_str]
//SEG563 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@6->print_str#0] -- register_copy
//SEG564 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str3 [phi:mul16u_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG564 [64] phi (byte*) print_str::str#17 = (const string) str3 [phi:mul16u_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -12359,7 +12349,7 @@ mul16u_error: {
//SEG573 [266] call print_str
//SEG574 [64] phi from mul16u_error::@8 to print_str [phi:mul16u_error::@8->print_str]
//SEG575 [64] phi (byte*) print_char_cursor#148 = (byte*) print_char_cursor#20 [phi:mul16u_error::@8->print_str#0] -- register_copy
//SEG576 [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str4 [phi:mul16u_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG576 [64] phi (byte*) print_str::str#17 = (const string) str4 [phi:mul16u_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -12395,10 +12385,6 @@ mul16u_error: {
//SEG590 [271] return
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG591 muls16u
// Slow multiplication of unsigned words
@ -12692,4 +12678,9 @@ print_cls: {
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
.align $100
mulf_sqr2_hi: .fill $200, 0
str: .text ".@"
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"

View File

@ -74,7 +74,6 @@
(byte) mul16s_compare::ok
(byte) mul16s_compare::ok#3 reg byte x 202.0
(byte) mul16s_compare::ok#4 reg byte x 33.666666666666664
(const string) mul16s_compare::str str = (string) ".@"
(const string) mul16s_compare::str1 str1 = (string) "signed word multiply results match!@"
(void()) mul16s_error((signed word) mul16s_error::a , (signed word) mul16s_error::b , (signed dword) mul16s_error::ms , (signed dword) mul16s_error::mn , (signed dword) mul16s_error::mf)
(label) mul16s_error::@1
@ -99,10 +98,6 @@
(signed dword) mul16s_error::ms
(signed dword) mul16s_error::ms#0 ms zp ZP_DWORD:11 0.3076923076923077
(const string) mul16s_error::str str = (string) "signed word multiply mismatch @"
(const string) mul16s_error::str1 str1 = (string) "*@"
(const string) mul16s_error::str2 str2 = (string) " slow:@"
(const string) mul16s_error::str3 str3 = (string) " / normal:@"
(const string) mul16s_error::str4 str4 = (string) " / fast:@"
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte/word~) mul16u::$1 reg byte a 2002.0
(label) mul16u::@1
@ -171,7 +166,6 @@
(byte) mul16u_compare::ok
(byte) mul16u_compare::ok#3 reg byte x 202.0
(byte) mul16u_compare::ok#4 reg byte x 33.666666666666664
(const string) mul16u_compare::str str = (string) ".@"
(const string) mul16u_compare::str1 str1 = (string) "word multiply results match!@"
(void()) mul16u_error((word) mul16u_error::a , (word) mul16u_error::b , (dword) mul16u_error::ms , (dword) mul16u_error::mn , (dword) mul16u_error::mf)
(label) mul16u_error::@1
@ -196,10 +190,6 @@
(dword) mul16u_error::ms
(dword) mul16u_error::ms#0 ms zp ZP_DWORD:11 0.3076923076923077
(const string) mul16u_error::str str = (string) "multiply mismatch @"
(const string) mul16u_error::str1 str1 = (string) "*@"
(const string) mul16u_error::str2 str2 = (string) " slow:@"
(const string) mul16u_error::str3 str3 = (string) " / normal:@"
(const string) mul16u_error::str4 str4 = (string) " / fast:@"
(signed dword()) mulf16s((signed word) mulf16s::a , (signed word) mulf16s::b)
(word~) mulf16s::$11 $11 zp ZP_WORD:3 20.0
(word~) mulf16s::$12 $12 zp ZP_WORD:9 4.0
@ -435,6 +425,11 @@
(word) print_word::w#3 w zp ZP_WORD:3 4.0
(word) print_word::w#4 w zp ZP_WORD:3 4.0
(word) print_word::w#5 w zp ZP_WORD:3 4.666666666666666
(const string) str str = (string) ".@"
(const string) str1 str1 = (string) "*@"
(const string) str2 str2 = (string) " slow:@"
(const string) str3 str3 = (string) " / normal:@"
(const string) str4 str4 = (string) " / fast:@"
zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 mul16u_compare::i#12 mul16u_compare::i#1 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 mul16u_error::a#0 muls16u::i#2 muls16u::i#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 mulf16s::$5 mulf16s::$11 mul16s::$5 mul16s::$11 ]

View File

@ -183,10 +183,6 @@ mul8s_error: {
jsr print_ln
rts
str: .text "signed multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
// Print a signed word as HEX
// print_sword(signed word zeropage(8) w)
@ -588,10 +584,6 @@ mul8u_error: {
jsr print_ln
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
// Fast multiply two unsigned bytes to a word result
// mulf8u(byte register(A) a, byte register(X) b)
@ -931,3 +923,7 @@ print_cls: {
// >((( x - 255) * ( x - 255 ))/4)
.align $100
mula_sqr2_hi: .fill $200, 0
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"

View File

@ -121,7 +121,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
to:@return
print_str: scope:[print_str] from mul8s_compare::@11 mul8s_error mul8s_error::@2 mul8s_error::@4 mul8s_error::@6 mul8s_error::@8 mul8u_compare::@11 mul8u_error mul8u_error::@2 mul8u_error::@4 mul8u_error::@6 mul8u_error::@8 mulf_tables_cmp::@3 mulf_tables_cmp::@5 mulf_tables_cmp::@7
[63] (byte*) print_char_cursor#152 ← phi( mul8s_compare::@11/(byte*~) print_char_cursor#192 mul8s_error/(byte*~) print_char_cursor#193 mul8s_error::@2/(byte*) print_char_cursor#18 mul8s_error::@4/(byte*) print_char_cursor#18 mul8s_error::@6/(byte*) print_char_cursor#18 mul8s_error::@8/(byte*) print_char_cursor#18 mul8u_compare::@11/(byte*) print_char_cursor#31 mul8u_error/(byte*) print_char_cursor#31 mul8u_error::@2/(byte*) print_char_cursor#18 mul8u_error::@4/(byte*) print_char_cursor#18 mul8u_error::@6/(byte*) print_char_cursor#18 mul8u_error::@8/(byte*) print_char_cursor#18 mulf_tables_cmp::@3/((byte*))(word/signed word/dword/signed dword) 1024 mulf_tables_cmp::@5/((byte*))(word/signed word/dword/signed dword) 1024 mulf_tables_cmp::@7/(byte*) print_char_cursor#18 )
[63] (byte*) print_str::str#18 ← phi( mul8s_compare::@11/(const string) mul8s_compare::str mul8s_error/(const string) mul8s_error::str mul8s_error::@2/(const string) mul8s_error::str1 mul8s_error::@4/(const string) mul8s_error::str2 mul8s_error::@6/(const string) mul8s_error::str3 mul8s_error::@8/(const string) mul8s_error::str4 mul8u_compare::@11/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) mul8u_error::str1 mul8u_error::@4/(const string) mul8u_error::str2 mul8u_error::@6/(const string) mul8u_error::str3 mul8u_error::@8/(const string) mul8u_error::str4 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@7/(const string) mulf_tables_cmp::str1 )
[63] (byte*) print_str::str#18 ← phi( mul8s_compare::@11/(const string) mul8s_compare::str mul8s_error/(const string) mul8s_error::str mul8s_error::@2/(const string) str1 mul8s_error::@4/(const string) str2 mul8s_error::@6/(const string) str3 mul8s_error::@8/(const string) str4 mul8u_compare::@11/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) str1 mul8u_error::@4/(const string) str2 mul8u_error::@6/(const string) str3 mul8u_error::@8/(const string) str4 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@7/(const string) mulf_tables_cmp::str1 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[64] (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#152 print_str::@2/(byte*) print_char_cursor#1 )

View File

@ -3235,6 +3235,7 @@ Constant (const byte*) mulf_tables_cmp::asm_sqr#0 = mula_sqr1_lo#0
Constant (const byte*) mulf_tables_cmp::kc_sqr#0 = mulf_sqr1_lo#0
Constant (const byte*) mulf_tables_cmp::$9 = mulf_sqr1_lo#0+mulf_tables_cmp::$8
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization Pass2ConstantStringConsolidation
Fixing inline constructor with mulf8u_prepared::$0 ← *(mulf8u_prepared::memB#0) w= *(mulf8u_prepared::resL#0)
Successful SSA optimization Pass2FixInlineConstructors
Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#5
@ -3370,7 +3371,7 @@ Constant inlined mul8s_compare::ok#0 = (byte/signed byte/word/signed word/dword/
Constant inlined mul8s_compare::ok#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined muls8s::m#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined muls8s::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#9 = (const string) mul8u_error::str4
Constant inlined print_str::str#9 = (const string) str4
Constant inlined mul8u::res#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulf_init::sqr1_hi#0 = (const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulf_init::$10 = -(byte/signed byte/word/signed word/dword/signed dword) 1
@ -3382,27 +3383,31 @@ Constant inlined print_str::str#3 = (const string) mulf_tables_cmp::str2
Constant inlined print_str::str#2 = (const string) mulf_tables_cmp::str1
Constant inlined print_str::str#1 = (const string) mulf_tables_cmp::str
Constant inlined mulf_init::$18 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256
Constant inlined print_str::str#8 = (const string) mul8u_error::str3
Constant inlined print_str::str#8 = (const string) str3
Constant inlined mulf_init::$19 = (const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511
Constant inlined print_str::str#7 = (const string) mul8u_error::str2
Constant inlined print_str::str#6 = (const string) mul8u_error::str1
Constant inlined print_str::str#7 = (const string) str2
Constant inlined print_str::str#6 = (const string) str1
Constant inlined mulf_init::$17 = (const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511
Constant inlined print_str::str#5 = (const string) mul8u_error::str
Constant inlined mulf_init::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined print_str::str#13 = (const string) mul8s_error::str2
Constant inlined print_str::str#12 = (const string) mul8s_error::str1
Constant inlined print_str::str#13 = (const string) str2
Constant inlined print_str::str#12 = (const string) str1
Constant inlined print_str::str#11 = (const string) mul8s_error::str
Constant inlined print_str::str#10 = (const string) mul8s_compare::str
Constant inlined print_str::str#15 = (const string) mul8s_error::str4
Constant inlined print_str::str#14 = (const string) mul8s_error::str3
Constant inlined print_str::str#15 = (const string) str4
Constant inlined print_str::str#14 = (const string) str3
Constant inlined mul8u_compare::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul8s_compare::a#0 = -(byte/word/signed word/dword/signed dword) 128
Constant inlined mulf_tables_cmp::$9 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined mulf_tables_cmp::$8 = (word/signed word/dword/signed dword) 512*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined mulf_init::sqr#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined muls8u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul8s_error::str1 = (const string) str1
Constant inlined mul8s_error::str2 = (const string) str2
Constant inlined mul8s_error::str3 = (const string) str3
Constant inlined muls8u::m#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul8s_error::str4 = (const string) str4
Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined mulf_init::$8 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512
Constant inlined print_char::ch#2 = (byte) ' '
@ -3410,6 +3415,10 @@ Constant inlined muls8s::j#0 = (byte/signed byte/word/signed word/dword/signed d
Constant inlined mulf_tables_cmp::asm_sqr#0 = (const byte[512]) mula_sqr1_lo#0
Constant inlined print_char::ch#1 = (byte) '-'
Constant inlined print_char::ch#0 = (byte) '-'
Constant inlined mul8u_error::str1 = (const string) str1
Constant inlined mul8u_error::str2 = (const string) str2
Constant inlined mul8u_error::str3 = (const string) str3
Constant inlined mul8u_error::str4 = (const string) str4
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting mul8s_compare::@18(between mul8s_compare::@10 and mul8s_compare::@1)
Added new block during phi lifting mul8s_compare::@19(between mul8s_compare::@5 and mul8s_compare::@2)
@ -3782,7 +3791,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@1
to:@return
print_str: scope:[print_str] from mul8s_compare::@11 mul8s_error mul8s_error::@2 mul8s_error::@4 mul8s_error::@6 mul8s_error::@8 mul8u_compare::@11 mul8u_error mul8u_error::@2 mul8u_error::@4 mul8u_error::@6 mul8u_error::@8 mulf_tables_cmp::@3 mulf_tables_cmp::@5 mulf_tables_cmp::@7
[63] (byte*) print_char_cursor#152 ← phi( mul8s_compare::@11/(byte*~) print_char_cursor#192 mul8s_error/(byte*~) print_char_cursor#193 mul8s_error::@2/(byte*) print_char_cursor#18 mul8s_error::@4/(byte*) print_char_cursor#18 mul8s_error::@6/(byte*) print_char_cursor#18 mul8s_error::@8/(byte*) print_char_cursor#18 mul8u_compare::@11/(byte*) print_char_cursor#31 mul8u_error/(byte*) print_char_cursor#31 mul8u_error::@2/(byte*) print_char_cursor#18 mul8u_error::@4/(byte*) print_char_cursor#18 mul8u_error::@6/(byte*) print_char_cursor#18 mul8u_error::@8/(byte*) print_char_cursor#18 mulf_tables_cmp::@3/((byte*))(word/signed word/dword/signed dword) 1024 mulf_tables_cmp::@5/((byte*))(word/signed word/dword/signed dword) 1024 mulf_tables_cmp::@7/(byte*) print_char_cursor#18 )
[63] (byte*) print_str::str#18 ← phi( mul8s_compare::@11/(const string) mul8s_compare::str mul8s_error/(const string) mul8s_error::str mul8s_error::@2/(const string) mul8s_error::str1 mul8s_error::@4/(const string) mul8s_error::str2 mul8s_error::@6/(const string) mul8s_error::str3 mul8s_error::@8/(const string) mul8s_error::str4 mul8u_compare::@11/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) mul8u_error::str1 mul8u_error::@4/(const string) mul8u_error::str2 mul8u_error::@6/(const string) mul8u_error::str3 mul8u_error::@8/(const string) mul8u_error::str4 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@7/(const string) mulf_tables_cmp::str1 )
[63] (byte*) print_str::str#18 ← phi( mul8s_compare::@11/(const string) mul8s_compare::str mul8s_error/(const string) mul8s_error::str mul8s_error::@2/(const string) str1 mul8s_error::@4/(const string) str2 mul8s_error::@6/(const string) str3 mul8s_error::@8/(const string) str4 mul8u_compare::@11/(const string) mul8u_compare::str mul8u_error/(const string) mul8u_error::str mul8u_error::@2/(const string) str1 mul8u_error::@4/(const string) str2 mul8u_error::@6/(const string) str3 mul8u_error::@8/(const string) str4 mulf_tables_cmp::@3/(const string) mulf_tables_cmp::str mulf_tables_cmp::@5/(const string) mulf_tables_cmp::str2 mulf_tables_cmp::@7/(const string) mulf_tables_cmp::str1 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
[64] (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#152 print_str::@2/(byte*) print_char_cursor#1 )
@ -5386,7 +5395,7 @@ mul8s_error: {
//SEG143 [63] phi from mul8s_error::@2 to print_str [phi:mul8s_error::@2->print_str]
print_str_from_b2:
//SEG144 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@2->print_str#0] -- register_copy
//SEG145 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG145 [63] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -5412,7 +5421,7 @@ mul8s_error: {
//SEG154 [63] phi from mul8s_error::@4 to print_str [phi:mul8s_error::@4->print_str]
print_str_from_b4:
//SEG155 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@4->print_str#0] -- register_copy
//SEG156 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG156 [63] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -5440,7 +5449,7 @@ mul8s_error: {
//SEG165 [63] phi from mul8s_error::@6 to print_str [phi:mul8s_error::@6->print_str]
print_str_from_b6:
//SEG166 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@6->print_str#0] -- register_copy
//SEG167 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG167 [63] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -5468,7 +5477,7 @@ mul8s_error: {
//SEG176 [63] phi from mul8s_error::@8 to print_str [phi:mul8s_error::@8->print_str]
print_str_from_b8:
//SEG177 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@8->print_str#0] -- register_copy
//SEG178 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG178 [63] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -5504,10 +5513,6 @@ mul8s_error: {
//SEG191 [92] return
rts
str: .text "signed multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG192 print_sword
// Print a signed word as HEX
@ -6515,7 +6520,7 @@ mul8u_error: {
//SEG504 [63] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str]
print_str_from_b2:
//SEG505 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@2->print_str#0] -- register_copy
//SEG506 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG506 [63] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -6542,7 +6547,7 @@ mul8u_error: {
//SEG516 [63] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str]
print_str_from_b4:
//SEG517 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@4->print_str#0] -- register_copy
//SEG518 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG518 [63] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -6571,7 +6576,7 @@ mul8u_error: {
//SEG528 [63] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str]
print_str_from_b6:
//SEG529 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@6->print_str#0] -- register_copy
//SEG530 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG530 [63] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -6600,7 +6605,7 @@ mul8u_error: {
//SEG540 [63] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str]
print_str_from_b8:
//SEG541 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@8->print_str#0] -- register_copy
//SEG542 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG542 [63] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -6637,10 +6642,6 @@ mul8u_error: {
//SEG556 [269] return
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG557 mulf8u
// Fast multiply two unsigned bytes to a word result
@ -7275,6 +7276,10 @@ print_cls: {
// >((( x - 255) * ( x - 255 ))/4)
.align $100
mula_sqr2_hi: .fill $200, 0
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -8155,7 +8160,7 @@ mul8s_error: {
//SEG143 [63] phi from mul8s_error::@2 to print_str [phi:mul8s_error::@2->print_str]
print_str_from_b2:
//SEG144 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@2->print_str#0] -- register_copy
//SEG145 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG145 [63] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -8180,7 +8185,7 @@ mul8s_error: {
//SEG154 [63] phi from mul8s_error::@4 to print_str [phi:mul8s_error::@4->print_str]
print_str_from_b4:
//SEG155 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@4->print_str#0] -- register_copy
//SEG156 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG156 [63] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -8204,7 +8209,7 @@ mul8s_error: {
//SEG165 [63] phi from mul8s_error::@6 to print_str [phi:mul8s_error::@6->print_str]
print_str_from_b6:
//SEG166 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@6->print_str#0] -- register_copy
//SEG167 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG167 [63] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -8232,7 +8237,7 @@ mul8s_error: {
//SEG176 [63] phi from mul8s_error::@8 to print_str [phi:mul8s_error::@8->print_str]
print_str_from_b8:
//SEG177 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@8->print_str#0] -- register_copy
//SEG178 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG178 [63] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -8268,10 +8273,6 @@ mul8s_error: {
//SEG191 [92] return
rts
str: .text "signed multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG192 print_sword
// Print a signed word as HEX
@ -9122,7 +9123,7 @@ mul8u_error: {
//SEG504 [63] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str]
print_str_from_b2:
//SEG505 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@2->print_str#0] -- register_copy
//SEG506 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG506 [63] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -9148,7 +9149,7 @@ mul8u_error: {
//SEG516 [63] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str]
print_str_from_b4:
//SEG517 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@4->print_str#0] -- register_copy
//SEG518 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG518 [63] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -9173,7 +9174,7 @@ mul8u_error: {
//SEG528 [63] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str]
print_str_from_b6:
//SEG529 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@6->print_str#0] -- register_copy
//SEG530 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG530 [63] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -9202,7 +9203,7 @@ mul8u_error: {
//SEG540 [63] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str]
print_str_from_b8:
//SEG541 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@8->print_str#0] -- register_copy
//SEG542 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG542 [63] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -9239,10 +9240,6 @@ mul8u_error: {
//SEG556 [269] return
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG557 mulf8u
// Fast multiply two unsigned bytes to a word result
@ -9837,6 +9834,10 @@ print_cls: {
// >((( x - 255) * ( x - 255 ))/4)
.align $100
mula_sqr2_hi: .fill $200, 0
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b42
@ -10388,10 +10389,6 @@ FINAL SYMBOL TABLE
(signed word) mul8s_error::ms
(signed word) mul8s_error::ms#0 ms zp ZP_WORD:8 0.3076923076923077
(const string) mul8s_error::str str = (string) "signed multiply mismatch @"
(const string) mul8s_error::str1 str1 = (string) "*@"
(const string) mul8s_error::str2 str2 = (string) " slow:@"
(const string) mul8s_error::str3 str3 = (string) " / normal:@"
(const string) mul8s_error::str4 str4 = (string) " / fast:@"
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(byte~) mul8u::$1 reg byte a 2002.0
(label) mul8u::@1
@ -10475,10 +10472,6 @@ FINAL SYMBOL TABLE
(word) mul8u_error::ms
(word) mul8u_error::ms#0 ms zp ZP_WORD:8 0.3076923076923077
(const string) mul8u_error::str str = (string) "multiply mismatch @"
(const string) mul8u_error::str1 str1 = (string) "*@"
(const string) mul8u_error::str2 str2 = (string) " slow:@"
(const string) mul8u_error::str3 str3 = (string) " / normal:@"
(const string) mul8u_error::str4 str4 = (string) " / fast:@"
(byte[512]) mula_sqr1_hi
(const byte[512]) mula_sqr1_hi#0 mula_sqr1_hi = { fill( 512, 0) }
(byte[512]) mula_sqr1_lo
@ -10765,6 +10758,10 @@ FINAL SYMBOL TABLE
(word) print_word::w#4 w zp ZP_WORD:8 4.0
(word) print_word::w#5 w zp ZP_WORD:8 4.0
(word) print_word::w#6 w zp ZP_WORD:8 5.333333333333333
(const string) str1 str1 = (string) "*@"
(const string) str2 str2 = (string) " slow:@"
(const string) str3 str3 = (string) " / normal:@"
(const string) str4 str4 = (string) " / fast:@"
zp ZP_BYTE:2 [ mul8s_compare::a#7 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mulf8s_prepared::b#0 ]
@ -11114,7 +11111,7 @@ mul8s_error: {
//SEG142 [75] call print_str
//SEG143 [63] phi from mul8s_error::@2 to print_str [phi:mul8s_error::@2->print_str]
//SEG144 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@2->print_str#0] -- register_copy
//SEG145 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG145 [63] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8s_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -11132,7 +11129,7 @@ mul8s_error: {
//SEG153 [79] call print_str
//SEG154 [63] phi from mul8s_error::@4 to print_str [phi:mul8s_error::@4->print_str]
//SEG155 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@4->print_str#0] -- register_copy
//SEG156 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG156 [63] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8s_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -11149,7 +11146,7 @@ mul8s_error: {
//SEG164 [83] call print_str
//SEG165 [63] phi from mul8s_error::@6 to print_str [phi:mul8s_error::@6->print_str]
//SEG166 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@6->print_str#0] -- register_copy
//SEG167 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG167 [63] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8s_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -11170,7 +11167,7 @@ mul8s_error: {
//SEG175 [87] call print_str
//SEG176 [63] phi from mul8s_error::@8 to print_str [phi:mul8s_error::@8->print_str]
//SEG177 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8s_error::@8->print_str#0] -- register_copy
//SEG178 [63] phi (byte*) print_str::str#18 = (const string) mul8s_error::str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG178 [63] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8s_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -11197,10 +11194,6 @@ mul8s_error: {
//SEG191 [92] return
rts
str: .text "signed multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG192 print_sword
// Print a signed word as HEX
@ -11880,7 +11873,7 @@ mul8u_error: {
//SEG503 [252] call print_str
//SEG504 [63] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str]
//SEG505 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@2->print_str#0] -- register_copy
//SEG506 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1
//SEG506 [63] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1
lda #<str1
sta print_str.str
lda #>str1
@ -11899,7 +11892,7 @@ mul8u_error: {
//SEG515 [256] call print_str
//SEG516 [63] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str]
//SEG517 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@4->print_str#0] -- register_copy
//SEG518 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1
//SEG518 [63] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1
lda #<str2
sta print_str.str
lda #>str2
@ -11917,7 +11910,7 @@ mul8u_error: {
//SEG527 [260] call print_str
//SEG528 [63] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str]
//SEG529 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@6->print_str#0] -- register_copy
//SEG530 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1
//SEG530 [63] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1
lda #<str3
sta print_str.str
lda #>str3
@ -11939,7 +11932,7 @@ mul8u_error: {
//SEG539 [264] call print_str
//SEG540 [63] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str]
//SEG541 [63] phi (byte*) print_char_cursor#152 = (byte*) print_char_cursor#18 [phi:mul8u_error::@8->print_str#0] -- register_copy
//SEG542 [63] phi (byte*) print_str::str#18 = (const string) mul8u_error::str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1
//SEG542 [63] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1
lda #<str4
sta print_str.str
lda #>str4
@ -11967,10 +11960,6 @@ mul8u_error: {
//SEG556 [269] return
rts
str: .text "multiply mismatch @"
str1: .text "*@"
str2: .text " slow:@"
str3: .text " / normal:@"
str4: .text " / fast:@"
}
//SEG557 mulf8u
// Fast multiply two unsigned bytes to a word result
@ -12483,4 +12472,8 @@ print_cls: {
// >((( x - 255) * ( x - 255 ))/4)
.align $100
mula_sqr2_hi: .fill $200, 0
str4: .text " / fast:@"
str3: .text " / normal:@"
str1: .text "*@"
str2: .text " slow:@"

View File

@ -90,10 +90,6 @@
(signed word) mul8s_error::ms
(signed word) mul8s_error::ms#0 ms zp ZP_WORD:8 0.3076923076923077
(const string) mul8s_error::str str = (string) "signed multiply mismatch @"
(const string) mul8s_error::str1 str1 = (string) "*@"
(const string) mul8s_error::str2 str2 = (string) " slow:@"
(const string) mul8s_error::str3 str3 = (string) " / normal:@"
(const string) mul8s_error::str4 str4 = (string) " / fast:@"
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(byte~) mul8u::$1 reg byte a 2002.0
(label) mul8u::@1
@ -177,10 +173,6 @@
(word) mul8u_error::ms
(word) mul8u_error::ms#0 ms zp ZP_WORD:8 0.3076923076923077
(const string) mul8u_error::str str = (string) "multiply mismatch @"
(const string) mul8u_error::str1 str1 = (string) "*@"
(const string) mul8u_error::str2 str2 = (string) " slow:@"
(const string) mul8u_error::str3 str3 = (string) " / normal:@"
(const string) mul8u_error::str4 str4 = (string) " / fast:@"
(byte[512]) mula_sqr1_hi
(const byte[512]) mula_sqr1_hi#0 mula_sqr1_hi = { fill( 512, 0) }
(byte[512]) mula_sqr1_lo
@ -467,6 +459,10 @@
(word) print_word::w#4 w zp ZP_WORD:8 4.0
(word) print_word::w#5 w zp ZP_WORD:8 4.0
(word) print_word::w#6 w zp ZP_WORD:8 5.333333333333333
(const string) str1 str1 = (string) "*@"
(const string) str2 str2 = (string) " slow:@"
(const string) str3 str3 = (string) " / normal:@"
(const string) str4 str4 = (string) " / fast:@"
zp ZP_BYTE:2 [ mul8s_compare::a#7 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_BYTE:3 [ mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mulf8s_prepared::b#0 ]