1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Added test for direct increment of constant numberic pointer ++*$d020;

This commit is contained in:
jespergravgaard 2017-11-13 22:00:29 +01:00
parent 8462d75265
commit 788f3d63a2
6 changed files with 224 additions and 101 deletions

View File

@ -259,6 +259,13 @@ public class AsmFragmentSignature {
return bind(deref.getPointer()) + "_derefidx_" + bind(deref.getIndex());
}
// Find value if it is already bound
for (String name : bindings.keySet()) {
Value bound = bindings.get(name);
if (bound.equals(value))
return name;
}
if (value instanceof VariableRef) {
value = program.getSymbolInfos().getVariable((VariableRef) value);
}
@ -313,15 +320,6 @@ public class AsmFragmentSignature {
} else if (value instanceof ConstantVar) {
ConstantVar constantVar = (ConstantVar) value;
SymbolType constType = constantVar.getType();
// Find value if it is already bound
for (String name : bindings.keySet()) {
Value bound = bindings.get(name);
if (bound instanceof ConstantVar) {
if (bound.equals(value))
return name;
}
}
if (SymbolTypeBasic.BYTE.equals(constType)) {
String name = "coby" + nextConstByteIdx++;

View File

@ -3,7 +3,6 @@
void main() {
byte* screen = $0400;
// RValue pointer expression (constant)
byte a = *(screen+80);
@ -24,5 +23,11 @@ void main() {
*(screen+160+j) = *(screen+200+j);
}
// Incrementing directly on a word
++*$d020;
--*($d000+$21);
}

View File

@ -50,5 +50,7 @@ main: {
inx
cpx #$b
bne b2
inc $d020
dec $d000+$21
rts
}

View File

@ -25,7 +25,11 @@ main::@2: scope:[main] from main::@2 main::@3
[12] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ] ( main:0 [ main::j#2 ] )
[13] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::j#1 ] ( main:0 [ main::j#1 ] )
[14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] )
to:main::@4
main::@4: scope:[main] from main::@2
[15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] )
[16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] )
to:main::@return
main::@return: scope:[main] from main::@2
[15] return [ ] ( main:0 [ ] )
main::@return: scope:[main] from main::@4
[17] return [ ] ( main:0 [ ] )
to:@return

View File

