mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-11-25 20:32:25 +00:00
try again update test reference. maven config for tests in parallel.
This commit is contained in:
parent
c78aef2312
commit
54e79d91a1
1
.idea/encodings.xml
generated
1
.idea/encodings.xml
generated
@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
|
||||
<file url="PROJECT" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
2
pom.xml
2
pom.xml
@ -82,6 +82,8 @@
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<useSystemClassLoader>false</useSystemClassLoader>
|
||||
<parallel>classes</parallel>
|
||||
<threadCount>5</threadCount>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
@ -46,7 +46,7 @@ public class Pass5DoubleJumpElimination extends Pass5AsmOptimization {
|
||||
}
|
||||
if(asmInstruction.getType().equals(rtsType)) {
|
||||
immediateJumps.put(currentScope + "::" + currentLabel, "rts");
|
||||
}
|
||||
}
|
||||
}
|
||||
currentLabel = null;
|
||||
} else {
|
||||
@ -63,18 +63,18 @@ public class Pass5DoubleJumpElimination extends Pass5AsmOptimization {
|
||||
} else if(line instanceof AsmScopeEnd) {
|
||||
currentScope = "";
|
||||
} else if(line instanceof AsmInstruction) {
|
||||
AsmInstruction asmInstruction = (AsmInstruction) line;
|
||||
AsmInstruction asmInstruction = (AsmInstruction) line;
|
||||
if(asmInstruction.getType().isJump()) {
|
||||
String immediateJmpTarget = immediateJumps.get(currentScope + "::" + asmInstruction.getParameter());
|
||||
if (immediateJmpTarget == "rts" && asmInstruction.getType().getMnemnonic()=="jmp") {
|
||||
getLog().append("Replacing jump to rts with rts in " + asmInstruction.toString());
|
||||
AsmInstructionType rtsType = AsmInstructionSet.getInstructionType("rts", AsmAddressingMode.NON, false);
|
||||
asmInstruction.setType(rtsType);
|
||||
optimized = true;
|
||||
} else if(immediateJmpTarget != null && immediateJmpTarget != "rts" && !immediateJmpTarget.equals(asmInstruction.getParameter())) {
|
||||
getLog().append("Skipping double jump to " + immediateJmpTarget + " in " + asmInstruction.toString());
|
||||
asmInstruction.setParameter(immediateJmpTarget);
|
||||
optimized = true;
|
||||
if(immediateJmpTarget == "rts" && asmInstruction.getType().getMnemnonic() == "jmp") {
|
||||
getLog().append("Replacing jump to rts with rts in " + asmInstruction.toString());
|
||||
AsmInstructionType rtsType = AsmInstructionSet.getInstructionType("rts", AsmAddressingMode.NON, false);
|
||||
asmInstruction.setType(rtsType);
|
||||
optimized = true;
|
||||
} else if(immediateJmpTarget != null && immediateJmpTarget != "rts" && !immediateJmpTarget.equals(asmInstruction.getParameter())) {
|
||||
getLog().append("Skipping double jump to " + immediateJmpTarget + " in " + asmInstruction.toString());
|
||||
asmInstruction.setParameter(immediateJmpTarget);
|
||||
optimized = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,151 +5,151 @@ Identified constant variable (byte) RED
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte[]) ref#0 ? { (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) $12, (byte/signed byte/word/signed word/dword/signed dword) 9, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0 }
|
||||
(byte*) screen1#0 ? ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte*~) $0 ? (byte*) screen1#0 + (byte/signed byte/word/signed word/dword/signed dword) $28
|
||||
(byte*) screen2#0 ? (byte*~) $0
|
||||
(byte*) cols#0 ? ((byte*)) (word/dword/signed dword) $d800
|
||||
(byte) GREEN#0 ? (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
(byte) RED#0 ? (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte[]) ref#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) $12, (byte/signed byte/word/signed word/dword/signed dword) 9, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0 }
|
||||
(byte*) screen1#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte*~) $0 ← (byte*) screen1#0 + (byte/signed byte/word/signed word/dword/signed dword) $28
|
||||
(byte*) screen2#0 ← (byte*~) $0
|
||||
(byte*) cols#0 ← ((byte*)) (word/dword/signed dword) $d800
|
||||
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
to:@2
|
||||
main: scope:[main] from @2
|
||||
(byte*) screen2#2 ? phi( @2/(byte*) screen2#13 )
|
||||
(byte) main::i#0 ? (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) main::a#0 ? (byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
(byte) test::i#0 ? (byte) main::i#0
|
||||
(byte) test::a#0 ? (byte) main::a#0
|
||||
(byte*) screen2#2 ← phi( @2/(byte*) screen2#13 )
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) main::a#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
(byte) test::i#0 ← (byte) main::i#0
|
||||
(byte) test::a#0 ← (byte) main::a#0
|
||||
call test
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
(byte*) screen2#3 ? phi( main/(byte*) screen2#2 )
|
||||
(byte) main::a#11 ? phi( main/(byte) main::a#0 )
|
||||
(byte) main::i#12 ? phi( main/(byte) main::i#0 )
|
||||
(byte) main::i#1 ? ++ (byte) main::i#12
|
||||
(byte) main::a#1 ? (byte) main::a#11 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#1 ? (byte) main::i#1
|
||||
(byte) test::a#1 ? (byte) main::a#1
|
||||
(byte*) screen2#3 ← phi( main/(byte*) screen2#2 )
|
||||
(byte) main::a#11 ← phi( main/(byte) main::a#0 )
|
||||
(byte) main::i#12 ← phi( main/(byte) main::i#0 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#12
|
||||
(byte) main::a#1 ← (byte) main::a#11 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#1 ← (byte) main::i#1
|
||||
(byte) test::a#1 ← (byte) main::a#1
|
||||
call test
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) screen2#5 ? phi( main::@1/(byte*) screen2#3 )
|
||||
(byte) main::a#12 ? phi( main::@1/(byte) main::a#1 )
|
||||
(byte) main::i#13 ? phi( main::@1/(byte) main::i#1 )
|
||||
(byte) main::i#2 ? ++ (byte) main::i#13
|
||||
(byte) main::a#2 ? (byte) main::a#12 - (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#2 ? (byte) main::i#2
|
||||
(byte) test::a#2 ? (byte) main::a#2
|
||||
(byte*) screen2#5 ← phi( main::@1/(byte*) screen2#3 )
|
||||
(byte) main::a#12 ← phi( main::@1/(byte) main::a#1 )
|
||||
(byte) main::i#13 ← phi( main::@1/(byte) main::i#1 )
|
||||
(byte) main::i#2 ← ++ (byte) main::i#13
|
||||
(byte) main::a#2 ← (byte) main::a#12 - (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#2 ← (byte) main::i#2
|
||||
(byte) test::a#2 ← (byte) main::a#2
|
||||
call test
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
(byte*) screen2#6 ? phi( main::@2/(byte*) screen2#5 )
|
||||
(byte) main::a#13 ? phi( main::@2/(byte) main::a#2 )
|
||||
(byte) main::i#14 ? phi( main::@2/(byte) main::i#2 )
|
||||
(byte) main::i#3 ? ++ (byte) main::i#14
|
||||
(byte) main::a#3 ? (byte) main::a#13 * (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) test::i#3 ? (byte) main::i#3
|
||||
(byte) test::a#3 ? (byte) main::a#3
|
||||
(byte*) screen2#6 ← phi( main::@2/(byte*) screen2#5 )
|
||||
(byte) main::a#13 ← phi( main::@2/(byte) main::a#2 )
|
||||
(byte) main::i#14 ← phi( main::@2/(byte) main::i#2 )
|
||||
(byte) main::i#3 ← ++ (byte) main::i#14
|
||||
(byte) main::a#3 ← (byte) main::a#13 * (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) test::i#3 ← (byte) main::i#3
|
||||
(byte) test::a#3 ← (byte) main::a#3
|
||||
call test
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
(byte*) screen2#7 ? phi( main::@3/(byte*) screen2#6 )
|
||||
(byte) main::a#14 ? phi( main::@3/(byte) main::a#3 )
|
||||
(byte) main::i#15 ? phi( main::@3/(byte) main::i#3 )
|
||||
(byte) main::i#4 ? ++ (byte) main::i#15
|
||||
(byte) main::a#4 ? (byte) main::a#14 / (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) test::i#4 ? (byte) main::i#4
|
||||
(byte) test::a#4 ? (byte) main::a#4
|
||||
(byte*) screen2#7 ← phi( main::@3/(byte*) screen2#6 )
|
||||
(byte) main::a#14 ← phi( main::@3/(byte) main::a#3 )
|
||||
(byte) main::i#15 ← phi( main::@3/(byte) main::i#3 )
|
||||
(byte) main::i#4 ← ++ (byte) main::i#15
|
||||
(byte) main::a#4 ← (byte) main::a#14 / (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) test::i#4 ← (byte) main::i#4
|
||||
(byte) test::a#4 ← (byte) main::a#4
|
||||
call test
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@4
|
||||
(byte*) screen2#8 ? phi( main::@4/(byte*) screen2#7 )
|
||||
(byte) main::a#15 ? phi( main::@4/(byte) main::a#4 )
|
||||
(byte) main::i#16 ? phi( main::@4/(byte) main::i#4 )
|
||||
(byte) main::i#5 ? ++ (byte) main::i#16
|
||||
(byte) main::a#5 ? (byte) main::a#15 % (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) test::i#5 ? (byte) main::i#5
|
||||
(byte) test::a#5 ? (byte) main::a#5
|
||||
(byte*) screen2#8 ← phi( main::@4/(byte*) screen2#7 )
|
||||
(byte) main::a#15 ← phi( main::@4/(byte) main::a#4 )
|
||||
(byte) main::i#16 ← phi( main::@4/(byte) main::i#4 )
|
||||
(byte) main::i#5 ← ++ (byte) main::i#16
|
||||
(byte) main::a#5 ← (byte) main::a#15 % (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) test::i#5 ← (byte) main::i#5
|
||||
(byte) test::a#5 ← (byte) main::a#5
|
||||
call test
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
(byte*) screen2#9 ? phi( main::@5/(byte*) screen2#8 )
|
||||
(byte) main::a#16 ? phi( main::@5/(byte) main::a#5 )
|
||||
(byte) main::i#17 ? phi( main::@5/(byte) main::i#5 )
|
||||
(byte) main::i#6 ? ++ (byte) main::i#17
|
||||
(byte) main::a#6 ? (byte) main::a#16 << (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) test::i#6 ? (byte) main::i#6
|
||||
(byte) test::a#6 ? (byte) main::a#6
|
||||
(byte*) screen2#9 ← phi( main::@5/(byte*) screen2#8 )
|
||||
(byte) main::a#16 ← phi( main::@5/(byte) main::a#5 )
|
||||
(byte) main::i#17 ← phi( main::@5/(byte) main::i#5 )
|
||||
(byte) main::i#6 ← ++ (byte) main::i#17
|
||||
(byte) main::a#6 ← (byte) main::a#16 << (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) test::i#6 ← (byte) main::i#6
|
||||
(byte) test::a#6 ← (byte) main::a#6
|
||||
call test
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@6
|
||||
(byte*) screen2#10 ? phi( main::@6/(byte*) screen2#9 )
|
||||
(byte) main::a#17 ? phi( main::@6/(byte) main::a#6 )
|
||||
(byte) main::i#18 ? phi( main::@6/(byte) main::i#6 )
|
||||
(byte) main::i#7 ? ++ (byte) main::i#18
|
||||
(byte) main::a#7 ? (byte) main::a#17 >> (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#7 ? (byte) main::i#7
|
||||
(byte) test::a#7 ? (byte) main::a#7
|
||||
(byte*) screen2#10 ← phi( main::@6/(byte*) screen2#9 )
|
||||
(byte) main::a#17 ← phi( main::@6/(byte) main::a#6 )
|
||||
(byte) main::i#18 ← phi( main::@6/(byte) main::i#6 )
|
||||
(byte) main::i#7 ← ++ (byte) main::i#18
|
||||
(byte) main::a#7 ← (byte) main::a#17 >> (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#7 ← (byte) main::i#7
|
||||
(byte) test::a#7 ← (byte) main::a#7
|
||||
call test
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@7
|
||||
(byte*) screen2#11 ? phi( main::@7/(byte*) screen2#10 )
|
||||
(byte) main::a#18 ? phi( main::@7/(byte) main::a#7 )
|
||||
(byte) main::i#19 ? phi( main::@7/(byte) main::i#7 )
|
||||
(byte) main::i#8 ? ++ (byte) main::i#19
|
||||
(byte) main::a#8 ? (byte) main::a#18 ^ (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) test::i#8 ? (byte) main::i#8
|
||||
(byte) test::a#8 ? (byte) main::a#8
|
||||
(byte*) screen2#11 ← phi( main::@7/(byte*) screen2#10 )
|
||||
(byte) main::a#18 ← phi( main::@7/(byte) main::a#7 )
|
||||
(byte) main::i#19 ← phi( main::@7/(byte) main::i#7 )
|
||||
(byte) main::i#8 ← ++ (byte) main::i#19
|
||||
(byte) main::a#8 ← (byte) main::a#18 ^ (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) test::i#8 ← (byte) main::i#8
|
||||
(byte) test::a#8 ← (byte) main::a#8
|
||||
call test
|
||||
to:main::@9
|
||||
main::@9: scope:[main] from main::@8
|
||||
(byte*) screen2#12 ? phi( main::@8/(byte*) screen2#11 )
|
||||
(byte) main::a#19 ? phi( main::@8/(byte) main::a#8 )
|
||||
(byte) main::i#20 ? phi( main::@8/(byte) main::i#8 )
|
||||
(byte) main::i#9 ? ++ (byte) main::i#20
|
||||
(byte) main::a#9 ? (byte) main::a#19 | (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#9 ? (byte) main::i#9
|
||||
(byte) test::a#9 ? (byte) main::a#9
|
||||
(byte*) screen2#12 ← phi( main::@8/(byte*) screen2#11 )
|
||||
(byte) main::a#19 ← phi( main::@8/(byte) main::a#8 )
|
||||
(byte) main::i#20 ← phi( main::@8/(byte) main::i#8 )
|
||||
(byte) main::i#9 ← ++ (byte) main::i#20
|
||||
(byte) main::a#9 ← (byte) main::a#19 | (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#9 ← (byte) main::i#9
|
||||
(byte) test::a#9 ← (byte) main::a#9
|
||||
call test
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@9
|
||||
(byte*) screen2#4 ? phi( main::@9/(byte*) screen2#12 )
|
||||
(byte) main::a#20 ? phi( main::@9/(byte) main::a#9 )
|
||||
(byte) main::i#21 ? phi( main::@9/(byte) main::i#9 )
|
||||
(byte) main::i#10 ? ++ (byte) main::i#21
|
||||
(byte) main::a#10 ? (byte) main::a#20 & (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#10 ? (byte) main::i#10
|
||||
(byte) test::a#10 ? (byte) main::a#10
|
||||
(byte*) screen2#4 ← phi( main::@9/(byte*) screen2#12 )
|
||||
(byte) main::a#20 ← phi( main::@9/(byte) main::a#9 )
|
||||
(byte) main::i#21 ← phi( main::@9/(byte) main::i#9 )
|
||||
(byte) main::i#10 ← ++ (byte) main::i#21
|
||||
(byte) main::a#10 ← (byte) main::a#20 & (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) test::i#10 ← (byte) main::i#10
|
||||
(byte) test::a#10 ← (byte) main::a#10
|
||||
call test
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@10
|
||||
(byte) main::i#22 ? phi( main::@10/(byte) main::i#10 )
|
||||
(byte) main::i#11 ? ++ (byte) main::i#22
|
||||
(byte) main::i#22 ← phi( main::@10/(byte) main::i#10 )
|
||||
(byte) main::i#11 ← ++ (byte) main::i#22
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@11
|
||||
return
|
||||
to:@return
|
||||
test: scope:[test] from main main::@1 main::@10 main::@2 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9
|
||||
(byte*) screen2#1 ? phi( main/(byte*) screen2#2 main::@1/(byte*) screen2#3 main::@10/(byte*) screen2#4 main::@2/(byte*) screen2#5 main::@3/(byte*) screen2#6 main::@4/(byte*) screen2#7 main::@5/(byte*) screen2#8 main::@6/(byte*) screen2#9 main::@7/(byte*) screen2#10 main::@8/(byte*) screen2#11 main::@9/(byte*) screen2#12 )
|
||||
(byte) test::i#11 ? phi( main/(byte) test::i#0 main::@1/(byte) test::i#1 main::@10/(byte) test::i#10 main::@2/(byte) test::i#2 main::@3/(byte) test::i#3 main::@4/(byte) test::i#4 main::@5/(byte) test::i#5 main::@6/(byte) test::i#6 main::@7/(byte) test::i#7 main::@8/(byte) test::i#8 main::@9/(byte) test::i#9 )
|
||||
(byte) test::a#11 ? phi( main/(byte) test::a#0 main::@1/(byte) test::a#1 main::@10/(byte) test::a#10 main::@2/(byte) test::a#2 main::@3/(byte) test::a#3 main::@4/(byte) test::a#4 main::@5/(byte) test::a#5 main::@6/(byte) test::a#6 main::@7/(byte) test::a#7 main::@8/(byte) test::a#8 main::@9/(byte) test::a#9 )
|
||||
*((byte*) screen1#0 + (byte) test::i#11) ? (byte) test::a#11
|
||||
*((byte*) screen2#1 + (byte) test::i#11) ? *((byte[]) ref#0 + (byte) test::i#11)
|
||||
(bool~) test::$0 ? *((byte[]) ref#0 + (byte) test::i#11) == (byte) test::a#11
|
||||
(byte*) screen2#1 ← phi( main/(byte*) screen2#2 main::@1/(byte*) screen2#3 main::@10/(byte*) screen2#4 main::@2/(byte*) screen2#5 main::@3/(byte*) screen2#6 main::@4/(byte*) screen2#7 main::@5/(byte*) screen2#8 main::@6/(byte*) screen2#9 main::@7/(byte*) screen2#10 main::@8/(byte*) screen2#11 main::@9/(byte*) screen2#12 )
|
||||
(byte) test::i#11 ← phi( main/(byte) test::i#0 main::@1/(byte) test::i#1 main::@10/(byte) test::i#10 main::@2/(byte) test::i#2 main::@3/(byte) test::i#3 main::@4/(byte) test::i#4 main::@5/(byte) test::i#5 main::@6/(byte) test::i#6 main::@7/(byte) test::i#7 main::@8/(byte) test::i#8 main::@9/(byte) test::i#9 )
|
||||
(byte) test::a#11 ← phi( main/(byte) test::a#0 main::@1/(byte) test::a#1 main::@10/(byte) test::a#10 main::@2/(byte) test::a#2 main::@3/(byte) test::a#3 main::@4/(byte) test::a#4 main::@5/(byte) test::a#5 main::@6/(byte) test::a#6 main::@7/(byte) test::a#7 main::@8/(byte) test::a#8 main::@9/(byte) test::a#9 )
|
||||
*((byte*) screen1#0 + (byte) test::i#11) ← (byte) test::a#11
|
||||
*((byte*) screen2#1 + (byte) test::i#11) ← *((byte[]) ref#0 + (byte) test::i#11)
|
||||
(bool~) test::$0 ← *((byte[]) ref#0 + (byte) test::i#11) == (byte) test::a#11
|
||||
if((bool~) test::$0) goto test::@1
|
||||
to:test::@3
|
||||
test::@1: scope:[test] from test
|
||||
(byte) test::i#12 ? phi( test/(byte) test::i#11 )
|
||||
*((byte*) cols#0 + (byte) test::i#12) ? (byte) GREEN#0
|
||||
(byte) test::i#12 ← phi( test/(byte) test::i#11 )
|
||||
*((byte*) cols#0 + (byte) test::i#12) ← (byte) GREEN#0
|
||||
to:test::@return
|
||||
test::@3: scope:[test] from test
|
||||
(byte) test::i#13 ? phi( test/(byte) test::i#11 )
|
||||
*((byte*) cols#0 + (byte) test::i#13) ? (byte) RED#0
|
||||
(byte) test::i#13 ← phi( test/(byte) test::i#11 )
|
||||
*((byte*) cols#0 + (byte) test::i#13) ← (byte) RED#0
|
||||
to:test::@return
|
||||
test::@return: scope:[test] from test::@1 test::@3
|
||||
return
|
||||
to:@return
|
||||
@2: scope:[] from @begin
|
||||
(byte*) screen2#13 ? phi( @begin/(byte*) screen2#0 )
|
||||
(byte*) screen2#13 ← phi( @begin/(byte*) screen2#0 )
|
||||
call main
|
||||
to:@3
|
||||
@3: scope:[] from @2
|
||||
@ -584,20 +584,20 @@ main::@return: scope:[main] from main::@10
|
||||
[26] return
|
||||
to:@return
|
||||
test: scope:[test] from main main::@1 main::@10 main::@2 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9
|
||||
[27] (byte) test::i#11 ? phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@10/(byte/signed byte/word/signed word/dword/signed dword) $a main::@2/(byte/signed byte/word/signed word/dword/signed dword) 2 main::@3/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@4/(byte/signed byte/word/signed word/dword/signed dword) 4 main::@5/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 6 main::@7/(byte/signed byte/word/signed word/dword/signed dword) 7 main::@8/(byte/signed byte/word/signed word/dword/signed dword) 8 main::@9/(byte/signed byte/word/signed word/dword/signed dword) 9 )
|
||||
[27] (byte) test::a#11 ? phi( main/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1 main::@10/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1^(byte/signed byte/word/signed word/dword/signed dword) 6|(byte/signed byte/word/signed word/dword/signed dword) 1&(byte/signed byte/word/signed word/dword/signed dword) 1 main::@2/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1 main::@3/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6 main::@4/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2 main::@5/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2 main::@7/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 main::@8/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1^(byte/signed byte/word/signed word/dword/signed dword) 6 main::@9/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1^(byte/signed byte/word/signed word/dword/signed dword) 6|(byte/signed byte/word/signed word/dword/signed dword) 1 )
|
||||
[28] *((const byte*) screen1#0 + (byte) test::i#11) ? (byte) test::a#11
|
||||
[29] *((const byte*) screen2#0 + (byte) test::i#11) ? *((const byte[]) ref#0 + (byte) test::i#11)
|
||||
[27] (byte) test::i#11 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 main::@10/(byte/signed byte/word/signed word/dword/signed dword) $a main::@2/(byte/signed byte/word/signed word/dword/signed dword) 2 main::@3/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@4/(byte/signed byte/word/signed word/dword/signed dword) 4 main::@5/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 6 main::@7/(byte/signed byte/word/signed word/dword/signed dword) 7 main::@8/(byte/signed byte/word/signed word/dword/signed dword) 8 main::@9/(byte/signed byte/word/signed word/dword/signed dword) 9 )
|
||||
[27] (byte) test::a#11 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@1/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1 main::@10/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1^(byte/signed byte/word/signed word/dword/signed dword) 6|(byte/signed byte/word/signed word/dword/signed dword) 1&(byte/signed byte/word/signed word/dword/signed dword) 1 main::@2/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1 main::@3/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6 main::@4/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2 main::@5/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2 main::@7/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 main::@8/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1^(byte/signed byte/word/signed word/dword/signed dword) 6 main::@9/(byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6/(byte/signed byte/word/signed word/dword/signed dword) 2%(byte/signed byte/word/signed word/dword/signed dword) 2<<(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1^(byte/signed byte/word/signed word/dword/signed dword) 6|(byte/signed byte/word/signed word/dword/signed dword) 1 )
|
||||
[28] *((const byte*) screen1#0 + (byte) test::i#11) ← (byte) test::a#11
|
||||
[29] *((const byte*) screen2#0 + (byte) test::i#11) ← *((const byte[]) ref#0 + (byte) test::i#11)
|
||||
[30] if(*((const byte[]) ref#0 + (byte) test::i#11)==(byte) test::a#11) goto test::@1
|
||||
to:test::@2
|
||||
test::@2: scope:[test] from test
|
||||
[31] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) RED#0
|
||||
[31] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) RED#0
|
||||
to:test::@return
|
||||
test::@return: scope:[test] from test::@1 test::@2
|
||||
[32] return
|
||||
to:@return
|
||||
test::@1: scope:[test] from test
|
||||
[33] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) GREEN#0
|
||||
[33] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) GREEN#0
|
||||
to:test::@return
|
||||
|
||||
|
||||
@ -828,11 +828,11 @@ main: {
|
||||
test: {
|
||||
.label a = 2
|
||||
.label i = 3
|
||||
//SEG78 [28] *((const byte*) screen1#0 + (byte) test::i#11) ? (byte) test::a#11 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
//SEG78 [28] *((const byte*) screen1#0 + (byte) test::i#11) ← (byte) test::a#11 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda a
|
||||
ldy i
|
||||
sta screen1,y
|
||||
//SEG79 [29] *((const byte*) screen2#0 + (byte) test::i#11) ? *((const byte[]) ref#0 + (byte) test::i#11) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
|
||||
//SEG79 [29] *((const byte*) screen2#0 + (byte) test::i#11) ← *((const byte[]) ref#0 + (byte) test::i#11) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
|
||||
ldy i
|
||||
lda ref,y
|
||||
sta screen2,y
|
||||
@ -844,7 +844,7 @@ test: {
|
||||
jmp b2
|
||||
//SEG81 test::@2
|
||||
b2:
|
||||
//SEG82 [31] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) RED#0 -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
//SEG82 [31] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) RED#0 -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
lda #RED
|
||||
ldy i
|
||||
sta cols,y
|
||||
@ -855,7 +855,7 @@ test: {
|
||||
rts
|
||||
//SEG85 test::@1
|
||||
b1:
|
||||
//SEG86 [33] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) GREEN#0 -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
//SEG86 [33] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
lda #GREEN
|
||||
ldy i
|
||||
sta cols,y
|
||||
@ -864,17 +864,17 @@ test: {
|
||||
ref: .byte 3, 4, 3, $12, 9, 1, 4, 2, 4, 5, 1, 0
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [29] *((const byte*) screen2#0 + (byte) test::i#11) ? *((const byte[]) ref#0 + (byte) test::i#11) [ test::a#11 test::i#11 ] ( main:2::test:5 [ test::a#11 test::i#11 ] main:2::test:7 [ test::a#11 test::i#11 ] main:2::test:9 [ test::a#11 test::i#11 ] main:2::test:11 [ test::a#11 test::i#11 ] main:2::test:13 [ test::a#11 test::i#11 ] main:2::test:15 [ test::a#11 test::i#11 ] main:2::test:17 [ test::a#11 test::i#11 ] main:2::test:19 [ test::a#11 test::i#11 ] main:2::test:21 [ test::a#11 test::i#11 ] main:2::test:23 [ test::a#11 test::i#11 ] main:2::test:25 [ test::a#11 test::i#11 ] ) always clobbers reg byte a
|
||||
Statement [29] *((const byte*) screen2#0 + (byte) test::i#11) ← *((const byte[]) ref#0 + (byte) test::i#11) [ test::a#11 test::i#11 ] ( main:2::test:5 [ test::a#11 test::i#11 ] main:2::test:7 [ test::a#11 test::i#11 ] main:2::test:9 [ test::a#11 test::i#11 ] main:2::test:11 [ test::a#11 test::i#11 ] main:2::test:13 [ test::a#11 test::i#11 ] main:2::test:15 [ test::a#11 test::i#11 ] main:2::test:17 [ test::a#11 test::i#11 ] main:2::test:19 [ test::a#11 test::i#11 ] main:2::test:21 [ test::a#11 test::i#11 ] main:2::test:23 [ test::a#11 test::i#11 ] main:2::test:25 [ test::a#11 test::i#11 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ test::a#11 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ test::i#11 ]
|
||||
Statement [30] if(*((const byte[]) ref#0 + (byte) test::i#11)==(byte) test::a#11) goto test::@1 [ test::i#11 ] ( main:2::test:5 [ test::i#11 ] main:2::test:7 [ test::i#11 ] main:2::test:9 [ test::i#11 ] main:2::test:11 [ test::i#11 ] main:2::test:13 [ test::i#11 ] main:2::test:15 [ test::i#11 ] main:2::test:17 [ test::i#11 ] main:2::test:19 [ test::i#11 ] main:2::test:21 [ test::i#11 ] main:2::test:23 [ test::i#11 ] main:2::test:25 [ test::i#11 ] ) always clobbers reg byte a
|
||||
Statement [31] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) RED#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Statement [33] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) GREEN#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Statement [28] *((const byte*) screen1#0 + (byte) test::i#11) ? (byte) test::a#11 [ test::a#11 test::i#11 ] ( main:2::test:5 [ test::a#11 test::i#11 ] main:2::test:7 [ test::a#11 test::i#11 ] main:2::test:9 [ test::a#11 test::i#11 ] main:2::test:11 [ test::a#11 test::i#11 ] main:2::test:13 [ test::a#11 test::i#11 ] main:2::test:15 [ test::a#11 test::i#11 ] main:2::test:17 [ test::a#11 test::i#11 ] main:2::test:19 [ test::a#11 test::i#11 ] main:2::test:21 [ test::a#11 test::i#11 ] main:2::test:23 [ test::a#11 test::i#11 ] main:2::test:25 [ test::a#11 test::i#11 ] ) always clobbers reg byte a
|
||||
Statement [29] *((const byte*) screen2#0 + (byte) test::i#11) ? *((const byte[]) ref#0 + (byte) test::i#11) [ test::a#11 test::i#11 ] ( main:2::test:5 [ test::a#11 test::i#11 ] main:2::test:7 [ test::a#11 test::i#11 ] main:2::test:9 [ test::a#11 test::i#11 ] main:2::test:11 [ test::a#11 test::i#11 ] main:2::test:13 [ test::a#11 test::i#11 ] main:2::test:15 [ test::a#11 test::i#11 ] main:2::test:17 [ test::a#11 test::i#11 ] main:2::test:19 [ test::a#11 test::i#11 ] main:2::test:21 [ test::a#11 test::i#11 ] main:2::test:23 [ test::a#11 test::i#11 ] main:2::test:25 [ test::a#11 test::i#11 ] ) always clobbers reg byte a
|
||||
Statement [31] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) RED#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Statement [33] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) GREEN#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Statement [28] *((const byte*) screen1#0 + (byte) test::i#11) ← (byte) test::a#11 [ test::a#11 test::i#11 ] ( main:2::test:5 [ test::a#11 test::i#11 ] main:2::test:7 [ test::a#11 test::i#11 ] main:2::test:9 [ test::a#11 test::i#11 ] main:2::test:11 [ test::a#11 test::i#11 ] main:2::test:13 [ test::a#11 test::i#11 ] main:2::test:15 [ test::a#11 test::i#11 ] main:2::test:17 [ test::a#11 test::i#11 ] main:2::test:19 [ test::a#11 test::i#11 ] main:2::test:21 [ test::a#11 test::i#11 ] main:2::test:23 [ test::a#11 test::i#11 ] main:2::test:25 [ test::a#11 test::i#11 ] ) always clobbers reg byte a
|
||||
Statement [29] *((const byte*) screen2#0 + (byte) test::i#11) ← *((const byte[]) ref#0 + (byte) test::i#11) [ test::a#11 test::i#11 ] ( main:2::test:5 [ test::a#11 test::i#11 ] main:2::test:7 [ test::a#11 test::i#11 ] main:2::test:9 [ test::a#11 test::i#11 ] main:2::test:11 [ test::a#11 test::i#11 ] main:2::test:13 [ test::a#11 test::i#11 ] main:2::test:15 [ test::a#11 test::i#11 ] main:2::test:17 [ test::a#11 test::i#11 ] main:2::test:19 [ test::a#11 test::i#11 ] main:2::test:21 [ test::a#11 test::i#11 ] main:2::test:23 [ test::a#11 test::i#11 ] main:2::test:25 [ test::a#11 test::i#11 ] ) always clobbers reg byte a
|
||||
Statement [30] if(*((const byte[]) ref#0 + (byte) test::i#11)==(byte) test::a#11) goto test::@1 [ test::i#11 ] ( main:2::test:5 [ test::i#11 ] main:2::test:7 [ test::i#11 ] main:2::test:9 [ test::i#11 ] main:2::test:11 [ test::i#11 ] main:2::test:13 [ test::i#11 ] main:2::test:15 [ test::i#11 ] main:2::test:17 [ test::i#11 ] main:2::test:19 [ test::i#11 ] main:2::test:21 [ test::i#11 ] main:2::test:23 [ test::i#11 ] main:2::test:25 [ test::i#11 ] ) always clobbers reg byte a
|
||||
Statement [31] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) RED#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Statement [33] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) GREEN#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Statement [31] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) RED#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Statement [33] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) GREEN#0 [ ] ( main:2::test:5 [ ] main:2::test:7 [ ] main:2::test:9 [ ] main:2::test:11 [ ] main:2::test:13 [ ] main:2::test:15 [ ] main:2::test:17 [ ] main:2::test:19 [ ] main:2::test:21 [ ] main:2::test:23 [ ] main:2::test:25 [ ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ test::a#11 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ test::i#11 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
|
||||
|
||||
@ -1079,10 +1079,10 @@ main: {
|
||||
// test(byte register(X) i, byte zeropage(2) a)
|
||||
test: {
|
||||
.label a = 2
|
||||
//SEG78 [28] *((const byte*) screen1#0 + (byte) test::i#11) ? (byte) test::a#11 -- pbuc1_derefidx_vbuxx=vbuz1
|
||||
//SEG78 [28] *((const byte*) screen1#0 + (byte) test::i#11) ← (byte) test::a#11 -- pbuc1_derefidx_vbuxx=vbuz1
|
||||
lda a
|
||||
sta screen1,x
|
||||
//SEG79 [29] *((const byte*) screen2#0 + (byte) test::i#11) ? *((const byte[]) ref#0 + (byte) test::i#11) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
//SEG79 [29] *((const byte*) screen2#0 + (byte) test::i#11) ← *((const byte[]) ref#0 + (byte) test::i#11) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda ref,x
|
||||
sta screen2,x
|
||||
//SEG80 [30] if(*((const byte[]) ref#0 + (byte) test::i#11)==(byte) test::a#11) goto test::@1 -- pbuc1_derefidx_vbuxx_eq_vbuz1_then_la1
|
||||
@ -1092,7 +1092,7 @@ test: {
|
||||
jmp b2
|
||||
//SEG81 test::@2
|
||||
b2:
|
||||
//SEG82 [31] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) RED#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
//SEG82 [31] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) RED#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #RED
|
||||
sta cols,x
|
||||
jmp breturn
|
||||
@ -1102,7 +1102,7 @@ test: {
|
||||
rts
|
||||
//SEG85 test::@1
|
||||
b1:
|
||||
//SEG86 [33] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
//SEG86 [33] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #GREEN
|
||||
sta cols,x
|
||||
jmp breturn
|
||||
@ -1358,10 +1358,10 @@ main: {
|
||||
// test(byte register(X) i, byte zeropage(2) a)
|
||||
test: {
|
||||
.label a = 2
|
||||
//SEG78 [28] *((const byte*) screen1#0 + (byte) test::i#11) ? (byte) test::a#11 -- pbuc1_derefidx_vbuxx=vbuz1
|
||||
//SEG78 [28] *((const byte*) screen1#0 + (byte) test::i#11) ← (byte) test::a#11 -- pbuc1_derefidx_vbuxx=vbuz1
|
||||
lda a
|
||||
sta screen1,x
|
||||
//SEG79 [29] *((const byte*) screen2#0 + (byte) test::i#11) ? *((const byte[]) ref#0 + (byte) test::i#11) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
//SEG79 [29] *((const byte*) screen2#0 + (byte) test::i#11) ← *((const byte[]) ref#0 + (byte) test::i#11) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
|
||||
lda ref,x
|
||||
sta screen2,x
|
||||
//SEG80 [30] if(*((const byte[]) ref#0 + (byte) test::i#11)==(byte) test::a#11) goto test::@1 -- pbuc1_derefidx_vbuxx_eq_vbuz1_then_la1
|
||||
@ -1369,7 +1369,7 @@ test: {
|
||||
cmp a
|
||||
beq b1
|
||||
//SEG81 test::@2
|
||||
//SEG82 [31] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) RED#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
//SEG82 [31] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) RED#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #RED
|
||||
sta cols,x
|
||||
//SEG83 test::@return
|
||||
@ -1377,7 +1377,7 @@ test: {
|
||||
rts
|
||||
//SEG85 test::@1
|
||||
b1:
|
||||
//SEG86 [33] *((const byte*) cols#0 + (byte) test::i#11) ? (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
//SEG86 [33] *((const byte*) cols#0 + (byte) test::i#11) ← (const byte) GREEN#0 -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #GREEN
|
||||
sta cols,x
|
||||
rts
|
||||
|
@ -3,21 +3,21 @@ CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(bool*) main::bscreen#0 ? ((bool*)) (word/signed word/dword/signed dword) $400
|
||||
*((bool*) main::bscreen#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ? true
|
||||
*((bool*) main::bscreen#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ? false
|
||||
(bool*~) main::$0 ? (bool*) main::bscreen#0 + (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(bool*) main::bscreen#1 ? (bool*~) main::$0
|
||||
*((bool*) main::bscreen#1) ? true
|
||||
(bool~) main::$1 ? ! *((bool*) main::bscreen#1)
|
||||
(bool*) main::bscreen#0 ← ((bool*)) (word/signed word/dword/signed dword) $400
|
||||
*((bool*) main::bscreen#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← true
|
||||
*((bool*) main::bscreen#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← false
|
||||
(bool*~) main::$0 ← (bool*) main::bscreen#0 + (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(bool*) main::bscreen#1 ← (bool*~) main::$0
|
||||
*((bool*) main::bscreen#1) ← true
|
||||
(bool~) main::$1 ← ! *((bool*) main::bscreen#1)
|
||||
if((bool~) main::$1) goto main::@1
|
||||
to:main::@2
|
||||
main::@1: scope:[main] from main
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main
|
||||
(bool*) main::bscreen#3 ? phi( main/(bool*) main::bscreen#1 )
|
||||
(bool*) main::bscreen#2 ? ++ (bool*) main::bscreen#3
|
||||
*((bool*) main::bscreen#2) ? true
|
||||
(bool*) main::bscreen#3 ← phi( main/(bool*) main::bscreen#1 )
|
||||
(bool*) main::bscreen#2 ← ++ (bool*) main::bscreen#3
|
||||
*((bool*) main::bscreen#2) ← true
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@2
|
||||
return
|
||||
@ -51,7 +51,7 @@ Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Alias (bool*) main::bscreen#1 = (bool*~) main::$0 (bool*) main::bscreen#3
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Rewriting ! if()-condition to reversed if() [6] (bool~) main::$1 ? ! *((bool*) main::bscreen#1)
|
||||
Rewriting ! if()-condition to reversed if() [6] (bool~) main::$1 ← ! *((bool*) main::bscreen#1)
|
||||
Successful SSA optimization Pass2ConditionalAndOrRewriting
|
||||
Constant (const bool*) main::bscreen#0 = ((bool*))$400
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
@ -94,16 +94,16 @@ FINAL CONTROL FLOW GRAPH
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *(((bool*))(word/signed word/dword/signed dword) $400) ? true
|
||||
[5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ? false
|
||||
[6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true
|
||||
[4] *(((bool*))(word/signed word/dword/signed dword) $400) ← true
|
||||
[5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ← false
|
||||
[6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true
|
||||
[7] if(*(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2)) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main main::@1
|
||||
[8] return
|
||||
to:@return
|
||||
main::@1: scope:[main] from main
|
||||
[9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true
|
||||
[9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true
|
||||
to:main::@return
|
||||
|
||||
|
||||
@ -138,13 +138,13 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *(((bool*))(word/signed word/dword/signed dword) $400) ? true -- _deref_pboc1=vboc2
|
||||
//SEG10 [4] *(((bool*))(word/signed word/dword/signed dword) $400) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400
|
||||
//SEG11 [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ? false -- _deref_pboc1=vboc2
|
||||
//SEG11 [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ← false -- _deref_pboc1=vboc2
|
||||
lda #0
|
||||
sta $400+1
|
||||
//SEG12 [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true -- _deref_pboc1=vboc2
|
||||
//SEG12 [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400+2
|
||||
//SEG13 [7] if(*(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2)) goto main::@1 -- _deref_pboc1_then_la1
|
||||
@ -158,18 +158,18 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true -- _deref_pboc1=vboc2
|
||||
//SEG17 [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400+2+1
|
||||
jmp breturn
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [4] *(((bool*))(word/signed word/dword/signed dword) $400) ? true [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ? false [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [4] *(((bool*))(word/signed word/dword/signed dword) $400) ← true [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ← false [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [7] if(*(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2)) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
@ -202,13 +202,13 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *(((bool*))(word/signed word/dword/signed dword) $400) ? true -- _deref_pboc1=vboc2
|
||||
//SEG10 [4] *(((bool*))(word/signed word/dword/signed dword) $400) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400
|
||||
//SEG11 [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ? false -- _deref_pboc1=vboc2
|
||||
//SEG11 [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ← false -- _deref_pboc1=vboc2
|
||||
lda #0
|
||||
sta $400+1
|
||||
//SEG12 [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true -- _deref_pboc1=vboc2
|
||||
//SEG12 [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400+2
|
||||
//SEG13 [7] if(*(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2)) goto main::@1 -- _deref_pboc1_then_la1
|
||||
@ -222,7 +222,7 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true -- _deref_pboc1=vboc2
|
||||
//SEG17 [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400+2+1
|
||||
jmp breturn
|
||||
@ -279,13 +279,13 @@ Score: 40
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
//SEG10 [4] *(((bool*))(word/signed word/dword/signed dword) $400) ? true -- _deref_pboc1=vboc2
|
||||
//SEG10 [4] *(((bool*))(word/signed word/dword/signed dword) $400) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400
|
||||
//SEG11 [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ? false -- _deref_pboc1=vboc2
|
||||
//SEG11 [5] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 1) ← false -- _deref_pboc1=vboc2
|
||||
lda #0
|
||||
sta $400+1
|
||||
//SEG12 [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true -- _deref_pboc1=vboc2
|
||||
//SEG12 [6] *(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400+2
|
||||
//SEG13 [7] if(*(((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2)) goto main::@1 -- _deref_pboc1_then_la1
|
||||
@ -296,7 +296,7 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ? true -- _deref_pboc1=vboc2
|
||||
//SEG17 [9] *(++((bool*))(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) 2) ← true -- _deref_pboc1=vboc2
|
||||
lda #1
|
||||
sta $400+2+1
|
||||
rts
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -7,31 +7,31 @@ CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::SCREEN#0 ? ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte) main::min#0 ? (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
(byte) main::max#0 ? (byte/word/signed word/dword/signed dword) $c8
|
||||
(byte~) main::$0 ? (byte) main::min#0 + (byte) main::max#0
|
||||
(word) main::sumw#0 ? ((word)) (byte~) main::$0
|
||||
(word~) main::$1 ? (word) main::sumw#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte~) main::$2 ? ((byte)) (word~) main::$1
|
||||
(byte/signed word/word/dword/signed dword~) main::$3 ? (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) main::midw#0 ? (byte/signed word/word/dword/signed dword~) main::$3
|
||||
*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ? (byte) main::midw#0
|
||||
(byte~) main::$4 ? (byte) main::min#0 + (byte) main::max#0
|
||||
(byte) main::sumb#0 ? (byte~) main::$4
|
||||
(byte~) main::$5 ? (byte) main::sumb#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte/signed word/word/dword/signed dword~) main::$6 ? (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) main::midb#0 ? (byte/signed word/word/dword/signed dword~) main::$6
|
||||
*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ? (byte) main::midb#0
|
||||
(byte*) main::BGCOL#0 ? ((byte*)) (word/dword/signed dword) $d021
|
||||
(bool~) main::$7 ? *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
(byte*) main::SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte) main::min#0 ← (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
(byte) main::max#0 ← (byte/word/signed word/dword/signed dword) $c8
|
||||
(byte~) main::$0 ← (byte) main::min#0 + (byte) main::max#0
|
||||
(word) main::sumw#0 ← ((word)) (byte~) main::$0
|
||||
(word~) main::$1 ← (word) main::sumw#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte~) main::$2 ← ((byte)) (word~) main::$1
|
||||
(byte/signed word/word/dword/signed dword~) main::$3 ← (byte~) main::$2 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) main::midw#0 ← (byte/signed word/word/dword/signed dword~) main::$3
|
||||
*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) main::midw#0
|
||||
(byte~) main::$4 ← (byte) main::min#0 + (byte) main::max#0
|
||||
(byte) main::sumb#0 ← (byte~) main::$4
|
||||
(byte~) main::$5 ← (byte) main::sumb#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte/signed word/word/dword/signed dword~) main::$6 ← (byte~) main::$5 + (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) main::midb#0 ← (byte/signed word/word/dword/signed dword~) main::$6
|
||||
*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) main::midb#0
|
||||
(byte*) main::BGCOL#0 ← ((byte*)) (word/dword/signed dword) $d021
|
||||
(bool~) main::$7 ← *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
if((bool~) main::$7) goto main::@1
|
||||
to:main::@3
|
||||
main::@1: scope:[main] from main
|
||||
*((byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
*((byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main
|
||||
*((byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
*((byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@3
|
||||
return
|
||||
@ -139,18 +139,18 @@ FINAL CONTROL FLOW GRAPH
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((const byte*) main::SCREEN#0) ? (const byte) main::midw#0
|
||||
[5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ? (const byte) main::midb#0
|
||||
[4] *((const byte*) main::SCREEN#0) ← (const byte) main::midw#0
|
||||
[5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::midb#0
|
||||
[6] if(*((const byte*) main::SCREEN#0)==*((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1)) goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main
|
||||
[7] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
[7] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@2
|
||||
[8] return
|
||||
to:@return
|
||||
main::@1: scope:[main] from main
|
||||
[9] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
[9] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
to:main::@return
|
||||
|
||||
|
||||
@ -200,10 +200,10 @@ main: {
|
||||
.const sumw = min+max
|
||||
.const midb = (sumb>>1)+1
|
||||
.const midw = (sumw>>1)+1
|
||||
//SEG10 [4] *((const byte*) main::SCREEN#0) ? (const byte) main::midw#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) main::SCREEN#0) ← (const byte) main::midw#0 -- _deref_pbuc1=vbuc2
|
||||
lda #midw
|
||||
sta SCREEN
|
||||
//SEG11 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ? (const byte) main::midb#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG11 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::midb#0 -- _deref_pbuc1=vbuc2
|
||||
lda #midb
|
||||
sta SCREEN+1
|
||||
//SEG12 [6] if(*((const byte*) main::SCREEN#0)==*((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1)) goto main::@1 -- _deref_pbuc1_eq__deref_pbuc2_then_la1
|
||||
@ -213,7 +213,7 @@ main: {
|
||||
jmp b2
|
||||
//SEG13 main::@2
|
||||
b2:
|
||||
//SEG14 [7] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
//SEG14 [7] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
lda #2
|
||||
sta BGCOL
|
||||
jmp breturn
|
||||
@ -223,18 +223,18 @@ main: {
|
||||
rts
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [9] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
//SEG18 [9] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
lda #5
|
||||
sta BGCOL
|
||||
jmp breturn
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [4] *((const byte*) main::SCREEN#0) ? (const byte) main::midw#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ? (const byte) main::midb#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [4] *((const byte*) main::SCREEN#0) ← (const byte) main::midw#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::midb#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [6] if(*((const byte*) main::SCREEN#0)==*((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1)) goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
@ -275,10 +275,10 @@ main: {
|
||||
.const sumw = min+max
|
||||
.const midb = (sumb>>1)+1
|
||||
.const midw = (sumw>>1)+1
|
||||
//SEG10 [4] *((const byte*) main::SCREEN#0) ? (const byte) main::midw#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) main::SCREEN#0) ← (const byte) main::midw#0 -- _deref_pbuc1=vbuc2
|
||||
lda #midw
|
||||
sta SCREEN
|
||||
//SEG11 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ? (const byte) main::midb#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG11 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::midb#0 -- _deref_pbuc1=vbuc2
|
||||
lda #midb
|
||||
sta SCREEN+1
|
||||
//SEG12 [6] if(*((const byte*) main::SCREEN#0)==*((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1)) goto main::@1 -- _deref_pbuc1_eq__deref_pbuc2_then_la1
|
||||
@ -288,7 +288,7 @@ main: {
|
||||
jmp b2
|
||||
//SEG13 main::@2
|
||||
b2:
|
||||
//SEG14 [7] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
//SEG14 [7] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
lda #2
|
||||
sta BGCOL
|
||||
jmp breturn
|
||||
@ -298,7 +298,7 @@ main: {
|
||||
rts
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [9] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
//SEG18 [9] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
lda #5
|
||||
sta BGCOL
|
||||
jmp breturn
|
||||
@ -379,10 +379,10 @@ main: {
|
||||
.const sumw = min+max
|
||||
.const midb = (sumb>>1)+1
|
||||
.const midw = (sumw>>1)+1
|
||||
//SEG10 [4] *((const byte*) main::SCREEN#0) ? (const byte) main::midw#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG10 [4] *((const byte*) main::SCREEN#0) ← (const byte) main::midw#0 -- _deref_pbuc1=vbuc2
|
||||
lda #midw
|
||||
sta SCREEN
|
||||
//SEG11 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ? (const byte) main::midb#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG11 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (const byte) main::midb#0 -- _deref_pbuc1=vbuc2
|
||||
lda #midb
|
||||
sta SCREEN+1
|
||||
//SEG12 [6] if(*((const byte*) main::SCREEN#0)==*((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1)) goto main::@1 -- _deref_pbuc1_eq__deref_pbuc2_then_la1
|
||||
@ -390,7 +390,7 @@ main: {
|
||||
cmp SCREEN+1
|
||||
beq b1
|
||||
//SEG13 main::@2
|
||||
//SEG14 [7] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
//SEG14 [7] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
lda #2
|
||||
sta BGCOL
|
||||
//SEG15 main::@return
|
||||
@ -398,7 +398,7 @@ main: {
|
||||
rts
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [9] *((const byte*) main::BGCOL#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
//SEG18 [9] *((const byte*) main::BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
lda #5
|
||||
sta BGCOL
|
||||
rts
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -3,35 +3,35 @@ CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::screen#0 ? ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte[]) main::str#0 ? (const string) main::$5
|
||||
(byte) main::i#0 ? (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte*) main::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte[]) main::str#0 ← (const string) main::$5
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte*) main::screen#4 ? phi( main/(byte*) main::screen#0 main::@5/(byte*) main::screen#5 )
|
||||
(byte) main::i#2 ? phi( main/(byte) main::i#0 main::@5/(byte) main::i#1 )
|
||||
(bool~) main::$0 ? *((byte[]) main::str#0 + (byte) main::i#2) == (byte) '@'
|
||||
(bool~) main::$1 ? ! (bool~) main::$0
|
||||
(byte*) main::screen#4 ← phi( main/(byte*) main::screen#0 main::@5/(byte*) main::screen#5 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#1 )
|
||||
(bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (byte) '@'
|
||||
(bool~) main::$1 ← ! (bool~) main::$0
|
||||
if((bool~) main::$1) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) main::screen#3 ? phi( main::@1/(byte*) main::screen#4 )
|
||||
(byte) main::i#3 ? phi( main::@1/(byte) main::i#2 )
|
||||
(bool~) main::$2 ? *((byte[]) main::str#0 + (byte) main::i#3) == (byte) ' '
|
||||
(bool~) main::$3 ? ! (bool~) main::$2
|
||||
(byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#4 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(bool~) main::$2 ← *((byte[]) main::str#0 + (byte) main::i#3) == (byte) ' '
|
||||
(bool~) main::$3 ← ! (bool~) main::$2
|
||||
if((bool~) main::$3) goto main::@4
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte*) main::screen#2 ? phi( main::@2/(byte*) main::screen#3 )
|
||||
(byte) main::i#4 ? phi( main::@2/(byte) main::i#3 )
|
||||
*((byte*) main::screen#2) ? *((byte[]) main::str#0 + (byte) main::i#4)
|
||||
(byte*) main::screen#1 ? ++ (byte*) main::screen#2
|
||||
(byte*) main::screen#2 ← phi( main::@2/(byte*) main::screen#3 )
|
||||
(byte) main::i#4 ← phi( main::@2/(byte) main::i#3 )
|
||||
*((byte*) main::screen#2) ← *((byte[]) main::str#0 + (byte) main::i#4)
|
||||
(byte*) main::screen#1 ← ++ (byte*) main::screen#2
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@2 main::@4
|
||||
(byte*) main::screen#5 ? phi( main::@2/(byte*) main::screen#3 main::@4/(byte*) main::screen#1 )
|
||||
(byte) main::i#5 ? phi( main::@2/(byte) main::i#3 main::@4/(byte) main::i#4 )
|
||||
(byte) main::i#1 ? (byte) main::i#5 + rangenext(0,$ff)
|
||||
(bool~) main::$4 ? (byte) main::i#1 != rangelast(0,$ff)
|
||||
(byte*) main::screen#5 ← phi( main::@2/(byte*) main::screen#3 main::@4/(byte*) main::screen#1 )
|
||||
(byte) main::i#5 ← phi( main::@2/(byte) main::i#3 main::@4/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← (byte) main::i#5 + rangenext(0,$ff)
|
||||
(bool~) main::$4 ← (byte) main::i#1 != rangelast(0,$ff)
|
||||
if((bool~) main::$4) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@5
|
||||
@ -80,8 +80,8 @@ SYMBOL TABLE SSA
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Inversing boolean not [5] (bool~) main::$1 ? *((byte[]) main::str#0 + (byte) main::i#2) != (byte) '@' from [4] (bool~) main::$0 ? *((byte[]) main::str#0 + (byte) main::i#2) == (byte) '@'
|
||||
Inversing boolean not [9] (bool~) main::$3 ? *((byte[]) main::str#0 + (byte) main::i#3) != (byte) ' ' from [8] (bool~) main::$2 ? *((byte[]) main::str#0 + (byte) main::i#3) == (byte) ' '
|
||||
Inversing boolean not [5] (bool~) main::$1 ← *((byte[]) main::str#0 + (byte) main::i#2) != (byte) '@' from [4] (bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (byte) '@'
|
||||
Inversing boolean not [9] (bool~) main::$3 ← *((byte[]) main::str#0 + (byte) main::i#3) != (byte) ' ' from [8] (bool~) main::$2 ← *((byte[]) main::str#0 + (byte) main::i#3) == (byte) ' '
|
||||
Successful SSA optimization Pass2UnaryNotSimplification
|
||||
Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4
|
||||
Alias (byte*) main::screen#2 = (byte*) main::screen#3 (byte*) main::screen#4
|
||||
@ -96,7 +96,7 @@ Constant (const byte*) main::screen#0 = ((byte*))$400
|
||||
Constant (const byte[]) main::str#0 = main::$5
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Resolved ranged next value main::i#1 ? ++ main::i#2 to ++
|
||||
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
|
||||
Resolved ranged comparison value if(main::i#1!=rangelast(0,$ff)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Inlining constant with var siblings (const byte*) main::screen#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
@ -114,10 +114,10 @@ CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
Coalesced [9] main::screen#7 ? main::screen#2
|
||||
Coalesced [13] main::i#6 ? main::i#1
|
||||
Coalesced (already) [14] main::screen#6 ? main::screen#5
|
||||
Coalesced [17] main::screen#8 ? main::screen#1
|
||||
Coalesced [9] main::screen#7 ← main::screen#2
|
||||
Coalesced [13] main::i#6 ← main::i#1
|
||||
Coalesced (already) [14] main::screen#6 ← main::screen#5
|
||||
Coalesced [17] main::screen#8 ← main::screen#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) main::@12
|
||||
Culled Empty Block (label) main::@11
|
||||
@ -142,8 +142,8 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@4
|
||||
[5] (byte*) main::screen#2 ? phi( main/((byte*))(word/signed word/dword/signed dword) $400 main::@4/(byte*) main::screen#5 )
|
||||
[5] (byte) main::i#2 ? phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(byte) main::i#1 )
|
||||
[5] (byte*) main::screen#2 ← phi( main/((byte*))(word/signed word/dword/signed dword) $400 main::@4/(byte*) main::screen#5 )
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(byte) main::i#1 )
|
||||
[6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@4
|
||||
@ -153,13 +153,13 @@ main::@2: scope:[main] from main::@1
|
||||
[8] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) ' ') goto main::@3
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2 main::@3
|
||||
[9] (byte*) main::screen#5 ? phi( main::@2/(byte*) main::screen#2 main::@3/(byte*) main::screen#1 )
|
||||
[10] (byte) main::i#1 ? ++ (byte) main::i#2
|
||||
[9] (byte*) main::screen#5 ← phi( main::@2/(byte*) main::screen#2 main::@3/(byte*) main::screen#1 )
|
||||
[10] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||
[11] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@2
|
||||
[12] *((byte*) main::screen#2) ? *((const byte[]) main::str#0 + (byte) main::i#2)
|
||||
[13] (byte*) main::screen#1 ? ++ (byte*) main::screen#2
|
||||
[12] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2)
|
||||
[13] (byte*) main::screen#1 ← ++ (byte*) main::screen#2
|
||||
to:main::@4
|
||||
|
||||
|
||||
@ -254,7 +254,7 @@ main: {
|
||||
jmp b4
|
||||
//SEG25 main::@4
|
||||
b4:
|
||||
//SEG26 [10] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||
//SEG26 [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG27 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 -- vbuz1_neq_0_then_la1
|
||||
lda i
|
||||
@ -263,12 +263,12 @@ main: {
|
||||
jmp breturn
|
||||
//SEG28 main::@3
|
||||
b3:
|
||||
//SEG29 [12] *((byte*) main::screen#2) ? *((const byte[]) main::str#0 + (byte) main::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
|
||||
//SEG29 [12] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
|
||||
ldy i
|
||||
lda str,y
|
||||
ldy #0
|
||||
sta (screen),y
|
||||
//SEG30 [13] (byte*) main::screen#1 ? ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
||||
//SEG30 [13] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
||||
inc screen
|
||||
bne !+
|
||||
inc screen+1
|
||||
@ -281,11 +281,11 @@ REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [8] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) ' ') goto main::@3 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a
|
||||
Statement [12] *((byte*) main::screen#2) ? *((const byte[]) main::str#0 + (byte) main::i#2) [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [12] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2) [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [6] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a
|
||||
Statement [8] if(*((const byte[]) main::str#0 + (byte) main::i#2)!=(byte) ' ') goto main::@3 [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a
|
||||
Statement [12] *((byte*) main::screen#2) ? *((const byte[]) main::str#0 + (byte) main::i#2) [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [12] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2) [ main::i#2 main::screen#2 ] ( main:2 [ main::i#2 main::screen#2 ] ) always clobbers reg byte a reg byte y
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x ,
|
||||
Potential registers zp ZP_WORD:3 [ main::screen#2 main::screen#5 main::screen#1 ] : zp ZP_WORD:3 ,
|
||||
|
||||
@ -364,7 +364,7 @@ main: {
|
||||
jmp b4
|
||||
//SEG25 main::@4
|
||||
b4:
|
||||
//SEG26 [10] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
//SEG26 [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG27 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 -- vbuxx_neq_0_then_la1
|
||||
cpx #0
|
||||
@ -372,11 +372,11 @@ main: {
|
||||
jmp breturn
|
||||
//SEG28 main::@3
|
||||
b3:
|
||||
//SEG29 [12] *((byte*) main::screen#2) ? *((const byte[]) main::str#0 + (byte) main::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
||||
//SEG29 [12] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
||||
lda str,x
|
||||
ldy #0
|
||||
sta (screen),y
|
||||
//SEG30 [13] (byte*) main::screen#1 ? ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
||||
//SEG30 [13] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
||||
inc screen
|
||||
bne !+
|
||||
inc screen+1
|
||||
@ -491,7 +491,7 @@ main: {
|
||||
//SEG24 [9] phi (byte*) main::screen#5 = (byte*) main::screen#2 [phi:main::@2/main::@3->main::@4#0] -- register_copy
|
||||
//SEG25 main::@4
|
||||
b4:
|
||||
//SEG26 [10] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
//SEG26 [10] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG27 [11] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 -- vbuxx_neq_0_then_la1
|
||||
cpx #0
|
||||
@ -499,11 +499,11 @@ main: {
|
||||
rts
|
||||
//SEG28 main::@3
|
||||
b3:
|
||||
//SEG29 [12] *((byte*) main::screen#2) ? *((const byte[]) main::str#0 + (byte) main::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
||||
//SEG29 [12] *((byte*) main::screen#2) ← *((const byte[]) main::str#0 + (byte) main::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
|
||||
lda str,x
|
||||
ldy #0
|
||||
sta (screen),y
|
||||
//SEG30 [13] (byte*) main::screen#1 ? ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
||||
//SEG30 [13] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 -- pbuz1=_inc_pbuz1
|
||||
inc screen
|
||||
bne !+
|
||||
inc screen+1
|
||||
|
@ -1,42 +1,42 @@
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ? ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte*) main::line#0 ? ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte*) main::line#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@6
|
||||
(byte*) main::line#2 ? phi( main/(byte*) main::line#0 main::@6/(byte*) main::line#1 )
|
||||
(bool~) main::$0 ? *((byte*) main::line#2) == (byte) 'a'
|
||||
(bool~) main::$1 ? ! (bool~) main::$0
|
||||
(byte*) main::line#2 ← phi( main/(byte*) main::line#0 main::@6/(byte*) main::line#1 )
|
||||
(bool~) main::$0 ← *((byte*) main::line#2) == (byte) 'a'
|
||||
(bool~) main::$1 ← ! (bool~) main::$0
|
||||
if((bool~) main::$1) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte*) main::line#6 ? phi( main::@1/(byte*) main::line#2 )
|
||||
(byte) main::i#0 ? (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte*) main::line#6 ← phi( main::@1/(byte*) main::line#2 )
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2 main::@5
|
||||
(byte) main::i#2 ? phi( main::@2/(byte) main::i#0 main::@5/(byte) main::i#1 )
|
||||
(byte*) main::line#3 ? phi( main::@2/(byte*) main::line#6 main::@5/(byte*) main::line#4 )
|
||||
(bool~) main::$2 ? *((byte*) main::line#3 + (byte) main::i#2) == (byte) 'a'
|
||||
(bool~) main::$3 ? ! (bool~) main::$2
|
||||
(byte) main::i#2 ← phi( main::@2/(byte) main::i#0 main::@5/(byte) main::i#1 )
|
||||
(byte*) main::line#3 ← phi( main::@2/(byte*) main::line#6 main::@5/(byte*) main::line#4 )
|
||||
(bool~) main::$2 ← *((byte*) main::line#3 + (byte) main::i#2) == (byte) 'a'
|
||||
(bool~) main::$3 ← ! (bool~) main::$2
|
||||
if((bool~) main::$3) goto main::@5
|
||||
to:main::@6
|
||||
main::@5: scope:[main] from main::@4
|
||||
(byte) main::i#3 ? phi( main::@4/(byte) main::i#2 )
|
||||
(byte*) main::line#4 ? phi( main::@4/(byte*) main::line#3 )
|
||||
*((byte*) main::line#4 + (byte) main::i#3) ? (byte) 'a'
|
||||
(byte) main::i#1 ? (byte) main::i#3 + rangenext(0,$27)
|
||||
(bool~) main::$4 ? (byte) main::i#1 != rangelast(0,$27)
|
||||
(byte) main::i#3 ← phi( main::@4/(byte) main::i#2 )
|
||||
(byte*) main::line#4 ← phi( main::@4/(byte*) main::line#3 )
|
||||
*((byte*) main::line#4 + (byte) main::i#3) ← (byte) 'a'
|
||||
(byte) main::i#1 ← (byte) main::i#3 + rangenext(0,$27)
|
||||
(bool~) main::$4 ← (byte) main::i#1 != rangelast(0,$27)
|
||||
if((bool~) main::$4) goto main::@4
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@4 main::@5
|
||||
(byte*) main::line#5 ? phi( main::@4/(byte*) main::line#3 main::@5/(byte*) main::line#4 )
|
||||
(byte*) main::line#1 ? (byte*) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) $28
|
||||
(word/signed word/dword/signed dword~) main::$5 ? (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) $19
|
||||
(word/signed dword/dword/signed word~) main::$6 ? (word/signed word/dword/signed dword) $400 + (word/signed word/dword/signed dword~) main::$5
|
||||
(bool~) main::$7 ? (byte*) main::line#1 < (word/signed dword/dword/signed word~) main::$6
|
||||
(byte*) main::line#5 ← phi( main::@4/(byte*) main::line#3 main::@5/(byte*) main::line#4 )
|
||||
(byte*) main::line#1 ← (byte*) main::line#5 + (byte/signed byte/word/signed word/dword/signed dword) $28
|
||||
(word/signed word/dword/signed dword~) main::$5 ← (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) $19
|
||||
(word/signed dword/dword/signed word~) main::$6 ← (word/signed word/dword/signed dword) $400 + (word/signed word/dword/signed dword~) main::$5
|
||||
(bool~) main::$7 ← (byte*) main::line#1 < (word/signed dword/dword/signed word~) main::$6
|
||||
if((bool~) main::$7) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@6
|
||||
@ -87,8 +87,8 @@ SYMBOL TABLE SSA
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Inversing boolean not [4] (bool~) main::$1 ? *((byte*) main::line#2) != (byte) 'a' from [3] (bool~) main::$0 ? *((byte*) main::line#2) == (byte) 'a'
|
||||
Inversing boolean not [10] (bool~) main::$3 ? *((byte*) main::line#3 + (byte) main::i#2) != (byte) 'a' from [9] (bool~) main::$2 ? *((byte*) main::line#3 + (byte) main::i#2) == (byte) 'a'
|
||||
Inversing boolean not [4] (bool~) main::$1 ← *((byte*) main::line#2) != (byte) 'a' from [3] (bool~) main::$0 ← *((byte*) main::line#2) == (byte) 'a'
|
||||
Inversing boolean not [10] (bool~) main::$3 ← *((byte*) main::line#3 + (byte) main::i#2) != (byte) 'a' from [9] (bool~) main::$2 ← *((byte*) main::line#3 + (byte) main::i#2) == (byte) 'a'
|
||||
Successful SSA optimization Pass2UnaryNotSimplification
|
||||
Alias (byte*) main::line#2 = (byte*) main::line#6
|
||||
Alias (byte*) main::line#3 = (byte*) main::line#4
|
||||
@ -113,7 +113,7 @@ Successful SSA optimization Pass2ConstantIdentification
|
||||
Constant (const word/signed dword/dword/signed word) main::$6 = $400+main::$5
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Resolved ranged next value main::i#1 ? ++ main::i#2 to ++
|
||||
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
|
||||
Resolved ranged comparison value if(main::i#1!=rangelast(0,$27)) goto main::@4 to (byte/signed byte/word/signed word/dword/signed dword) $28
|
||||
Culled Empty Block (label) main::@2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
@ -134,8 +134,8 @@ CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [12] main::line#7 ? main::line#1
|
||||
Coalesced [16] main::i#4 ? main::i#1
|
||||
Coalesced [12] main::line#7 ← main::line#1
|
||||
Coalesced [16] main::i#4 ← main::i#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) main::@13
|
||||
Culled Empty Block (label) main::@14
|
||||
@ -161,23 +161,23 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@4
|
||||
[5] (byte*) main::line#2 ? phi( main/((byte*))(word/signed word/dword/signed dword) $400 main::@4/(byte*) main::line#1 )
|
||||
[5] (byte*) main::line#2 ← phi( main/((byte*))(word/signed word/dword/signed dword) $400 main::@4/(byte*) main::line#1 )
|
||||
[6] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@4
|
||||
[7] return
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
[8] (byte) main::i#2 ? phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(byte) main::i#1 )
|
||||
[8] (byte) main::i#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(byte) main::i#1 )
|
||||
[9] if(*((byte*) main::line#2 + (byte) main::i#2)!=(byte) 'a') goto main::@3
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2 main::@3
|
||||
[10] (byte*) main::line#1 ? (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
|
||||
[10] (byte*) main::line#1 ← (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
|
||||
[11] if((byte*) main::line#1<(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $19) goto main::@1
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main::@2
|
||||
[12] *((byte*) main::line#2 + (byte) main::i#2) ? (byte) 'a'
|
||||
[13] (byte) main::i#1 ? ++ (byte) main::i#2
|
||||
[12] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a'
|
||||
[13] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||
[14] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto main::@2
|
||||
to:main::@4
|
||||
|
||||
@ -273,7 +273,7 @@ main: {
|
||||
jmp b4
|
||||
//SEG25 main::@4
|
||||
b4:
|
||||
//SEG26 [10] (byte*) main::line#1 ? (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
|
||||
//SEG26 [10] (byte*) main::line#1 ← (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
|
||||
lda #$28
|
||||
clc
|
||||
adc line
|
||||
@ -293,11 +293,11 @@ main: {
|
||||
jmp breturn
|
||||
//SEG28 main::@3
|
||||
b3:
|
||||
//SEG29 [12] *((byte*) main::line#2 + (byte) main::i#2) ? (byte) 'a' -- pbuz1_derefidx_vbuz2=vbuc1
|
||||
//SEG29 [12] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuz2=vbuc1
|
||||
lda #'a'
|
||||
ldy i
|
||||
sta (line),y
|
||||
//SEG30 [13] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||
//SEG30 [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG31 [14] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
|
||||
lda #$28
|
||||
@ -310,14 +310,14 @@ REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [6] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@2 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [9] if(*((byte*) main::line#2 + (byte) main::i#2)!=(byte) 'a') goto main::@3 [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::i#2 main::i#1 ]
|
||||
Statement [10] (byte*) main::line#1 ? (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [10] (byte*) main::line#1 ← (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [11] if((byte*) main::line#1<(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $19) goto main::@1 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [12] *((byte*) main::line#2 + (byte) main::i#2) ? (byte) 'a' [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [12] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [6] if(*((byte*) main::line#2)!=(byte) 'a') goto main::@2 [ main::line#2 ] ( main:2 [ main::line#2 ] ) always clobbers reg byte a reg byte y
|
||||
Statement [9] if(*((byte*) main::line#2 + (byte) main::i#2)!=(byte) 'a') goto main::@3 [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [10] (byte*) main::line#1 ? (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [10] (byte*) main::line#1 ← (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [11] if((byte*) main::line#1<(word/signed word/dword/signed dword) $400+(byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $19) goto main::@1 [ main::line#1 ] ( main:2 [ main::line#1 ] ) always clobbers reg byte a
|
||||
Statement [12] *((byte*) main::line#2 + (byte) main::i#2) ? (byte) 'a' [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [12] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' [ main::line#2 main::i#2 ] ( main:2 [ main::line#2 main::i#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_WORD:2 [ main::line#2 main::line#1 ] : zp ZP_WORD:2 ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::i#2 main::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
|
||||
|
||||
@ -397,7 +397,7 @@ main: {
|
||||
jmp b4
|
||||
//SEG25 main::@4
|
||||
b4:
|
||||
//SEG26 [10] (byte*) main::line#1 ? (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
|
||||
//SEG26 [10] (byte*) main::line#1 ← (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
|
||||
lda #$28
|
||||
clc
|
||||
adc line
|
||||
@ -417,10 +417,10 @@ main: {
|
||||
jmp breturn
|
||||
//SEG28 main::@3
|
||||
b3:
|
||||
//SEG29 [12] *((byte*) main::line#2 + (byte) main::i#2) ? (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1
|
||||
//SEG29 [12] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1
|
||||
lda #'a'
|
||||
sta (line),y
|
||||
//SEG30 [13] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
|
||||
//SEG30 [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
//SEG31 [14] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto main::@2 -- vbuyy_neq_vbuc1_then_la1
|
||||
cpy #$28
|
||||
@ -537,7 +537,7 @@ main: {
|
||||
bne b3
|
||||
//SEG25 main::@4
|
||||
b4:
|
||||
//SEG26 [10] (byte*) main::line#1 ? (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
|
||||
//SEG26 [10] (byte*) main::line#1 ← (byte*) main::line#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
|
||||
lda #$28
|
||||
clc
|
||||
adc line
|
||||
@ -557,10 +557,10 @@ main: {
|
||||
rts
|
||||
//SEG28 main::@3
|
||||
b3:
|
||||
//SEG29 [12] *((byte*) main::line#2 + (byte) main::i#2) ? (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1
|
||||
//SEG29 [12] *((byte*) main::line#2 + (byte) main::i#2) ← (byte) 'a' -- pbuz1_derefidx_vbuyy=vbuc1
|
||||
lda #'a'
|
||||
sta (line),y
|
||||
//SEG30 [13] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
|
||||
//SEG30 [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
//SEG31 [14] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto main::@2 -- vbuyy_neq_vbuc1_then_la1
|
||||
cpy #$28
|
||||
|
@ -1,23 +1,23 @@
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ? ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte/word/signed word/dword/signed dword~) main::$0 ? (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) main::i#0 ? (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte/word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
(byte) main::i#2 ? phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(bool~) main::$1 ? *((byte*) SCREEN#0 + (byte) main::i#2) == (byte) 'a'
|
||||
(bool~) main::$2 ? ! (bool~) main::$1
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 )
|
||||
(bool~) main::$1 ← *((byte*) SCREEN#0 + (byte) main::i#2) == (byte) 'a'
|
||||
(bool~) main::$2 ← ! (bool~) main::$1
|
||||
if((bool~) main::$2) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::i#3 ? phi( main::@1/(byte) main::i#2 )
|
||||
*((byte*) SCREEN#0 + (byte) main::i#3) ? (byte) 'a'
|
||||
(byte) main::i#1 ? (byte) main::i#3 + rangenext(0,main::$0)
|
||||
(bool~) main::$3 ? (byte) main::i#1 != rangelast(0,main::$0)
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
*((byte*) SCREEN#0 + (byte) main::i#3) ← (byte) 'a'
|
||||
(byte) main::i#1 ← (byte) main::i#3 + rangenext(0,main::$0)
|
||||
(bool~) main::$3 ← (byte) main::i#1 != rangelast(0,main::$0)
|
||||
if((bool~) main::$3) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@2
|
||||
@ -53,7 +53,7 @@ SYMBOL TABLE SSA
|
||||
|
||||
Culled Empty Block (label) @2
|
||||
Successful SSA optimization Pass2CullEmptyBlocks
|
||||
Inversing boolean not [5] (bool~) main::$2 ? *((byte*) SCREEN#0 + (byte) main::i#2) != (byte) 'a' from [4] (bool~) main::$1 ? *((byte*) SCREEN#0 + (byte) main::i#2) == (byte) 'a'
|
||||
Inversing boolean not [5] (bool~) main::$2 ← *((byte*) SCREEN#0 + (byte) main::i#2) != (byte) 'a' from [4] (bool~) main::$1 ← *((byte*) SCREEN#0 + (byte) main::i#2) == (byte) 'a'
|
||||
Successful SSA optimization Pass2UnaryNotSimplification
|
||||
Alias (byte) main::i#2 = (byte) main::i#3
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
@ -64,7 +64,7 @@ Constant (const byte*) SCREEN#0 = ((byte*))$400
|
||||
Constant (const byte/word/signed word/dword/signed dword) main::$0 = $28*6
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Resolved ranged next value main::i#1 ? ++ main::i#2 to ++
|
||||
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
|
||||
Resolved ranged comparison value if(main::i#1!=rangelast(0,main::$0)) goto main::@1 to (const byte/word/signed word/dword/signed dword) main::$0+(byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
@ -79,7 +79,7 @@ CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Coalesced [11] main::i#4 ? main::i#1
|
||||
Coalesced [11] main::i#4 ← main::i#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) main::@7
|
||||
Adding NOP phi() at start of @begin
|
||||
@ -101,15 +101,15 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (byte) main::i#2 ? phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::i#1 )
|
||||
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::i#1 )
|
||||
[6] if(*((const byte*) SCREEN#0 + (byte) main::i#2)!=(byte) 'a') goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@2
|
||||
[7] return
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] *((const byte*) SCREEN#0 + (byte) main::i#2) ? (byte) 'a'
|
||||
[9] (byte) main::i#1 ? ++ (byte) main::i#2
|
||||
[8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'a'
|
||||
[9] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||
[10] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 6+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1
|
||||
to:main::@return
|
||||
|
||||
@ -179,11 +179,11 @@ main: {
|
||||
rts
|
||||
//SEG19 main::@2
|
||||
b2:
|
||||
//SEG20 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ? (byte) 'a' -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
//SEG20 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'a' -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
lda #'a'
|
||||
ldy i
|
||||
sta SCREEN,y
|
||||
//SEG21 [9] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||
//SEG21 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||
inc i
|
||||
//SEG22 [10] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 6+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
|
||||
lda #$28*6+1
|
||||
@ -195,9 +195,9 @@ main: {
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [6] if(*((const byte*) SCREEN#0 + (byte) main::i#2)!=(byte) 'a') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ? (byte) 'a' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'a' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [6] if(*((const byte*) SCREEN#0 + (byte) main::i#2)!=(byte) 'a') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ? (byte) 'a' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'a' [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
@ -256,10 +256,10 @@ main: {
|
||||
rts
|
||||
//SEG19 main::@2
|
||||
b2:
|
||||
//SEG20 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ? (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
//SEG20 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #'a'
|
||||
sta SCREEN,x
|
||||
//SEG21 [9] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
//SEG21 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG22 [10] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 6+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28*6+1
|
||||
@ -347,10 +347,10 @@ main: {
|
||||
rts
|
||||
//SEG19 main::@2
|
||||
b2:
|
||||
//SEG20 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ? (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
//SEG20 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) 'a' -- pbuc1_derefidx_vbuxx=vbuc2
|
||||
lda #'a'
|
||||
sta SCREEN,x
|
||||
//SEG21 [9] (byte) main::i#1 ? ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
//SEG21 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG22 [10] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 6+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #$28*6+1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,132 +1,132 @@
|
||||
Inlined call (byte~) vicSelectGfxBank::$0 ? call toDd00 (byte*) vicSelectGfxBank::gfx
|
||||
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) PROCPORT_DDR#0 ? ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) PROCPORT_DDR_MEMORY_MASK#0 ? (byte/signed byte/word/signed word/dword/signed dword) 7
|
||||
(byte*) PROCPORT#0 ? ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) PROCPORT_RAM_ALL#0 ? (byte/signed byte/word/signed word/dword/signed dword) $30
|
||||
(byte) PROCPORT_RAM_IO#0 ? (byte/signed byte/word/signed word/dword/signed dword) $35
|
||||
(byte) PROCPORT_RAM_CHARROM#0 ? (byte/signed byte/word/signed word/dword/signed dword) $31
|
||||
(byte) PROCPORT_KERNEL_IO#0 ? (byte/signed byte/word/signed word/dword/signed dword) $36
|
||||
(byte) PROCPORT_BASIC_KERNEL_IO#0 ? (byte/signed byte/word/signed word/dword/signed dword) $37
|
||||
(byte*) CHARGEN#0 ? ((byte*)) (word/dword/signed dword) $d000
|
||||
(word) SPRITE_PTRS#0 ? (word/signed word/dword/signed dword) $3f8
|
||||
(byte*) SPRITES_XPOS#0 ? ((byte*)) (word/dword/signed dword) $d000
|
||||
(byte*) SPRITES_YPOS#0 ? ((byte*)) (word/dword/signed dword) $d001
|
||||
(byte*) SPRITES_XMSB#0 ? ((byte*)) (word/dword/signed dword) $d010
|
||||
(byte*) RASTER#0 ? ((byte*)) (word/dword/signed dword) $d012
|
||||
(byte*) SPRITES_ENABLE#0 ? ((byte*)) (word/dword/signed dword) $d015
|
||||
(byte*) SPRITES_EXPAND_Y#0 ? ((byte*)) (word/dword/signed dword) $d017
|
||||
(byte*) SPRITES_PRIORITY#0 ? ((byte*)) (word/dword/signed dword) $d01b
|
||||
(byte*) SPRITES_MC#0 ? ((byte*)) (word/dword/signed dword) $d01c
|
||||
(byte*) SPRITES_EXPAND_X#0 ? ((byte*)) (word/dword/signed dword) $d01d
|
||||
(byte*) BORDERCOL#0 ? ((byte*)) (word/dword/signed dword) $d020
|
||||
(byte*) BGCOL#0 ? ((byte*)) (word/dword/signed dword) $d021
|
||||
(byte*) BGCOL1#0 ? ((byte*)) (word/dword/signed dword) $d021
|
||||
(byte*) BGCOL2#0 ? ((byte*)) (word/dword/signed dword) $d022
|
||||
(byte*) BGCOL3#0 ? ((byte*)) (word/dword/signed dword) $d023
|
||||
(byte*) BGCOL4#0 ? ((byte*)) (word/dword/signed dword) $d024
|
||||
(byte*) SPRITES_MC1#0 ? ((byte*)) (word/dword/signed dword) $d025
|
||||
(byte*) SPRITES_MC2#0 ? ((byte*)) (word/dword/signed dword) $d026
|
||||
(byte*) SPRITES_COLS#0 ? ((byte*)) (word/dword/signed dword) $d027
|
||||
(byte*) VIC_CONTROL#0 ? ((byte*)) (word/dword/signed dword) $d011
|
||||
(byte*) D011#0 ? ((byte*)) (word/dword/signed dword) $d011
|
||||
(byte) VIC_RST8#0 ? (byte/word/signed word/dword/signed dword) $80
|
||||
(byte) VIC_ECM#0 ? (byte/signed byte/word/signed word/dword/signed dword) $40
|
||||
(byte) VIC_BMM#0 ? (byte/signed byte/word/signed word/dword/signed dword) $20
|
||||
(byte) VIC_DEN#0 ? (byte/signed byte/word/signed word/dword/signed dword) $10
|
||||
(byte) VIC_RSEL#0 ? (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte*) VIC_CONTROL2#0 ? ((byte*)) (word/dword/signed dword) $d016
|
||||
(byte*) D016#0 ? ((byte*)) (word/dword/signed dword) $d016
|
||||
(byte) VIC_MCM#0 ? (byte/signed byte/word/signed word/dword/signed dword) $10
|
||||
(byte) VIC_CSEL#0 ? (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte*) D018#0 ? ((byte*)) (word/dword/signed dword) $d018
|
||||
(byte*) VIC_MEMORY#0 ? ((byte*)) (word/dword/signed dword) $d018
|
||||
(byte*) LIGHTPEN_X#0 ? ((byte*)) (word/dword/signed dword) $d013
|
||||
(byte*) LIGHTPEN_Y#0 ? ((byte*)) (word/dword/signed dword) $d014
|
||||
(byte*) IRQ_STATUS#0 ? ((byte*)) (word/dword/signed dword) $d019
|
||||
(byte*) IRQ_ENABLE#0 ? ((byte*)) (word/dword/signed dword) $d01a
|
||||
(byte) IRQ_RASTER#0 ? (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) IRQ_COLLISION_BG#0 ? (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) IRQ_COLLISION_SPRITE#0 ? (byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
(byte) IRQ_LIGHTPEN#0 ? (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte*) COLS#0 ? ((byte*)) (word/dword/signed dword) $d800
|
||||
(byte*) CIA1_PORT_A#0 ? ((byte*)) (word/dword/signed dword) $dc00
|
||||
(byte*) CIA1_PORT_B#0 ? ((byte*)) (word/dword/signed dword) $dc01
|
||||
(byte*) CIA1_PORT_A_DDR#0 ? ((byte*)) (word/dword/signed dword) $dc02
|
||||
(byte*) CIA1_PORT_B_DDR#0 ? ((byte*)) (word/dword/signed dword) $dc03
|
||||
(byte*) CIA1_INTERRUPT#0 ? ((byte*)) (word/dword/signed dword) $dc0d
|
||||
(byte) CIA_INTERRUPT_CLEAR#0 ? (byte/signed byte/word/signed word/dword/signed dword) $7f
|
||||
(byte*) CIA2_PORT_A#0 ? ((byte*)) (word/dword/signed dword) $dd00
|
||||
(byte*) CIA2_PORT_B#0 ? ((byte*)) (word/dword/signed dword) $dd01
|
||||
(byte*) CIA2_PORT_A_DDR#0 ? ((byte*)) (word/dword/signed dword) $dd02
|
||||
(byte*) CIA2_PORT_B_DDR#0 ? ((byte*)) (word/dword/signed dword) $dd03
|
||||
(byte*) CIA2_INTERRUPT#0 ? ((byte*)) (word/dword/signed dword) $dd0d
|
||||
(void()**) KERNEL_IRQ#0 ? ((void()**)) (word/signed word/dword/signed dword) $314
|
||||
(void()**) HARDWARE_IRQ#0 ? ((void()**)) (word/dword/signed dword) $fffe
|
||||
(byte) BLACK#0 ? (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) WHITE#0 ? (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) RED#0 ? (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) CYAN#0 ? (byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
(byte) PURPLE#0 ? (byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
(byte) GREEN#0 ? (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
(byte) BLUE#0 ? (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) YELLOW#0 ? (byte/signed byte/word/signed word/dword/signed dword) 7
|
||||
(byte) ORANGE#0 ? (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte) BROWN#0 ? (byte/signed byte/word/signed word/dword/signed dword) 9
|
||||
(byte) PINK#0 ? (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
(byte) DARK_GREY#0 ? (byte/signed byte/word/signed word/dword/signed dword) $b
|
||||
(byte) GREY#0 ? (byte/signed byte/word/signed word/dword/signed dword) $c
|
||||
(byte) LIGHT_GREEN#0 ? (byte/signed byte/word/signed word/dword/signed dword) $d
|
||||
(byte) LIGHT_BLUE#0 ? (byte/signed byte/word/signed word/dword/signed dword) $e
|
||||
(byte) LIGHT_GREY#0 ? (byte/signed byte/word/signed word/dword/signed dword) $f
|
||||
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
|
||||
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) $30
|
||||
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) $35
|
||||
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) $31
|
||||
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) $36
|
||||
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) $37
|
||||
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) $d000
|
||||
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) $3f8
|
||||
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) $d000
|
||||
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) $d001
|
||||
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) $d010
|
||||
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) $d012
|
||||
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) $d015
|
||||
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) $d017
|
||||
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) $d01b
|
||||
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) $d01c
|
||||
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) $d01d
|
||||
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) $d020
|
||||
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) $d021
|
||||
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) $d021
|
||||
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) $d022
|
||||
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) $d023
|
||||
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) $d024
|
||||
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) $d025
|
||||
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) $d026
|
||||
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) $d027
|
||||
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) $d011
|
||||
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) $d011
|
||||
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) $80
|
||||
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) $40
|
||||
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) $20
|
||||
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) $10
|
||||
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) $d016
|
||||
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) $d016
|
||||
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) $10
|
||||
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) $d018
|
||||
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) $d018
|
||||
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) $d013
|
||||
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) $d014
|
||||
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) $d019
|
||||
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) $d01a
|
||||
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) $d800
|
||||
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) $dc00
|
||||
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) $dc01
|
||||
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) $dc02
|
||||
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) $dc03
|
||||
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) $dc0d
|
||||
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) $7f
|
||||
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) $dd00
|
||||
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) $dd01
|
||||
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) $dd02
|
||||
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) $dd03
|
||||
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) $dd0d
|
||||
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) $314
|
||||
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) $fffe
|
||||
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
|
||||
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
|
||||
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
|
||||
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
|
||||
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) $b
|
||||
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) $c
|
||||
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) $d
|
||||
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) $e
|
||||
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) $f
|
||||
to:@6
|
||||
main: scope:[main] from @6
|
||||
(word) main::xpos#0 ? (byte/word/signed word/dword/signed dword) $c8
|
||||
(byte) main::s#0 ? (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
(word) main::xpos#0 ← (byte/word/signed word/dword/signed dword) $c8
|
||||
(byte) main::s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@3
|
||||
(word) main::xpos#2 ? phi( main/(word) main::xpos#0 main::@3/(word) main::xpos#1 )
|
||||
(byte) main::s#2 ? phi( main/(byte) main::s#0 main::@3/(byte) main::s#1 )
|
||||
(byte) position_sprite::spriteno#0 ? (byte) main::s#2
|
||||
(word) position_sprite::x#0 ? (word) main::xpos#2
|
||||
(byte) position_sprite::y#0 ? (byte/signed byte/word/signed word/dword/signed dword) $32
|
||||
(word) main::xpos#2 ← phi( main/(word) main::xpos#0 main::@3/(word) main::xpos#1 )
|
||||
(byte) main::s#2 ← phi( main/(byte) main::s#0 main::@3/(byte) main::s#1 )
|
||||
(byte) position_sprite::spriteno#0 ← (byte) main::s#2
|
||||
(word) position_sprite::x#0 ← (word) main::xpos#2
|
||||
(byte) position_sprite::y#0 ← (byte/signed byte/word/signed word/dword/signed dword) $32
|
||||
call position_sprite
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
(byte) main::s#3 ? phi( main::@1/(byte) main::s#2 )
|
||||
(word) main::xpos#3 ? phi( main::@1/(word) main::xpos#2 )
|
||||
(word) main::xpos#1 ? (word) main::xpos#3 + (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
(byte) main::s#1 ? (byte) main::s#3 + rangenext(0,7)
|
||||
(bool~) main::$1 ? (byte) main::s#1 != rangelast(0,7)
|
||||
(byte) main::s#3 ← phi( main::@1/(byte) main::s#2 )
|
||||
(word) main::xpos#3 ← phi( main::@1/(word) main::xpos#2 )
|
||||
(word) main::xpos#1 ← (word) main::xpos#3 + (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
(byte) main::s#1 ← (byte) main::s#3 + rangenext(0,7)
|
||||
(bool~) main::$1 ← (byte) main::s#1 != rangelast(0,7)
|
||||
if((bool~) main::$1) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
return
|
||||
to:@return
|
||||
position_sprite: scope:[position_sprite] from main::@1
|
||||
(word) position_sprite::x#1 ? phi( main::@1/(word) position_sprite::x#0 )
|
||||
(byte) position_sprite::y#1 ? phi( main::@1/(byte) position_sprite::y#0 )
|
||||
(byte) position_sprite::spriteno#1 ? phi( main::@1/(byte) position_sprite::spriteno#0 )
|
||||
(byte~) position_sprite::$0 ? (byte) position_sprite::spriteno#1 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
*((byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ? (byte) position_sprite::y#1
|
||||
(byte~) position_sprite::$1 ? (byte) position_sprite::spriteno#1 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte~) position_sprite::$2 ? < (word) position_sprite::x#1
|
||||
*((byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ? (byte~) position_sprite::$2
|
||||
(bool~) position_sprite::$3 ? (word) position_sprite::x#1 > (byte/word/signed word/dword/signed dword) $ff
|
||||
(word) position_sprite::x#1 ← phi( main::@1/(word) position_sprite::x#0 )
|
||||
(byte) position_sprite::y#1 ← phi( main::@1/(byte) position_sprite::y#0 )
|
||||
(byte) position_sprite::spriteno#1 ← phi( main::@1/(byte) position_sprite::spriteno#0 )
|
||||
(byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#1 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
*((byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (byte) position_sprite::y#1
|
||||
(byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#1 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
(byte~) position_sprite::$2 ← < (word) position_sprite::x#1
|
||||
*((byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ← (byte~) position_sprite::$2
|
||||
(bool~) position_sprite::$3 ← (word) position_sprite::x#1 > (byte/word/signed word/dword/signed dword) $ff
|
||||
if((bool~) position_sprite::$3) goto position_sprite::@1
|
||||
to:position_sprite::@3
|
||||
position_sprite::@1: scope:[position_sprite] from position_sprite
|
||||
(byte) position_sprite::spriteno#2 ? phi( position_sprite/(byte) position_sprite::spriteno#1 )
|
||||
(byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#2
|
||||
*((byte*) SPRITES_XMSB#0) ? *((byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6
|
||||
(byte) position_sprite::spriteno#2 ← phi( position_sprite/(byte) position_sprite::spriteno#1 )
|
||||
(byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#2
|
||||
*((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6
|
||||
to:position_sprite::@return
|
||||
position_sprite::@3: scope:[position_sprite] from position_sprite
|
||||
(byte) position_sprite::spriteno#3 ? phi( position_sprite/(byte) position_sprite::spriteno#1 )
|
||||
(byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#3
|
||||
(byte/word/dword~) position_sprite::$5 ? (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff
|
||||
*((byte*) SPRITES_XMSB#0) ? *((byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5
|
||||
(byte) position_sprite::spriteno#3 ← phi( position_sprite/(byte) position_sprite::spriteno#1 )
|
||||
(byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#3
|
||||
(byte/word/dword~) position_sprite::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff
|
||||
*((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5
|
||||
to:position_sprite::@return
|
||||
position_sprite::@return: scope:[position_sprite] from position_sprite::@1 position_sprite::@3
|
||||
return
|
||||
@ -436,7 +436,7 @@ Constant (const byte) main::s#0 = 0
|
||||
Constant (const byte) position_sprite::y#0 = $32
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Resolved ranged next value main::s#1 ? ++ main::s#2 to ++
|
||||
Resolved ranged next value main::s#1 ← ++ main::s#2 to ++
|
||||
Resolved ranged comparison value if(main::s#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
|
||||
Inlining constant with var siblings (const word) main::xpos#0
|
||||
Inlining constant with var siblings (const byte) main::s#0
|
||||
@ -453,8 +453,8 @@ Calls in [] to main:2
|
||||
Calls in [main] to position_sprite:8
|
||||
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [13] main::s#4 ? main::s#1
|
||||
Coalesced [14] main::xpos#4 ? main::xpos#1
|
||||
Coalesced [13] main::s#4 ← main::s#1
|
||||
Coalesced [14] main::xpos#4 ← main::xpos#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) main::@4
|
||||
Renumbering block @6 to @1
|
||||
@ -479,39 +479,39 @@ main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@2
|
||||
[5] (word) main::xpos#2 ? phi( main/(byte/word/signed word/dword/signed dword) $c8 main::@2/(word) main::xpos#1 )
|
||||
[5] (byte) main::s#2 ? phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::s#1 )
|
||||
[6] (byte) position_sprite::spriteno#0 ? (byte) main::s#2
|
||||
[7] (word) position_sprite::x#0 ? (word) main::xpos#2
|
||||
[5] (word) main::xpos#2 ← phi( main/(byte/word/signed word/dword/signed dword) $c8 main::@2/(word) main::xpos#1 )
|
||||
[5] (byte) main::s#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::s#1 )
|
||||
[6] (byte) position_sprite::spriteno#0 ← (byte) main::s#2
|
||||
[7] (word) position_sprite::x#0 ← (word) main::xpos#2
|
||||
[8] call position_sprite
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[9] (word) main::xpos#1 ? (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
[10] (byte) main::s#1 ? ++ (byte) main::s#2
|
||||
[9] (word) main::xpos#1 ← (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a
|
||||
[10] (byte) main::s#1 ← ++ (byte) main::s#2
|
||||
[11] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[12] return
|
||||
to:@return
|
||||
position_sprite: scope:[position_sprite] from main::@1
|
||||
[13] (byte~) position_sprite::$0 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ? (const byte) position_sprite::y#0
|
||||
[15] (byte~) position_sprite::$1 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[16] (byte~) position_sprite::$2 ? < (word) position_sprite::x#0
|
||||
[17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ? (byte~) position_sprite::$2
|
||||
[13] (byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (const byte) position_sprite::y#0
|
||||
[15] (byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
[16] (byte~) position_sprite::$2 ← < (word) position_sprite::x#0
|
||||
[17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ← (byte~) position_sprite::$2
|
||||
[18] if((word) position_sprite::x#0>(byte/word/signed word/dword/signed dword) $ff) goto position_sprite::@1
|
||||
to:position_sprite::@2
|
||||
position_sprite::@2: scope:[position_sprite] from position_sprite
|
||||
[19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0
|
||||
[20] (byte/word/dword~) position_sprite::$5 ? (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff
|
||||
[21] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5
|
||||
[19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0
|
||||
[20] (byte/word/dword~) position_sprite::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff
|
||||
[21] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5
|
||||
to:position_sprite::@return
|
||||
position_sprite::@return: scope:[position_sprite] from position_sprite::@1 position_sprite::@2
|
||||
[22] return
|
||||
to:@return
|
||||
position_sprite::@1: scope:[position_sprite] from position_sprite
|
||||
[23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0
|
||||
[24] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6
|
||||
[23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0
|
||||
[24] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6
|
||||
to:position_sprite::@return
|
||||
|
||||
|
||||
@ -697,10 +697,10 @@ main: {
|
||||
jmp b1
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [6] (byte) position_sprite::spriteno#0 ? (byte) main::s#2 -- vbuz1=vbuz2
|
||||
//SEG18 [6] (byte) position_sprite::spriteno#0 ← (byte) main::s#2 -- vbuz1=vbuz2
|
||||
lda s
|
||||
sta position_sprite.spriteno
|
||||
//SEG19 [7] (word) position_sprite::x#0 ? (word) main::xpos#2 -- vwuz1=vwuz2
|
||||
//SEG19 [7] (word) position_sprite::x#0 ← (word) main::xpos#2 -- vwuz1=vwuz2
|
||||
lda xpos
|
||||
sta position_sprite.x
|
||||
lda xpos+1
|
||||
@ -710,7 +710,7 @@ main: {
|
||||
jmp b2
|
||||
//SEG21 main::@2
|
||||
b2:
|
||||
//SEG22 [9] (word) main::xpos#1 ? (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vwuz1=vwuz1_plus_vbuc1
|
||||
//SEG22 [9] (word) main::xpos#1 ← (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vwuz1=vwuz1_plus_vbuc1
|
||||
lda #$a
|
||||
clc
|
||||
adc xpos
|
||||
@ -718,7 +718,7 @@ main: {
|
||||
bcc !+
|
||||
inc xpos+1
|
||||
!:
|
||||
//SEG23 [10] (byte) main::s#1 ? ++ (byte) main::s#2 -- vbuz1=_inc_vbuz1
|
||||
//SEG23 [10] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuz1=_inc_vbuz1
|
||||
inc s
|
||||
//SEG24 [11] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
|
||||
lda #8
|
||||
@ -742,22 +742,22 @@ position_sprite: {
|
||||
.label _6 = $d
|
||||
.label spriteno = 5
|
||||
.label x = 6
|
||||
//SEG28 [13] (byte~) position_sprite::$0 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
|
||||
//SEG28 [13] (byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
|
||||
lda spriteno
|
||||
asl
|
||||
sta _0
|
||||
//SEG29 [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ? (const byte) position_sprite::y#0 -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
//SEG29 [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (const byte) position_sprite::y#0 -- pbuc1_derefidx_vbuz1=vbuc2
|
||||
lda #y
|
||||
ldy _0
|
||||
sta SPRITES_YPOS,y
|
||||
//SEG30 [15] (byte~) position_sprite::$1 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
|
||||
//SEG30 [15] (byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
|
||||
lda spriteno
|
||||
asl
|
||||
sta _1
|
||||
//SEG31 [16] (byte~) position_sprite::$2 ? < (word) position_sprite::x#0 -- vbuz1=_lo_vwuz2
|
||||
//SEG31 [16] (byte~) position_sprite::$2 ← < (word) position_sprite::x#0 -- vbuz1=_lo_vwuz2
|
||||
lda x
|
||||
sta _2
|
||||
//SEG32 [17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ? (byte~) position_sprite::$2 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
//SEG32 [17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ← (byte~) position_sprite::$2 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda _2
|
||||
ldy _1
|
||||
sta SPRITES_XPOS,y
|
||||
@ -772,7 +772,7 @@ position_sprite: {
|
||||
jmp b2
|
||||
//SEG34 position_sprite::@2
|
||||
b2:
|
||||
//SEG35 [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuz1=vbuc1_rol_vbuz2
|
||||
//SEG35 [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuz1=vbuc1_rol_vbuz2
|
||||
lda #1
|
||||
ldy spriteno
|
||||
cpy #0
|
||||
@ -783,11 +783,11 @@ position_sprite: {
|
||||
bne !-
|
||||
!e:
|
||||
sta _4
|
||||
//SEG36 [20] (byte/word/dword~) position_sprite::$5 ? (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuz2_bxor_vbuc1
|
||||
//SEG36 [20] (byte/word/dword~) position_sprite::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff -- vbuz1=vbuz2_bxor_vbuc1
|
||||
lda _4
|
||||
eor #$ff
|
||||
sta _5
|
||||
//SEG37 [21] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1
|
||||
//SEG37 [21] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1
|
||||
lda SPRITES_XMSB
|
||||
and _5
|
||||
sta SPRITES_XMSB
|
||||
@ -798,7 +798,7 @@ position_sprite: {
|
||||
rts
|
||||
//SEG40 position_sprite::@1
|
||||
b1:
|
||||
//SEG41 [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuz1=vbuc1_rol_vbuz2
|
||||
//SEG41 [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuz1=vbuc1_rol_vbuz2
|
||||
lda #1
|
||||
ldy spriteno
|
||||
cpy #0
|
||||
@ -809,7 +809,7 @@ position_sprite: {
|
||||
bne !-
|
||||
!e:
|
||||
sta _6
|
||||
//SEG42 [24] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
|
||||
//SEG42 [24] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
|
||||
lda SPRITES_XMSB
|
||||
ora _6
|
||||
sta SPRITES_XMSB
|
||||
@ -817,33 +817,33 @@ position_sprite: {
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [7] (word) position_sprite::x#0 ? (word) main::xpos#2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Statement [7] (word) position_sprite::x#0 ← (word) main::xpos#2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::s#2 main::s#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ position_sprite::spriteno#0 ]
|
||||
Statement [9] (word) main::xpos#1 ? (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a [ main::s#2 main::xpos#1 ] ( main:2 [ main::s#2 main::xpos#1 ] ) always clobbers reg byte a
|
||||
Statement [13] (byte~) position_sprite::$0 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ) always clobbers reg byte a
|
||||
Statement [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ? (const byte) position_sprite::y#0 [ position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Statement [15] (byte~) position_sprite::$1 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ) always clobbers reg byte a
|
||||
Statement [16] (byte~) position_sprite::$2 ? < (word) position_sprite::x#0 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ) always clobbers reg byte a
|
||||
Statement [9] (word) main::xpos#1 ← (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a [ main::s#2 main::xpos#1 ] ( main:2 [ main::s#2 main::xpos#1 ] ) always clobbers reg byte a
|
||||
Statement [13] (byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ) always clobbers reg byte a
|
||||
Statement [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (const byte) position_sprite::y#0 [ position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Statement [15] (byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ) always clobbers reg byte a
|
||||
Statement [16] (byte~) position_sprite::$2 ← < (word) position_sprite::x#0 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ position_sprite::$1 ]
|
||||
Statement [18] if((word) position_sprite::x#0>(byte/word/signed word/dword/signed dword) $ff) goto position_sprite::@1 [ position_sprite::spriteno#0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 ] ) always clobbers reg byte a
|
||||
Statement [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$4 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$4 ] ) always clobbers reg byte a
|
||||
Statement [20] (byte/word/dword~) position_sprite::$5 ? (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff [ position_sprite::$5 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$5 ] ) always clobbers reg byte a
|
||||
Statement [21] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Statement [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$6 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$6 ] ) always clobbers reg byte a
|
||||
Statement [24] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Statement [7] (word) position_sprite::x#0 ? (word) main::xpos#2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Statement [9] (word) main::xpos#1 ? (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a [ main::s#2 main::xpos#1 ] ( main:2 [ main::s#2 main::xpos#1 ] ) always clobbers reg byte a
|
||||
Statement [13] (byte~) position_sprite::$0 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ) always clobbers reg byte a
|
||||
Statement [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ? (const byte) position_sprite::y#0 [ position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Statement [15] (byte~) position_sprite::$1 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ) always clobbers reg byte a
|
||||
Statement [16] (byte~) position_sprite::$2 ? < (word) position_sprite::x#0 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ) always clobbers reg byte a
|
||||
Statement [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$4 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$4 ] ) always clobbers reg byte a
|
||||
Statement [20] (byte/word/dword~) position_sprite::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff [ position_sprite::$5 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$5 ] ) always clobbers reg byte a
|
||||
Statement [21] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Statement [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$6 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$6 ] ) always clobbers reg byte a
|
||||
Statement [24] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Statement [7] (word) position_sprite::x#0 ← (word) main::xpos#2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Statement [9] (word) main::xpos#1 ← (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a [ main::s#2 main::xpos#1 ] ( main:2 [ main::s#2 main::xpos#1 ] ) always clobbers reg byte a
|
||||
Statement [13] (byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$0 ] ) always clobbers reg byte a
|
||||
Statement [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (const byte) position_sprite::y#0 [ position_sprite::spriteno#0 position_sprite::x#0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 ] ) always clobbers reg byte a
|
||||
Statement [15] (byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 ] ) always clobbers reg byte a
|
||||
Statement [16] (byte~) position_sprite::$2 ← < (word) position_sprite::x#0 [ position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 position_sprite::x#0 position_sprite::$1 position_sprite::$2 ] ) always clobbers reg byte a
|
||||
Statement [18] if((word) position_sprite::x#0>(byte/word/signed word/dword/signed dword) $ff) goto position_sprite::@1 [ position_sprite::spriteno#0 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::spriteno#0 ] ) always clobbers reg byte a
|
||||
Statement [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$4 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$4 ] ) always clobbers reg byte a
|
||||
Statement [20] (byte/word/dword~) position_sprite::$5 ? (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff [ position_sprite::$5 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$5 ] ) always clobbers reg byte a
|
||||
Statement [21] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Statement [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$6 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$6 ] ) always clobbers reg byte a
|
||||
Statement [24] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Statement [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$4 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$4 ] ) always clobbers reg byte a
|
||||
Statement [20] (byte/word/dword~) position_sprite::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff [ position_sprite::$5 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$5 ] ) always clobbers reg byte a
|
||||
Statement [21] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Statement [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 [ position_sprite::$6 ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 position_sprite::$6 ] ) always clobbers reg byte a
|
||||
Statement [24] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 [ ] ( main:2::position_sprite:8 [ main::s#2 main::xpos#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::s#2 main::s#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_WORD:3 [ main::xpos#2 main::xpos#1 ] : zp ZP_WORD:3 ,
|
||||
Potential registers zp ZP_BYTE:5 [ position_sprite::spriteno#0 ] : zp ZP_BYTE:5 , reg byte x , reg byte y ,
|
||||
@ -921,15 +921,15 @@ main: {
|
||||
jmp b1
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [6] (byte) position_sprite::spriteno#0 ? (byte) main::s#2 -- vbuz1=vbuxx
|
||||
//SEG18 [6] (byte) position_sprite::spriteno#0 ← (byte) main::s#2 -- vbuz1=vbuxx
|
||||
stx position_sprite.spriteno
|
||||
//SEG19 [7] (word) position_sprite::x#0 ? (word) main::xpos#2
|
||||
//SEG19 [7] (word) position_sprite::x#0 ← (word) main::xpos#2
|
||||
//SEG20 [8] call position_sprite
|
||||
jsr position_sprite
|
||||
jmp b2
|
||||
//SEG21 main::@2
|
||||
b2:
|
||||
//SEG22 [9] (word) main::xpos#1 ? (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vwuz1=vwuz1_plus_vbuc1
|
||||
//SEG22 [9] (word) main::xpos#1 ← (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vwuz1=vwuz1_plus_vbuc1
|
||||
lda #$a
|
||||
clc
|
||||
adc xpos
|
||||
@ -937,7 +937,7 @@ main: {
|
||||
bcc !+
|
||||
inc xpos+1
|
||||
!:
|
||||
//SEG23 [10] (byte) main::s#1 ? ++ (byte) main::s#2 -- vbuxx=_inc_vbuxx
|
||||
//SEG23 [10] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG24 [11] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #8
|
||||
@ -954,20 +954,20 @@ position_sprite: {
|
||||
.const y = $32
|
||||
.label spriteno = 4
|
||||
.label x = 2
|
||||
//SEG28 [13] (byte~) position_sprite::$0 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
|
||||
//SEG28 [13] (byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
|
||||
lda spriteno
|
||||
asl
|
||||
//SEG29 [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ? (const byte) position_sprite::y#0 -- pbuc1_derefidx_vbuaa=vbuc2
|
||||
//SEG29 [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (const byte) position_sprite::y#0 -- pbuc1_derefidx_vbuaa=vbuc2
|
||||
tay
|
||||
lda #y
|
||||
sta SPRITES_YPOS,y
|
||||
//SEG30 [15] (byte~) position_sprite::$1 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuz1_rol_1
|
||||
//SEG30 [15] (byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuz1_rol_1
|
||||
lda spriteno
|
||||
asl
|
||||
tay
|
||||
//SEG31 [16] (byte~) position_sprite::$2 ? < (word) position_sprite::x#0 -- vbuaa=_lo_vwuz1
|
||||
//SEG31 [16] (byte~) position_sprite::$2 ← < (word) position_sprite::x#0 -- vbuaa=_lo_vwuz1
|
||||
lda x
|
||||
//SEG32 [17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ? (byte~) position_sprite::$2 -- pbuc1_derefidx_vbuyy=vbuaa
|
||||
//SEG32 [17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ← (byte~) position_sprite::$2 -- pbuc1_derefidx_vbuyy=vbuaa
|
||||
sta SPRITES_XPOS,y
|
||||
//SEG33 [18] if((word) position_sprite::x#0>(byte/word/signed word/dword/signed dword) $ff) goto position_sprite::@1 -- vwuz1_gt_vbuc1_then_la1
|
||||
lda x+1
|
||||
@ -980,7 +980,7 @@ position_sprite: {
|
||||
jmp b2
|
||||
//SEG34 position_sprite::@2
|
||||
b2:
|
||||
//SEG35 [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
//SEG35 [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
lda #1
|
||||
ldy spriteno
|
||||
cpy #0
|
||||
@ -990,9 +990,9 @@ position_sprite: {
|
||||
dey
|
||||
bne !-
|
||||
!e:
|
||||
//SEG36 [20] (byte/word/dword~) position_sprite::$5 ? (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff -- vbuaa=vbuaa_bxor_vbuc1
|
||||
//SEG36 [20] (byte/word/dword~) position_sprite::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff -- vbuaa=vbuaa_bxor_vbuc1
|
||||
eor #$ff
|
||||
//SEG37 [21] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
|
||||
//SEG37 [21] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
|
||||
and SPRITES_XMSB
|
||||
sta SPRITES_XMSB
|
||||
jmp breturn
|
||||
@ -1002,7 +1002,7 @@ position_sprite: {
|
||||
rts
|
||||
//SEG40 position_sprite::@1
|
||||
b1:
|
||||
//SEG41 [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
//SEG41 [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
lda #1
|
||||
ldy spriteno
|
||||
cpy #0
|
||||
@ -1012,7 +1012,7 @@ position_sprite: {
|
||||
dey
|
||||
bne !-
|
||||
!e:
|
||||
//SEG42 [24] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 -- _deref_pbuc1=_deref_pbuc1_bor_vbuaa
|
||||
//SEG42 [24] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 -- _deref_pbuc1=_deref_pbuc1_bor_vbuaa
|
||||
ora SPRITES_XMSB
|
||||
sta SPRITES_XMSB
|
||||
jmp breturn
|
||||
@ -1212,13 +1212,13 @@ main: {
|
||||
//SEG16 [5] phi (byte) main::s#2 = (byte) main::s#1 [phi:main::@2->main::@1#1] -- register_copy
|
||||
//SEG17 main::@1
|
||||
b1:
|
||||
//SEG18 [6] (byte) position_sprite::spriteno#0 ? (byte) main::s#2 -- vbuz1=vbuxx
|
||||
//SEG18 [6] (byte) position_sprite::spriteno#0 ← (byte) main::s#2 -- vbuz1=vbuxx
|
||||
stx position_sprite.spriteno
|
||||
//SEG19 [7] (word) position_sprite::x#0 ? (word) main::xpos#2
|
||||
//SEG19 [7] (word) position_sprite::x#0 ← (word) main::xpos#2
|
||||
//SEG20 [8] call position_sprite
|
||||
jsr position_sprite
|
||||
//SEG21 main::@2
|
||||
//SEG22 [9] (word) main::xpos#1 ? (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vwuz1=vwuz1_plus_vbuc1
|
||||
//SEG22 [9] (word) main::xpos#1 ← (word) main::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $a -- vwuz1=vwuz1_plus_vbuc1
|
||||
lda #$a
|
||||
clc
|
||||
adc xpos
|
||||
@ -1226,7 +1226,7 @@ main: {
|
||||
bcc !+
|
||||
inc xpos+1
|
||||
!:
|
||||
//SEG23 [10] (byte) main::s#1 ? ++ (byte) main::s#2 -- vbuxx=_inc_vbuxx
|
||||
//SEG23 [10] (byte) main::s#1 ← ++ (byte) main::s#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG24 [11] if((byte) main::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1
|
||||
cpx #8
|
||||
@ -1241,20 +1241,20 @@ position_sprite: {
|
||||
.const y = $32
|
||||
.label spriteno = 4
|
||||
.label x = 2
|
||||
//SEG28 [13] (byte~) position_sprite::$0 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
|
||||
//SEG28 [13] (byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
|
||||
lda spriteno
|
||||
asl
|
||||
//SEG29 [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ? (const byte) position_sprite::y#0 -- pbuc1_derefidx_vbuaa=vbuc2
|
||||
//SEG29 [14] *((const byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (const byte) position_sprite::y#0 -- pbuc1_derefidx_vbuaa=vbuc2
|
||||
tay
|
||||
lda #y
|
||||
sta SPRITES_YPOS,y
|
||||
//SEG30 [15] (byte~) position_sprite::$1 ? (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuz1_rol_1
|
||||
//SEG30 [15] (byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuz1_rol_1
|
||||
lda spriteno
|
||||
asl
|
||||
tay
|
||||
//SEG31 [16] (byte~) position_sprite::$2 ? < (word) position_sprite::x#0 -- vbuaa=_lo_vwuz1
|
||||
//SEG31 [16] (byte~) position_sprite::$2 ← < (word) position_sprite::x#0 -- vbuaa=_lo_vwuz1
|
||||
lda x
|
||||
//SEG32 [17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ? (byte~) position_sprite::$2 -- pbuc1_derefidx_vbuyy=vbuaa
|
||||
//SEG32 [17] *((const byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ← (byte~) position_sprite::$2 -- pbuc1_derefidx_vbuyy=vbuaa
|
||||
sta SPRITES_XPOS,y
|
||||
//SEG33 [18] if((word) position_sprite::x#0>(byte/word/signed word/dword/signed dword) $ff) goto position_sprite::@1 -- vwuz1_gt_vbuc1_then_la1
|
||||
lda x+1
|
||||
@ -1265,7 +1265,7 @@ position_sprite: {
|
||||
bcs b1
|
||||
!:
|
||||
//SEG34 position_sprite::@2
|
||||
//SEG35 [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
//SEG35 [19] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
lda #1
|
||||
ldy spriteno
|
||||
cpy #0
|
||||
@ -1275,9 +1275,9 @@ position_sprite: {
|
||||
dey
|
||||
bne !-
|
||||
!e:
|
||||
//SEG36 [20] (byte/word/dword~) position_sprite::$5 ? (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff -- vbuaa=vbuaa_bxor_vbuc1
|
||||
//SEG36 [20] (byte/word/dword~) position_sprite::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4 ^ (byte/word/signed word/dword/signed dword) $ff -- vbuaa=vbuaa_bxor_vbuc1
|
||||
eor #$ff
|
||||
//SEG37 [21] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
|
||||
//SEG37 [21] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) position_sprite::$5 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
|
||||
and SPRITES_XMSB
|
||||
sta SPRITES_XMSB
|
||||
//SEG38 position_sprite::@return
|
||||
@ -1285,7 +1285,7 @@ position_sprite: {
|
||||
rts
|
||||
//SEG40 position_sprite::@1
|
||||
b1:
|
||||
//SEG41 [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ? (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
//SEG41 [23] (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 1 << (byte) position_sprite::spriteno#0 -- vbuaa=vbuc1_rol_vbuz1
|
||||
lda #1
|
||||
ldy spriteno
|
||||
cpy #0
|
||||
@ -1295,7 +1295,7 @@ position_sprite: {
|
||||
dey
|
||||
bne !-
|
||||
!e:
|
||||
//SEG42 [24] *((const byte*) SPRITES_XMSB#0) ? *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 -- _deref_pbuc1=_deref_pbuc1_bor_vbuaa
|
||||
//SEG42 [24] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$6 -- _deref_pbuc1=_deref_pbuc1_bor_vbuaa
|
||||
ora SPRITES_XMSB
|
||||
sta SPRITES_XMSB
|
||||
rts
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -6,24 +6,24 @@ CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte[]) main::bs#0 ? { (byte) 'c', (byte) 'm' }
|
||||
(byte) main::b#0 ? (byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
(word) main::w#0 ? { (byte) main::b#0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
|
||||
(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ? { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w#0
|
||||
(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 ? (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
|
||||
(word) main::w2#0 ? (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1
|
||||
(byte*) main::sc#0 ? ((byte*)) (word) main::w2#0
|
||||
*((byte*) main::sc#0) ? *((byte[]) main::bs#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
(byte*) main::pos#0 ? ((byte*)) (word/signed word/dword/signed dword) $501
|
||||
(byte*) main::bgcol#0 ? ((byte*)) (word/dword/signed dword) $d021
|
||||
(bool~) main::$2 ? *((byte*) main::pos#0) == (byte) 'm'
|
||||
(byte[]) main::bs#0 ← { (byte) 'c', (byte) 'm' }
|
||||
(byte) main::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
|
||||
(word) main::w#0 ← { (byte) main::b#0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
|
||||
(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1 } + (word) main::w#0
|
||||
(byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 + { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
|
||||
(word) main::w2#0 ← (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1
|
||||
(byte*) main::sc#0 ← ((byte*)) (word) main::w2#0
|
||||
*((byte*) main::sc#0) ← *((byte[]) main::bs#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
(byte*) main::pos#0 ← ((byte*)) (word/signed word/dword/signed dword) $501
|
||||
(byte*) main::bgcol#0 ← ((byte*)) (word/dword/signed dword) $d021
|
||||
(bool~) main::$2 ← *((byte*) main::pos#0) == (byte) 'm'
|
||||
if((bool~) main::$2) goto main::@1
|
||||
to:main::@3
|
||||
main::@1: scope:[main] from main
|
||||
*((byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
*((byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
to:main::@return
|
||||
main::@3: scope:[main] from main
|
||||
*((byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
*((byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@3
|
||||
return
|
||||
@ -75,15 +75,15 @@ Constant (const byte*) main::bgcol#0 = ((byte*))$d021
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Consolidated array index constant in *(main::bs#0+1)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Fixing inline constructor with main::$3 ? main::b#0 w= 0
|
||||
Fixing inline constructor with main::$4 ? 1 w= 1
|
||||
Fixing inline constructor with main::$5 ? 0 w= 0
|
||||
Fixing inline constructor with main::$3 ← main::b#0 w= 0
|
||||
Fixing inline constructor with main::$4 ← 1 w= 1
|
||||
Fixing inline constructor with main::$5 ← 0 w= 0
|
||||
Successful SSA optimization Pass2FixInlineConstructors
|
||||
Inferred type updated to word/signed word/dword/signed dword in (word~) main::$3 ? (const byte) main::b#0 w= (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Inferred type updated to word/signed word/dword/signed dword in (word~) main::$4 ? (byte/signed byte/word/signed word/dword/signed dword) 1 w= (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
Inferred type updated to word/signed dword/dword in [1] (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ? (word/signed word/dword/signed dword~) main::$4 + (word) main::w#0
|
||||
Inferred type updated to byte/signed byte/word/signed word/dword/signed dword in (word~) main::$5 ? (byte/signed byte/word/signed word/dword/signed dword) 0 w= (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Eliminating Noop Cast (byte*) main::sc#0 ? ((byte*)) (word) main::w2#0
|
||||
Inferred type updated to word/signed word/dword/signed dword in (word~) main::$3 ← (const byte) main::b#0 w= (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Inferred type updated to word/signed word/dword/signed dword in (word~) main::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 w= (byte/signed byte/word/signed word/dword/signed dword) 1
|
||||
Inferred type updated to word/signed dword/dword in [1] (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ← (word/signed word/dword/signed dword~) main::$4 + (word) main::w#0
|
||||
Inferred type updated to byte/signed byte/word/signed word/dword/signed dword in (word~) main::$5 ← (byte/signed byte/word/signed word/dword/signed dword) 0 w= (byte/signed byte/word/signed word/dword/signed dword) 0
|
||||
Eliminating Noop Cast (byte*) main::sc#0 ← ((byte*)) (word) main::w2#0
|
||||
Successful SSA optimization Pass2NopCastElimination
|
||||
Alias (word) main::w#0 = (word/signed word/dword/signed dword~) main::$3
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
@ -126,17 +126,17 @@ FINAL CONTROL FLOW GRAPH
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] *((byte*)(const word) main::w2#0) ? *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
[4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
|
||||
[5] if(*((const byte*) main::pos#0)==(byte) 'm') goto main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main
|
||||
[6] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
[6] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1 main::@2
|
||||
[7] return
|
||||
to:@return
|
||||
main::@1: scope:[main] from main
|
||||
[8] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
[8] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5
|
||||
to:main::@return
|
||||
|
||||
|
||||
@ -183,7 +183,7 @@ main: {
|
||||
.label bgcol = $d021
|
||||
.const w = b*$100
|
||||
.const w2 = 1*$100+1+w+0
|
||||
//SEG10 [4] *((byte*)(const word) main::w2#0) ? *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- _deref_pbuc1=_deref_pbuc2
|
||||
//SEG10 [4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- _deref_pbuc1=_deref_pbuc2
|
||||
// implicit cast to (byte*)
|
||||
lda bs+1
|
||||
sta w2
|
||||
@ -194,7 +194,7 @@ main: {
|
||||
jmp b2
|
||||
//SEG12 main::@2
|
||||
b2:
|
||||
//SEG13 [6] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
//SEG13 [6] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
lda #2
|
||||
sta bgcol
|
||||
jmp breturn
|
||||
@ -204,7 +204,7 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [8] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
//SEG17 [8] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
lda #5
|
||||
sta bgcol
|
||||
jmp breturn
|
||||
@ -212,10 +212,10 @@ main: {
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [4] *((byte*)(const word) main::w2#0) ? *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [5] if(*((const byte*) main::pos#0)==(byte) 'm') goto main::@1 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main]
|
||||
@ -254,7 +254,7 @@ main: {
|
||||
.label bgcol = $d021
|
||||
.const w = b*$100
|
||||
.const w2 = 1*$100+1+w+0
|
||||
//SEG10 [4] *((byte*)(const word) main::w2#0) ? *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- _deref_pbuc1=_deref_pbuc2
|
||||
//SEG10 [4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- _deref_pbuc1=_deref_pbuc2
|
||||
// implicit cast to (byte*)
|
||||
lda bs+1
|
||||
sta w2
|
||||
@ -265,7 +265,7 @@ main: {
|
||||
jmp b2
|
||||
//SEG12 main::@2
|
||||
b2:
|
||||
//SEG13 [6] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
//SEG13 [6] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
lda #2
|
||||
sta bgcol
|
||||
jmp breturn
|
||||
@ -275,7 +275,7 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [8] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
//SEG17 [8] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
lda #5
|
||||
sta bgcol
|
||||
jmp breturn
|
||||
@ -352,7 +352,7 @@ main: {
|
||||
.label bgcol = $d021
|
||||
.const w = b*$100
|
||||
.const w2 = 1*$100+1+w+0
|
||||
//SEG10 [4] *((byte*)(const word) main::w2#0) ? *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- _deref_pbuc1=_deref_pbuc2
|
||||
//SEG10 [4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- _deref_pbuc1=_deref_pbuc2
|
||||
// implicit cast to (byte*)
|
||||
lda bs+1
|
||||
sta w2
|
||||
@ -361,7 +361,7 @@ main: {
|
||||
cmp pos
|
||||
beq b1
|
||||
//SEG12 main::@2
|
||||
//SEG13 [6] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
//SEG13 [6] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
|
||||
lda #2
|
||||
sta bgcol
|
||||
//SEG14 main::@return
|
||||
@ -369,7 +369,7 @@ main: {
|
||||
rts
|
||||
//SEG16 main::@1
|
||||
b1:
|
||||
//SEG17 [8] *((const byte*) main::bgcol#0) ? (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
//SEG17 [8] *((const byte*) main::bgcol#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 -- _deref_pbuc1=vbuc2
|
||||
lda #5
|
||||
sta bgcol
|
||||
rts
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user