@ -3,7 +3,6 @@
void main() {
byte* screen = $0400;
// RValue pointer expression (constant)
byte a = *(screen+80);
@ -24,8 +23,16 @@ void main() {
*(screen+160+j) = *(screen+200+j);
}
// Incrementing directly on a word
++*$d020;
--*($d000+$21);
}
Adding pre/post-modifier *((word) 53280) ← ++ *((word) 53280)
Adding pre/post-modifier *((var) main::$13) ← -- *((var) main::$13)
PROGRAM
proc (void()) main()
(byte*) main::screen ← (word) 1024
@ -56,6 +63,11 @@ main::@2:
(byte) main::j ← ++ (byte) main::j
(boolean~) main::$12 ← (byte) main::j != (byte) 11
if((boolean~) main::$12) goto main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
main::@return:
return
endproc // main()
@ -68,6 +80,9 @@ SYMBOLS
(byte*~) main::$10
(byte*~) main::$11
(boolean~) main::$12
(word~) main::$13
(word~) main::$14
(word~) main::$15
(byte*~) main::$2
(boolean~) main::$3
(byte*~) main::$4
@ -123,6 +138,11 @@ main::@2: scope:[main] from main::@2 main::@3
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@4
return
@ -132,52 +152,6 @@ main::@return: scope:[main] from main::@4
to:@end
@end: scope:[] from @1
Removing empty block main::@4
CONTROL FLOW GRAPH
@begin: scope:[] from
to:@1
main: scope:[main] from
(byte*) main::screen ← (word) 1024
(byte*~) main::$0 ← (byte*) main::screen + (byte) 80
(byte) main::a ← *((byte*~) main::$0)
(byte) main::i ← (byte) 0
to:main::@1
main::@1: scope:[main] from main main::@1
(byte*~) main::$1 ← (byte*) main::screen + (byte) 40
(byte*~) main::$2 ← (byte*~) main::$1 + (byte) main::i
*((byte*) main::screen + (byte) main::i) ← *((byte*~) main::$2)
(byte) main::i ← ++ (byte) main::i
(boolean~) main::$3 ← (byte) main::i != (byte) 11
if((boolean~) main::$3) goto main::@1
to:main::@3
main::@3: scope:[main] from main::@1
(byte*~) main::$4 ← (byte*) main::screen + (byte) 81
(byte*) main::sc2 ← (byte*~) main::$4
(byte*~) main::$5 ← (byte*) main::screen + (byte) 121
*((byte*) main::sc2) ← *((byte*~) main::$5)
(byte*~) main::$6 ← (byte*) main::screen + (byte) 82
(byte*~) main::$7 ← (byte*) main::screen + (byte) 122
*((byte*~) main::$6) ← *((byte*~) main::$7)
(byte) main::j ← (byte) 0
to:main::@2
main::@2: scope:[main] from main::@2 main::@3
(byte*~) main::$8 ← (byte*) main::screen + (byte) 160
(byte*~) main::$9 ← (byte*~) main::$8 + (byte) main::j
(byte*~) main::$10 ← (byte*) main::screen + (byte) 200
(byte*~) main::$11 ← (byte*~) main::$10 + (byte) main::j
*((byte*~) main::$9) ← *((byte*~) main::$11)
(byte) main::j ← ++ (byte) main::j
(boolean~) main::$12 ← (byte) main::j != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@return
main::@return: scope:[main] from main::@2
return
to:@return
@1: scope:[] from @begin
call main
to:@end
@end: scope:[] from @1
PROCEDURE MODIFY VARIABLE ANALYSIS
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
@ -216,8 +190,15 @@ main::@2: scope:[main] from main::@2 main::@3
(byte) main::j ← ++ (byte) main::j
(boolean~) main::$12 ← (byte) main::j != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -269,8 +250,15 @@ main::@2: scope:[main] from main::@2 main::@3
(byte) main::j#1 ← ++ (byte) main::j#2
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -321,8 +309,15 @@ main::@2: scope:[main] from main::@2 main::@3
(byte) main::j#1 ← ++ (byte) main::j#2
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -343,6 +338,9 @@ INITIAL SSA SYMBOL TABLE
(byte*~) main::$10
(byte*~) main::$11
(boolean~) main::$12
(word~) main::$13
(word~) main::$14
(word~) main::$15
(byte*~) main::$2
(boolean~) main::$3
(byte*~) main::$4
@ -354,6 +352,7 @@ INITIAL SSA SYMBOL TABLE
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@return
(byte) main::a
(byte) main::a#0
@ -416,8 +415,15 @@ main::@2: scope:[main] from main::@2 main::@3
(byte) main::j#1 ← ++ (byte) main::j#2
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -468,8 +474,15 @@ main::@2: scope:[main] from main::@2 main::@3
(byte) main::j#1 ← ++ (byte) main::j#2
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -520,8 +533,15 @@ main::@2: scope:[main] from main::@2 main::@3
(byte) main::j#1 ← ++ (byte) main::j#2
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -569,8 +589,15 @@ main::@2: scope:[main] from main::@2 main::@3
(byte) main::j#1 ← ++ (byte) main::j#2
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
if((boolean~) main::$12) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -616,8 +643,15 @@ main::@2: scope:[main] from main::@2 main::@3
*((byte*~) main::$9) ← *((byte*~) main::$11)
(byte) main::j#1 ← ++ (byte) main::j#2
if((byte) main::j#1!=(byte) 11) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
(word~) main::$13 ← (word) 53248 + (byte) 33
*((word~) main::$13) ← -- *((word~) main::$13)
(word~) main::$14 ← (word) 53248 + (byte) 33
(word~) main::$15 ← (word) 53248 + (byte) 33
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -628,6 +662,9 @@ main::@return: scope:[main] from main::@2
Constant (const byte*) main::screen#0 = 1024
Constant (const byte) main::i#0 = 0
Constant (const byte) main::j#0 = 0
Constant (const word) main::$13 = 53248+33
Constant (const word) main::$14 = 53248+33
Constant (const word) main::$15 = 53248+33
Succesful SSA optimization Pass2ConstantIdentification
CONTROL FLOW GRAPH
@begin: scope:[] from
@ -661,8 +698,12 @@ main::@2: scope:[main] from main::@2 main::@3
*((byte*~) main::$9) ← *((byte*~) main::$11)
(byte) main::j#1 ← ++ (byte) main::j#2
if((byte) main::j#1!=(byte) 11) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
*((const word) main::$13) ← -- *((const word) main::$13)
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -703,8 +744,12 @@ main::@2: scope:[main] from main::@2 main::@3
*((byte*~) main::$9) ← *((byte*~) main::$11)
(byte) main::j#1 ← ++ (byte) main::j#2
if((byte) main::j#1!=(byte) 11) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
*((const word) main::$13) ← -- *((const word) main::$13)
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -730,8 +775,11 @@ Constant inlined main::$7 = (const byte*) main::screen#0+(byte) 122
Constant inlined main::$8 = (const byte*) main::screen#0+(byte) 160
Constant inlined main::$10 = (const byte*) main::screen#0+(byte) 200
Constant inlined main::j#0 = (byte) 0
Constant inlined main::$14 = (word) 53248+(byte) 33
Constant inlined main::$1 = (const byte*) main::screen#0+(byte) 40
Constant inlined main::$15 = (word) 53248+(byte) 33
Constant inlined main::i#0 = (byte) 0
Constant inlined main::$13 = (word) 53248+(byte) 33
Constant inlined main::$0 = (const byte*) main::screen#0+(byte) 80
Succesful SSA optimization Pass2ConstantInlining
CONTROL FLOW GRAPH
@ -758,8 +806,12 @@ main::@2: scope:[main] from main::@2 main::@3
*((byte*~) main::$9) ← *((byte*~) main::$11)
(byte) main::j#1 ← ++ (byte) main::j#2
if((byte) main::j#1!=(byte) 11) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
*((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33)
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -778,6 +830,7 @@ FINAL SYMBOL TABLE
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@return
(byte) main::a
(byte) main::a#0
@ -792,10 +845,10 @@ FINAL SYMBOL TABLE
(byte*) main::screen
(const byte*) main::screen#0 = (word) 1024
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return
Added new block during phi lifting main::@5(between main::@1 and main::@1)
Added new block during phi lifting main::@6(between main::@2 and main::@2)
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@6 main::@5
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return main::@6 main::@5
CONTROL FLOW GRAPH - PHI LIFTED
@begin: scope:[] from
to:@1
@ -824,8 +877,12 @@ main::@2: scope:[main] from main::@3 main::@6
*((byte*~) main::$9) ← *((byte*~) main::$11)
(byte) main::j#1 ← ++ (byte) main::j#2
if((byte) main::j#1!=(byte) 11) goto main::@6
to:main::@4
main::@4: scope:[main] from main::@2
*((word) 53280) ← ++ *((word) 53280)
*((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33)
to:main::@return
main::@return: scope:[main] from main::@2
main::@return: scope:[main] from main::@4
return
to:@return
main::@6: scope:[main] from main::@2
@ -869,24 +926,28 @@ main::@2: scope:[main] from main::@3 main::@6
[12] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ]
[13] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::j#1 ]
[14] if((byte) main::j#1!=(byte) 11) goto main::@6 [ main::j#1 ]
to:main::@4
main::@4: scope:[main] from main::@2
[15] *((word) 53280) ← ++ *((word) 53280) [ ]
[16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ]
to:main::@return
main::@return: scope:[main] from main::@2
[15] return [ ]
main::@return: scope:[main] from main::@4
[17] return [ ]
to:@return
main::@6: scope:[main] from main::@2
[16] (byte~) main::j#3 ← (byte) main::j#1 [ main::j#3 ]
[18] (byte~) main::j#3 ← (byte) main::j#1 [ main::j#3 ]
to:main::@2
main::@5: scope:[main] from main::@1
[17] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
[19] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
to:main::@1
Created 2 initial phi equivalence classes
Coalesced [16] main::j#3 ← main::j#1
Coalesced [17] main::i#3 ← main::i#1
Coalesced [18] main::j#3 ← main::j#1
Coalesced [19] main::i#3 ← main::i#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@5
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
@ -918,9 +979,13 @@ main::@2: scope:[main] from main::@2 main::@3
[12] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ]
[13] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::j#1 ]
[14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ]
to:main::@4
main::@4: scope:[main] from main::@2
[15] *((word) 53280) ← ++ *((word) 53280) [ ]
[16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ]
to:main::@return
main::@return: scope:[main] from main::@2
[15] return [ ]
main::@return: scope:[main] from main::@4
[17] return [ ]
to:@return
CONTROL FLOW GRAPH - PHI MEM COALESCED
@ -951,9 +1016,13 @@ main::@2: scope:[main] from main::@2 main::@3
[12] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ] ( main:0 [ main::j#2 ] )
[13] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::j#1 ] ( main:0 [ main::j#1 ] )
[14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] )
to:main::@4
main::@4: scope:[main] from main::@2
[15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] )
[16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] )
to:main::@return
main::@return: scope:[main] from main::@2
[15] return [ ] ( main:0 [ ] )
main::@return: scope:[main] from main::@4
[17] return [ ] ( main:0 [ ] )
to:@return
DOMINATORS
@ -964,7 +1033,8 @@ main dominated by @1 @begin main
main::@1 dominated by @1 @begin main::@1 main
main::@3 dominated by @1 @begin main::@1 main::@3 main
main::@2 dominated by @1 @begin main::@2 main::@1 main::@3 main
main::@return dominated by @1 main::@return @begin main::@2 main::@1 main::@3 main
main::@4 dominated by @1 @begin main::@2 main::@1 main::@4 main::@3 main
main::@return dominated by @1 main::@return @begin main::@2 main::@1 main::@4 main::@3 main
Found back edge: Loop head: main::@1 tails: main::@1 blocks: null
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
@ -1127,10 +1197,17 @@ main: {
lda j
cmp #$b
bne b2_from_b2
jmp b4
//SEG30 main::@4
b4:
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
inc $d020
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
dec $d000+$21
jmp breturn
//SEG30 main::@return
//SEG33 main::@return
breturn:
//SEG31 [15] return [ ] ( main:0 [ ] )
//SEG34 [17] return [ ] ( main:0 [ ] )
rts
}
@ -1177,8 +1254,8 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 31.17: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 27.5: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 20: zp ZP_BYTE:4 [ main::a#0 ] 11: zp ZP_PTR_BYTE:5 [ main::$2 ] 11: zp ZP_PTR_BYTE:7 [ main::$9 ] 11: zp ZP_PTR_BYTE:9 [ main::$11 ]
Uplift Scope []
Uplifting [main] best 1175 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ] reg byte a [ main::a#0 ] zp ZP_PTR_BYTE:5 [ main::$2 ] zp ZP_PTR_BYTE:7 [ main::$9 ] zp ZP_PTR_BYTE:9 [ main::$11 ]
Uplifting [] best 1175 combination
Uplifting [main] best 1190 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ] reg byte a [ main::a#0 ] zp ZP_PTR_BYTE:5 [ main::$2 ] zp ZP_PTR_BYTE:7 [ main::$9 ] zp ZP_PTR_BYTE:9 [ main::$11 ]
Uplifting [] best 1190 combination
Coalescing zero page register [ zp ZP_PTR_BYTE:5 [ main::$2 ] ] with [ zp ZP_PTR_BYTE:7 [ main::$9 ] ]
Allocated (was zp ZP_PTR_BYTE:5) zp ZP_PTR_BYTE:2 [ main::$2 main::$9 ]
Allocated (was zp ZP_PTR_BYTE:9) zp ZP_PTR_BYTE:4 [ main::$11 ]
@ -1187,6 +1264,7 @@ Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
ASSEMBLER
@ -1283,9 +1361,15 @@ main: {
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
cpx #$b
bne b2_from_b2
//SEG30 main::@return
//SEG30 main::@4
b4:
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
inc $d020
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
dec $d000+$21
//SEG33 main::@return
breturn:
//SEG31 [15] return [ ] ( main:0 [ ] )
//SEG34 [17] return [ ] ( main:0 [ ] )
rts
}
@ -1384,9 +1468,15 @@ main: {
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
cpx #$b
bne b2_from_b2
//SEG30 main::@return
//SEG30 main::@4
b4:
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
inc $d020
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
dec $d000+$21
//SEG33 main::@return
breturn:
//SEG31 [15] return [ ] ( main:0 [ ] )
//SEG34 [17] return [ ] ( main:0 [ ] )
rts
}
@ -1486,9 +1576,15 @@ main: {
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
cpx #$b
bne b2
//SEG30 main::@return
//SEG30 main::@4
b4:
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
inc $d020
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
dec $d000+$21
//SEG33 main::@return
breturn:
//SEG31 [15] return [ ] ( main:0 [ ] )
//SEG34 [17] return [ ] ( main:0 [ ] )
rts
}
@ -1497,6 +1593,7 @@ Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b3:
Removing instruction b2_from_b3:
Removing instruction b4:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
ASSEMBLER
@ -1584,8 +1681,13 @@ main: {
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
cpx #$b
bne b2
//SEG30 main::@return
//SEG31 [15] return [ ] ( main:0 [ ] )
//SEG30 main::@4
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
inc $d020
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
dec $d000+$21
//SEG33 main::@return
//SEG34 [17] return [ ] ( main:0 [ ] )
rts
}
@ -1675,8 +1777,13 @@ main: {
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
cpx #$b
bne b2
//SEG30 main::@return
//SEG31 [15] return [ ] ( main:0 [ ] )
//SEG30 main::@4
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
inc $d020
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
dec $d000+$21
//SEG33 main::@return
//SEG34 [17] return [ ] ( main:0 [ ] )
rts
}
@ -1691,6 +1798,7 @@ FINAL SYMBOL TABLE
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@return
(byte) main::a
(byte) main::a#0 reg byte a 20.0
@ -1794,8 +1902,13 @@ main: {
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
cpx #$b
bne b2
//SEG30 main::@return
//SEG31 [15] return [ ] ( main:0 [ ] )
//SEG30 main::@4
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
inc $d020
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
dec $d000+$21
//SEG33 main::@return
//SEG34 [17] return [ ] ( main:0 [ ] )
rts
}

View File

@ -8,6 +8,7 @@
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@return
(byte) main::a
(byte) main::a#0 reg byte a 20.0