diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java
index 71acd7da5..47efa436d 100644
--- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java
+++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java
@@ -256,12 +256,6 @@ public class AsmFragment {
return null;
}
- //@Override
- //public Object visitAsmComment(KickCParser.AsmCommentContext ctx) {
- // program.addLine(new AsmComment(ctx.getChild(1).getText()));
- // return null;
- //}
-
@Override
public Object visitAsmInstruction(KickCParser.AsmInstructionContext ctx) {
KickCParser.AsmParamModeContext paramModeCtx = ctx.asmParamMode();
@@ -374,6 +368,11 @@ public class AsmFragment {
return new AsmParameter(param, isZp);
}
+ @Override
+ public Object visitAsmExprChar(KickCParser.AsmExprCharContext ctx) {
+ return new AsmParameter(ctx.getText(), true);
+ }
+
@Override
public AsmParameter visitAsmExprLabel(KickCParser.AsmExprLabelContext ctx) {
String param = ctx.NAME().getSymbol().getText();
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 b/src/main/java/dk/camelot64/kickc/parser/KickC.g4
index 00c8c71f0..85ed4ed77 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickC.g4
+++ b/src/main/java/dk/camelot64/kickc/parser/KickC.g4
@@ -21,7 +21,7 @@ stmt
| expr ';' #stmtExpr
| 'if' '(' expr ')' stmt ( 'else' stmt )? #stmtIfElse
| 'while' '(' expr ')' stmt #stmtWhile
- | 'do' stmt 'while' '(' expr ')' #stmtDoWhile
+ | 'do' stmt 'while' '(' expr ')' ';' #stmtDoWhile
| 'for' '(' forDeclaration? forIteration ')' stmt #stmtFor
| 'return' expr? ';' #stmtReturn
| 'asm' '{' asmLines '}' ';' #stmtAsm
@@ -124,6 +124,7 @@ asmExpr
| ASMREL #asmExprLabelRel
| '{' NAME '}' #asmExprReplace
| NUMBER #asmExprInt
+ | CHAR #asmExprChar
;
MNEMONIC:
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java
index 44364a66f..009b481f9 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java
@@ -719,6 +719,18 @@ public class KickCBaseListener implements KickCListener {
*
The default implementation does nothing.
*/
@Override public void exitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterAsmExprChar(KickCParser.AsmExprCharContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitAsmExprChar(KickCParser.AsmExprCharContext ctx) { }
/**
* {@inheritDoc}
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java
index 8d581c1fc..8e27c5dc8 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java
@@ -424,4 +424,11 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitAsmExprChar(KickCParser.AsmExprCharContext ctx) { return visitChildren(ctx); }
}
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java
index 7c6435194..c06adc5f8 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java
@@ -695,4 +695,16 @@ public interface KickCListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx);
+ /**
+ * Enter a parse tree produced by the {@code asmExprChar}
+ * labeled alternative in {@link KickCParser#asmExpr}.
+ * @param ctx the parse tree
+ */
+ void enterAsmExprChar(KickCParser.AsmExprCharContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code asmExprChar}
+ * labeled alternative in {@link KickCParser#asmExpr}.
+ * @param ctx the parse tree
+ */
+ void exitAsmExprChar(KickCParser.AsmExprCharContext ctx);
}
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
index 3ad627972..2e875c08b 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
@@ -517,7 +517,7 @@ public class KickCParser extends Parser {
enterRule(_localctx, 6, RULE_stmt);
int _la;
try {
- setState(128);
+ setState(129);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) {
case 1:
@@ -696,31 +696,33 @@ public class KickCParser extends Parser {
expr(0);
setState(106);
match(T__3);
+ setState(107);
+ match(T__6);
}
break;
case 9:
_localctx = new StmtForContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(108);
- match(T__11);
setState(109);
+ match(T__11);
+ setState(110);
match(T__2);
- setState(111);
+ setState(112);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==SIMPLETYPE || _la==NAME) {
{
- setState(110);
+ setState(111);
forDeclaration();
}
}
- setState(113);
- forIteration();
setState(114);
- match(T__3);
+ forIteration();
setState(115);
+ match(T__3);
+ setState(116);
stmt();
}
break;
@@ -728,19 +730,19 @@ public class KickCParser extends Parser {
_localctx = new StmtReturnContext(_localctx);
enterOuterAlt(_localctx, 10);
{
- setState(117);
+ setState(118);
match(T__12);
- setState(119);
+ setState(120);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__17) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(118);
+ setState(119);
expr(0);
}
}
- setState(121);
+ setState(122);
match(T__6);
}
break;
@@ -748,15 +750,15 @@ public class KickCParser extends Parser {
_localctx = new StmtAsmContext(_localctx);
enterOuterAlt(_localctx, 11);
{
- setState(122);
- match(T__13);
setState(123);
- match(T__0);
+ match(T__13);
setState(124);
- asmLines();
+ match(T__0);
setState(125);
- match(T__1);
+ asmLines();
setState(126);
+ match(T__1);
+ setState(127);
match(T__6);
}
break;
@@ -816,26 +818,26 @@ public class KickCParser extends Parser {
_localctx = new ForDeclContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(131);
+ setState(132);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==SIMPLETYPE) {
{
- setState(130);
+ setState(131);
typeDecl(0);
}
}
- setState(133);
+ setState(134);
match(NAME);
- setState(136);
+ setState(137);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(134);
- match(T__5);
setState(135);
+ match(T__5);
+ setState(136);
initializer();
}
}
@@ -914,25 +916,25 @@ public class KickCParser extends Parser {
enterRule(_localctx, 10, RULE_forIteration);
int _la;
try {
- setState(149);
+ setState(150);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__6:
_localctx = new ForClassicContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(138);
- match(T__6);
setState(139);
- expr(0);
- setState(140);
match(T__6);
- setState(142);
+ setState(140);
+ expr(0);
+ setState(141);
+ match(T__6);
+ setState(143);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__17) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(141);
+ setState(142);
expr(0);
}
}
@@ -943,15 +945,15 @@ public class KickCParser extends Parser {
_localctx = new ForRangeContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(144);
- match(T__14);
setState(145);
+ match(T__14);
+ setState(146);
expr(0);
{
- setState(146);
+ setState(147);
match(T__15);
}
- setState(147);
+ setState(148);
expr(0);
}
break;
@@ -1003,21 +1005,21 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(151);
+ setState(152);
parameterDecl();
- setState(156);
+ setState(157);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__16) {
{
{
- setState(152);
- match(T__16);
setState(153);
+ match(T__16);
+ setState(154);
parameterDecl();
}
}
- setState(158);
+ setState(159);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1064,9 +1066,9 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(159);
- typeDecl(0);
setState(160);
+ typeDecl(0);
+ setState(161);
match(NAME);
}
}
@@ -1172,11 +1174,11 @@ public class KickCParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(163);
+ setState(164);
match(SIMPLETYPE);
}
_ctx.stop = _input.LT(-1);
- setState(175);
+ setState(176);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,17,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -1184,16 +1186,16 @@ public class KickCParser extends Parser {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(173);
+ setState(174);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
case 1:
{
_localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_typeDecl);
- setState(165);
- if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
setState(166);
+ if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
+ setState(167);
match(T__17);
}
break;
@@ -1201,28 +1203,28 @@ public class KickCParser extends Parser {
{
_localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_typeDecl);
- setState(167);
- if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
setState(168);
+ if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+ setState(169);
match(T__18);
- setState(170);
+ setState(171);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__17) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(169);
+ setState(170);
expr(0);
}
}
- setState(172);
+ setState(173);
match(T__19);
}
break;
}
}
}
- setState(177);
+ setState(178);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,17,_ctx);
}
@@ -1297,7 +1299,7 @@ public class KickCParser extends Parser {
enterRule(_localctx, 18, RULE_initializer);
int _la;
try {
- setState(190);
+ setState(191);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__2:
@@ -1319,7 +1321,7 @@ public class KickCParser extends Parser {
_localctx = new InitExprContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(178);
+ setState(179);
expr(0);
}
break;
@@ -1327,27 +1329,27 @@ public class KickCParser extends Parser {
_localctx = new InitListContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(179);
- match(T__0);
setState(180);
+ match(T__0);
+ setState(181);
initializer();
- setState(185);
+ setState(186);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__16) {
{
{
- setState(181);
- match(T__16);
setState(182);
+ match(T__16);
+ setState(183);
initializer();
}
}
- setState(187);
+ setState(188);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(188);
+ setState(189);
match(T__1);
}
break;
@@ -1490,7 +1492,7 @@ public class KickCParser extends Parser {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(202);
+ setState(203);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__2:
@@ -1499,11 +1501,11 @@ public class KickCParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(193);
- match(T__2);
setState(194);
- lvalue(0);
+ match(T__2);
setState(195);
+ lvalue(0);
+ setState(196);
match(T__3);
}
break;
@@ -1512,7 +1514,7 @@ public class KickCParser extends Parser {
_localctx = new LvalueNameContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(197);
+ setState(198);
match(NAME);
}
break;
@@ -1521,9 +1523,9 @@ public class KickCParser extends Parser {
_localctx = new LvaluePtrContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(198);
- match(T__17);
setState(199);
+ match(T__17);
+ setState(200);
lvalue(3);
}
break;
@@ -1533,7 +1535,7 @@ public class KickCParser extends Parser {
_localctx = new LvalueLoHiContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(200);
+ setState(201);
_la = _input.LA(1);
if ( !(_la==T__20 || _la==T__21) ) {
_errHandler.recoverInline(this);
@@ -1543,7 +1545,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(201);
+ setState(202);
lvalue(2);
}
break;
@@ -1551,7 +1553,7 @@ public class KickCParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(211);
+ setState(212);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,21,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -1562,18 +1564,18 @@ public class KickCParser extends Parser {
{
_localctx = new LvalueArrayContext(new LvalueContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_lvalue);
- setState(204);
- if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
setState(205);
- match(T__18);
+ if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
setState(206);
- expr(0);
+ match(T__18);
setState(207);
+ expr(0);
+ setState(208);
match(T__19);
}
}
}
- setState(213);
+ setState(214);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,21,_ctx);
}
@@ -1865,7 +1867,7 @@ public class KickCParser extends Parser {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(239);
+ setState(240);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
case 1:
@@ -1874,11 +1876,11 @@ public class KickCParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(215);
- match(T__2);
setState(216);
- expr(0);
+ match(T__2);
setState(217);
+ expr(0);
+ setState(218);
match(T__3);
}
break;
@@ -1887,21 +1889,21 @@ public class KickCParser extends Parser {
_localctx = new ExprCallContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(219);
- match(NAME);
setState(220);
+ match(NAME);
+ setState(221);
match(T__2);
- setState(222);
+ setState(223);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__17) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(221);
+ setState(222);
parameterList();
}
}
- setState(224);
+ setState(225);
match(T__3);
}
break;
@@ -1910,13 +1912,13 @@ public class KickCParser extends Parser {
_localctx = new ExprCastContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(225);
- match(T__2);
setState(226);
- typeDecl(0);
+ match(T__2);
setState(227);
- match(T__3);
+ typeDecl(0);
setState(228);
+ match(T__3);
+ setState(229);
expr(19);
}
break;
@@ -1925,7 +1927,7 @@ public class KickCParser extends Parser {
_localctx = new ExprPreModContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(230);
+ setState(231);
_la = _input.LA(1);
if ( !(_la==T__22 || _la==T__23) ) {
_errHandler.recoverInline(this);
@@ -1935,7 +1937,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(231);
+ setState(232);
expr(17);
}
break;
@@ -1944,7 +1946,7 @@ public class KickCParser extends Parser {
_localctx = new ExprUnaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(232);
+ setState(233);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__17) | (1L << T__20) | (1L << T__21) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1954,7 +1956,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(233);
+ setState(234);
expr(15);
}
break;
@@ -1963,7 +1965,7 @@ public class KickCParser extends Parser {
_localctx = new ExprIdContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(234);
+ setState(235);
match(NAME);
}
break;
@@ -1972,7 +1974,7 @@ public class KickCParser extends Parser {
_localctx = new ExprNumberContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(235);
+ setState(236);
match(NUMBER);
}
break;
@@ -1981,7 +1983,7 @@ public class KickCParser extends Parser {
_localctx = new ExprStringContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(236);
+ setState(237);
match(STRING);
}
break;
@@ -1990,7 +1992,7 @@ public class KickCParser extends Parser {
_localctx = new ExprCharContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(237);
+ setState(238);
match(CHAR);
}
break;
@@ -1999,13 +2001,13 @@ public class KickCParser extends Parser {
_localctx = new ExprBoolContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(238);
+ setState(239);
match(BOOLEAN);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(277);
+ setState(278);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,25,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -2013,16 +2015,16 @@ public class KickCParser extends Parser {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(275);
+ setState(276);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
case 1:
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(241);
- if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
setState(242);
+ if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
+ setState(243);
_la = _input.LA(1);
if ( !(_la==T__29 || _la==T__30) ) {
_errHandler.recoverInline(this);
@@ -2032,7 +2034,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(243);
+ setState(244);
expr(15);
}
break;
@@ -2040,9 +2042,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(244);
- if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
setState(245);
+ if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
+ setState(246);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__17) | (1L << T__31) | (1L << T__32))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2052,7 +2054,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(246);
+ setState(247);
expr(14);
}
break;
@@ -2060,9 +2062,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(247);
- if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
setState(248);
+ if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
+ setState(249);
_la = _input.LA(1);
if ( !(_la==T__24 || _la==T__25) ) {
_errHandler.recoverInline(this);
@@ -2072,7 +2074,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(249);
+ setState(250);
expr(13);
}
break;
@@ -2080,9 +2082,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(250);
- if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
setState(251);
+ if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
+ setState(252);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__20) | (1L << T__21) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2092,7 +2094,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(252);
+ setState(253);
expr(12);
}
break;
@@ -2100,13 +2102,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(253);
+ setState(254);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
{
- setState(254);
+ setState(255);
match(T__27);
}
- setState(255);
+ setState(256);
expr(11);
}
break;
@@ -2114,13 +2116,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(256);
+ setState(257);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
{
- setState(257);
+ setState(258);
match(T__40);
}
- setState(258);
+ setState(259);
expr(10);
}
break;
@@ -2128,13 +2130,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(259);
+ setState(260);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
{
- setState(260);
+ setState(261);
match(T__41);
}
- setState(261);
+ setState(262);
expr(9);
}
break;
@@ -2142,13 +2144,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(262);
+ setState(263);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
{
- setState(263);
+ setState(264);
match(T__42);
}
- setState(264);
+ setState(265);
expr(8);
}
break;
@@ -2156,13 +2158,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(265);
+ setState(266);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
{
- setState(266);
+ setState(267);
match(T__43);
}
- setState(267);
+ setState(268);
expr(7);
}
break;
@@ -2170,13 +2172,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(268);
- if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
setState(269);
- match(T__18);
+ if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
setState(270);
- expr(0);
+ match(T__18);
setState(271);
+ expr(0);
+ setState(272);
match(T__19);
}
break;
@@ -2184,9 +2186,9 @@ public class KickCParser extends Parser {
{
_localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(273);
- if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
setState(274);
+ if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
+ setState(275);
_la = _input.LA(1);
if ( !(_la==T__22 || _la==T__23) ) {
_errHandler.recoverInline(this);
@@ -2201,7 +2203,7 @@ public class KickCParser extends Parser {
}
}
}
- setState(279);
+ setState(280);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,25,_ctx);
}
@@ -2251,21 +2253,21 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(280);
+ setState(281);
expr(0);
- setState(285);
+ setState(286);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__16) {
{
{
- setState(281);
- match(T__16);
setState(282);
+ match(T__16);
+ setState(283);
expr(0);
}
}
- setState(287);
+ setState(288);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2315,19 +2317,19 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(288);
+ setState(289);
asmLine();
- setState(292);
+ setState(293);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__26) | (1L << MNEMONIC) | (1L << NAME))) != 0)) {
{
{
- setState(289);
+ setState(290);
asmLine();
}
}
- setState(294);
+ setState(295);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2374,21 +2376,21 @@ public class KickCParser extends Parser {
AsmLineContext _localctx = new AsmLineContext(_ctx, getState());
enterRule(_localctx, 28, RULE_asmLine);
try {
- setState(297);
+ setState(298);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__26:
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(295);
+ setState(296);
asmLabel();
}
break;
case MNEMONIC:
enterOuterAlt(_localctx, 2);
{
- setState(296);
+ setState(297);
asmInstruction();
}
break;
@@ -2432,24 +2434,24 @@ public class KickCParser extends Parser {
AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState());
enterRule(_localctx, 30, RULE_asmLabel);
try {
- setState(303);
+ setState(304);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(299);
- match(NAME);
setState(300);
+ match(NAME);
+ setState(301);
match(T__14);
}
break;
case T__26:
enterOuterAlt(_localctx, 2);
{
- setState(301);
- match(T__26);
setState(302);
+ match(T__26);
+ setState(303);
match(T__14);
}
break;
@@ -2498,14 +2500,14 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(305);
+ setState(306);
match(MNEMONIC);
- setState(307);
+ setState(308);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
case 1:
{
- setState(306);
+ setState(307);
asmParamMode();
}
break;
@@ -2656,14 +2658,14 @@ public class KickCParser extends Parser {
AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState());
enterRule(_localctx, 34, RULE_asmParamMode);
try {
- setState(332);
+ setState(333);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) {
case 1:
_localctx = new AsmModeAbsContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(309);
+ setState(310);
asmExpr(0);
}
break;
@@ -2671,9 +2673,9 @@ public class KickCParser extends Parser {
_localctx = new AsmModeImmContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(310);
- match(T__44);
setState(311);
+ match(T__44);
+ setState(312);
asmExpr(0);
}
break;
@@ -2681,11 +2683,11 @@ public class KickCParser extends Parser {
_localctx = new AsmModeAbsXYContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(312);
- asmExpr(0);
setState(313);
- match(T__16);
+ asmExpr(0);
setState(314);
+ match(T__16);
+ setState(315);
match(NAME);
}
break;
@@ -2693,15 +2695,15 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIndIdxXYContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(316);
- match(T__2);
setState(317);
- asmExpr(0);
+ match(T__2);
setState(318);
- match(T__3);
+ asmExpr(0);
setState(319);
- match(T__16);
+ match(T__3);
setState(320);
+ match(T__16);
+ setState(321);
match(NAME);
}
break;
@@ -2709,15 +2711,15 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIdxIndXYContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(322);
- match(T__2);
setState(323);
- asmExpr(0);
+ match(T__2);
setState(324);
- match(T__16);
+ asmExpr(0);
setState(325);
- match(NAME);
+ match(T__16);
setState(326);
+ match(NAME);
+ setState(327);
match(T__3);
}
break;
@@ -2725,11 +2727,11 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIndContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(328);
- match(T__2);
setState(329);
- asmExpr(0);
+ match(T__2);
setState(330);
+ asmExpr(0);
+ setState(331);
match(T__3);
}
break;
@@ -2866,6 +2868,23 @@ public class KickCParser extends Parser {
else return visitor.visitChildren(this);
}
}
+ public static class AsmExprCharContext extends AsmExprContext {
+ public TerminalNode CHAR() { return getToken(KickCParser.CHAR, 0); }
+ public AsmExprCharContext(AsmExprContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).enterAsmExprChar(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).exitAsmExprChar(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)visitor).visitAsmExprChar(this);
+ else return visitor.visitChildren(this);
+ }
+ }
public final AsmExprContext asmExpr() throws RecognitionException {
return asmExpr(0);
@@ -2883,7 +2902,7 @@ public class KickCParser extends Parser {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(343);
+ setState(345);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__20:
@@ -2895,7 +2914,7 @@ public class KickCParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(335);
+ setState(336);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__20) | (1L << T__21) | (1L << T__24) | (1L << T__25))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2905,8 +2924,8 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(336);
- asmExpr(7);
+ setState(337);
+ asmExpr(8);
}
break;
case NAME:
@@ -2914,7 +2933,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprLabelContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(337);
+ setState(338);
match(NAME);
}
break;
@@ -2923,7 +2942,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprLabelRelContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(338);
+ setState(339);
match(ASMREL);
}
break;
@@ -2932,11 +2951,11 @@ public class KickCParser extends Parser {
_localctx = new AsmExprReplaceContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(339);
- match(T__0);
setState(340);
- match(NAME);
+ match(T__0);
setState(341);
+ match(NAME);
+ setState(342);
match(T__1);
}
break;
@@ -2945,15 +2964,24 @@ public class KickCParser extends Parser {
_localctx = new AsmExprIntContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(342);
+ setState(343);
match(NUMBER);
}
break;
+ case CHAR:
+ {
+ _localctx = new AsmExprCharContext(_localctx);
+ _ctx = _localctx;
+ _prevctx = _localctx;
+ setState(344);
+ match(CHAR);
+ }
+ break;
default:
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(353);
+ setState(355);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,34,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -2961,16 +2989,16 @@ public class KickCParser extends Parser {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(351);
+ setState(353);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) {
case 1:
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(345);
- if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(346);
+ setState(347);
+ if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
+ setState(348);
_la = _input.LA(1);
if ( !(_la==T__17 || _la==T__31) ) {
_errHandler.recoverInline(this);
@@ -2980,17 +3008,17 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(347);
- asmExpr(7);
+ setState(349);
+ asmExpr(8);
}
break;
case 2:
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(348);
- if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(349);
+ setState(350);
+ if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
+ setState(351);
_la = _input.LA(1);
if ( !(_la==T__24 || _la==T__25) ) {
_errHandler.recoverInline(this);
@@ -3000,14 +3028,14 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(350);
- asmExpr(6);
+ setState(352);
+ asmExpr(7);
}
break;
}
}
}
- setState(355);
+ setState(357);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,34,_ctx);
}
@@ -3083,147 +3111,148 @@ public class KickCParser extends Parser {
private boolean asmExpr_sempred(AsmExprContext _localctx, int predIndex) {
switch (predIndex) {
case 14:
- return precpred(_ctx, 6);
+ return precpred(_ctx, 7);
case 15:
- return precpred(_ctx, 5);
+ return precpred(_ctx, 6);
}
return true;
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3B\u0167\4\2\t\2\4"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3B\u0169\4\2\t\2\4"+
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\3\2\3\2\3\2\3\3\3\3\3\3\3\4\6\4\60\n\4\r\4\16\4\61"+
"\3\5\3\5\5\5\66\n\5\3\5\3\5\3\5\3\5\3\5\5\5=\n\5\3\5\3\5\3\5\5\5B\n\5"+
"\3\5\3\5\3\5\5\5G\n\5\3\5\3\5\3\5\3\5\5\5M\n\5\3\5\3\5\3\5\3\5\3\5\3\5"+
"\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5`\n\5\3\5\3\5\3\5\3\5"+
- "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5r\n\5\3\5\3\5\3\5"+
- "\3\5\3\5\3\5\5\5z\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5\u0083\n\5\3\6\5"+
- "\6\u0086\n\6\3\6\3\6\3\6\5\6\u008b\n\6\3\7\3\7\3\7\3\7\5\7\u0091\n\7\3"+
- "\7\3\7\3\7\3\7\3\7\5\7\u0098\n\7\3\b\3\b\3\b\7\b\u009d\n\b\f\b\16\b\u00a0"+
- "\13\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\n\u00ad\n\n\3\n\7"+
- "\n\u00b0\n\n\f\n\16\n\u00b3\13\n\3\13\3\13\3\13\3\13\3\13\7\13\u00ba\n"+
- "\13\f\13\16\13\u00bd\13\13\3\13\3\13\5\13\u00c1\n\13\3\f\3\f\3\f\3\f\3"+
- "\f\3\f\3\f\3\f\3\f\3\f\5\f\u00cd\n\f\3\f\3\f\3\f\3\f\3\f\7\f\u00d4\n\f"+
- "\f\f\16\f\u00d7\13\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u00e1\n\r\3\r"+
- "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u00f2\n\r"+
- "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
- "\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\7\r"+
- "\u0116\n\r\f\r\16\r\u0119\13\r\3\16\3\16\3\16\7\16\u011e\n\16\f\16\16"+
- "\16\u0121\13\16\3\17\3\17\7\17\u0125\n\17\f\17\16\17\u0128\13\17\3\20"+
- "\3\20\5\20\u012c\n\20\3\21\3\21\3\21\3\21\5\21\u0132\n\21\3\22\3\22\5"+
- "\22\u0136\n\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+
- "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u014f"+
- "\n\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u015a\n\24\3\24"+
- "\3\24\3\24\3\24\3\24\3\24\7\24\u0162\n\24\f\24\16\24\u0165\13\24\3\24"+
- "\2\6\22\26\30&\25\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&\2\13\3\2"+
- "\27\30\3\2\31\32\5\2\24\24\27\30\33\37\3\2 !\4\2\24\24\"#\3\2\33\34\4"+
- "\2\27\30$*\4\2\27\30\33\34\4\2\24\24\"\"\2\u0199\2(\3\2\2\2\4+\3\2\2\2"+
- "\6/\3\2\2\2\b\u0082\3\2\2\2\n\u0085\3\2\2\2\f\u0097\3\2\2\2\16\u0099\3"+
- "\2\2\2\20\u00a1\3\2\2\2\22\u00a4\3\2\2\2\24\u00c0\3\2\2\2\26\u00cc\3\2"+
- "\2\2\30\u00f1\3\2\2\2\32\u011a\3\2\2\2\34\u0122\3\2\2\2\36\u012b\3\2\2"+
- "\2 \u0131\3\2\2\2\"\u0133\3\2\2\2$\u014e\3\2\2\2&\u0159\3\2\2\2()\5\6"+
- "\4\2)*\7\2\2\3*\3\3\2\2\2+,\5\34\17\2,-\7\2\2\3-\5\3\2\2\2.\60\5\b\5\2"+
- "/.\3\2\2\2\60\61\3\2\2\2\61/\3\2\2\2\61\62\3\2\2\2\62\7\3\2\2\2\63\65"+
- "\7\3\2\2\64\66\5\6\4\2\65\64\3\2\2\2\65\66\3\2\2\2\66\67\3\2\2\2\67\u0083"+
+ "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5s\n\5\3\5\3\5"+
+ "\3\5\3\5\3\5\3\5\5\5{\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5\u0084\n\5\3"+
+ "\6\5\6\u0087\n\6\3\6\3\6\3\6\5\6\u008c\n\6\3\7\3\7\3\7\3\7\5\7\u0092\n"+
+ "\7\3\7\3\7\3\7\3\7\3\7\5\7\u0099\n\7\3\b\3\b\3\b\7\b\u009e\n\b\f\b\16"+
+ "\b\u00a1\13\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\n\u00ae\n"+
+ "\n\3\n\7\n\u00b1\n\n\f\n\16\n\u00b4\13\n\3\13\3\13\3\13\3\13\3\13\7\13"+
+ "\u00bb\n\13\f\13\16\13\u00be\13\13\3\13\3\13\5\13\u00c2\n\13\3\f\3\f\3"+
+ "\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u00ce\n\f\3\f\3\f\3\f\3\f\3\f\7\f\u00d5"+
+ "\n\f\f\f\16\f\u00d8\13\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u00e2\n\r"+
+ "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u00f3"+
+ "\n\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
+ "\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
+ "\7\r\u0117\n\r\f\r\16\r\u011a\13\r\3\16\3\16\3\16\7\16\u011f\n\16\f\16"+
+ "\16\16\u0122\13\16\3\17\3\17\7\17\u0126\n\17\f\17\16\17\u0129\13\17\3"+
+ "\20\3\20\5\20\u012d\n\20\3\21\3\21\3\21\3\21\5\21\u0133\n\21\3\22\3\22"+
+ "\5\22\u0137\n\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+
+ "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u0150"+
+ "\n\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u015c\n\24"+
+ "\3\24\3\24\3\24\3\24\3\24\3\24\7\24\u0164\n\24\f\24\16\24\u0167\13\24"+
+ "\3\24\2\6\22\26\30&\25\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&\2\13"+
+ "\3\2\27\30\3\2\31\32\5\2\24\24\27\30\33\37\3\2 !\4\2\24\24\"#\3\2\33\34"+
+ "\4\2\27\30$*\4\2\27\30\33\34\4\2\24\24\"\"\2\u019c\2(\3\2\2\2\4+\3\2\2"+
+ "\2\6/\3\2\2\2\b\u0083\3\2\2\2\n\u0086\3\2\2\2\f\u0098\3\2\2\2\16\u009a"+
+ "\3\2\2\2\20\u00a2\3\2\2\2\22\u00a5\3\2\2\2\24\u00c1\3\2\2\2\26\u00cd\3"+
+ "\2\2\2\30\u00f2\3\2\2\2\32\u011b\3\2\2\2\34\u0123\3\2\2\2\36\u012c\3\2"+
+ "\2\2 \u0132\3\2\2\2\"\u0134\3\2\2\2$\u014f\3\2\2\2&\u015b\3\2\2\2()\5"+
+ "\6\4\2)*\7\2\2\3*\3\3\2\2\2+,\5\34\17\2,-\7\2\2\3-\5\3\2\2\2.\60\5\b\5"+
+ "\2/.\3\2\2\2\60\61\3\2\2\2\61/\3\2\2\2\61\62\3\2\2\2\62\7\3\2\2\2\63\65"+
+ "\7\3\2\2\64\66\5\6\4\2\65\64\3\2\2\2\65\66\3\2\2\2\66\67\3\2\2\2\67\u0084"+
"\7\4\2\289\5\22\n\29:\7>\2\2:<\7\5\2\2;=\5\16\b\2<;\3\2\2\2<=\3\2\2\2"+
"=>\3\2\2\2>?\7\6\2\2?A\7\3\2\2@B\5\6\4\2A@\3\2\2\2AB\3\2\2\2BC\3\2\2\2"+
- "CD\7\4\2\2D\u0083\3\2\2\2EG\7\7\2\2FE\3\2\2\2FG\3\2\2\2GH\3\2\2\2HI\5"+
+ "CD\7\4\2\2D\u0084\3\2\2\2EG\7\7\2\2FE\3\2\2\2FG\3\2\2\2GH\3\2\2\2HI\5"+
"\22\n\2IL\7>\2\2JK\7\b\2\2KM\5\24\13\2LJ\3\2\2\2LM\3\2\2\2MN\3\2\2\2N"+
- "O\7\t\2\2O\u0083\3\2\2\2PQ\5\26\f\2QR\7\b\2\2RS\5\30\r\2ST\7\t\2\2T\u0083"+
- "\3\2\2\2UV\5\30\r\2VW\7\t\2\2W\u0083\3\2\2\2XY\7\n\2\2YZ\7\5\2\2Z[\5\30"+
- "\r\2[\\\7\6\2\2\\_\5\b\5\2]^\7\13\2\2^`\5\b\5\2_]\3\2\2\2_`\3\2\2\2`\u0083"+
- "\3\2\2\2ab\7\f\2\2bc\7\5\2\2cd\5\30\r\2de\7\6\2\2ef\5\b\5\2f\u0083\3\2"+
- "\2\2gh\7\r\2\2hi\5\b\5\2ij\7\f\2\2jk\7\5\2\2kl\5\30\r\2lm\7\6\2\2m\u0083"+
- "\3\2\2\2no\7\16\2\2oq\7\5\2\2pr\5\n\6\2qp\3\2\2\2qr\3\2\2\2rs\3\2\2\2"+
- "st\5\f\7\2tu\7\6\2\2uv\5\b\5\2v\u0083\3\2\2\2wy\7\17\2\2xz\5\30\r\2yx"+
- "\3\2\2\2yz\3\2\2\2z{\3\2\2\2{\u0083\7\t\2\2|}\7\20\2\2}~\7\3\2\2~\177"+
- "\5\34\17\2\177\u0080\7\4\2\2\u0080\u0081\7\t\2\2\u0081\u0083\3\2\2\2\u0082"+
- "\63\3\2\2\2\u00828\3\2\2\2\u0082F\3\2\2\2\u0082P\3\2\2\2\u0082U\3\2\2"+
- "\2\u0082X\3\2\2\2\u0082a\3\2\2\2\u0082g\3\2\2\2\u0082n\3\2\2\2\u0082w"+
- "\3\2\2\2\u0082|\3\2\2\2\u0083\t\3\2\2\2\u0084\u0086\5\22\n\2\u0085\u0084"+
- "\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u008a\7>\2\2\u0088"+
- "\u0089\7\b\2\2\u0089\u008b\5\24\13\2\u008a\u0088\3\2\2\2\u008a\u008b\3"+
- "\2\2\2\u008b\13\3\2\2\2\u008c\u008d\7\t\2\2\u008d\u008e\5\30\r\2\u008e"+
- "\u0090\7\t\2\2\u008f\u0091\5\30\r\2\u0090\u008f\3\2\2\2\u0090\u0091\3"+
- "\2\2\2\u0091\u0098\3\2\2\2\u0092\u0093\7\21\2\2\u0093\u0094\5\30\r\2\u0094"+
- "\u0095\7\22\2\2\u0095\u0096\5\30\r\2\u0096\u0098\3\2\2\2\u0097\u008c\3"+
- "\2\2\2\u0097\u0092\3\2\2\2\u0098\r\3\2\2\2\u0099\u009e\5\20\t\2\u009a"+
- "\u009b\7\23\2\2\u009b\u009d\5\20\t\2\u009c\u009a\3\2\2\2\u009d\u00a0\3"+
- "\2\2\2\u009e\u009c\3\2\2\2\u009e\u009f\3\2\2\2\u009f\17\3\2\2\2\u00a0"+
- "\u009e\3\2\2\2\u00a1\u00a2\5\22\n\2\u00a2\u00a3\7>\2\2\u00a3\21\3\2\2"+
- "\2\u00a4\u00a5\b\n\1\2\u00a5\u00a6\7\61\2\2\u00a6\u00b1\3\2\2\2\u00a7"+
- "\u00a8\f\4\2\2\u00a8\u00b0\7\24\2\2\u00a9\u00aa\f\3\2\2\u00aa\u00ac\7"+
- "\25\2\2\u00ab\u00ad\5\30\r\2\u00ac\u00ab\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad"+
- "\u00ae\3\2\2\2\u00ae\u00b0\7\26\2\2\u00af\u00a7\3\2\2\2\u00af\u00a9\3"+
- "\2\2\2\u00b0\u00b3\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1\u00b2\3\2\2\2\u00b2"+
- "\23\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b4\u00c1\5\30\r\2\u00b5\u00b6\7\3\2"+
- "\2\u00b6\u00bb\5\24\13\2\u00b7\u00b8\7\23\2\2\u00b8\u00ba\5\24\13\2\u00b9"+
- "\u00b7\3\2\2\2\u00ba\u00bd\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bb\u00bc\3\2"+
- "\2\2\u00bc\u00be\3\2\2\2\u00bd\u00bb\3\2\2\2\u00be\u00bf\7\4\2\2\u00bf"+
- "\u00c1\3\2\2\2\u00c0\u00b4\3\2\2\2\u00c0\u00b5\3\2\2\2\u00c1\25\3\2\2"+
- "\2\u00c2\u00c3\b\f\1\2\u00c3\u00c4\7\5\2\2\u00c4\u00c5\5\26\f\2\u00c5"+
- "\u00c6\7\6\2\2\u00c6\u00cd\3\2\2\2\u00c7\u00cd\7>\2\2\u00c8\u00c9\7\24"+
- "\2\2\u00c9\u00cd\5\26\f\5\u00ca\u00cb\t\2\2\2\u00cb\u00cd\5\26\f\4\u00cc"+
- "\u00c2\3\2\2\2\u00cc\u00c7\3\2\2\2\u00cc\u00c8\3\2\2\2\u00cc\u00ca\3\2"+
- "\2\2\u00cd\u00d5\3\2\2\2\u00ce\u00cf\f\3\2\2\u00cf\u00d0\7\25\2\2\u00d0"+
- "\u00d1\5\30\r\2\u00d1\u00d2\7\26\2\2\u00d2\u00d4\3\2\2\2\u00d3\u00ce\3"+
- "\2\2\2\u00d4\u00d7\3\2\2\2\u00d5\u00d3\3\2\2\2\u00d5\u00d6\3\2\2\2\u00d6"+
- "\27\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8\u00d9\b\r\1\2\u00d9\u00da\7\5\2"+
- "\2\u00da\u00db\5\30\r\2\u00db\u00dc\7\6\2\2\u00dc\u00f2\3\2\2\2\u00dd"+
- "\u00de\7>\2\2\u00de\u00e0\7\5\2\2\u00df\u00e1\5\32\16\2\u00e0\u00df\3"+
- "\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00f2\7\6\2\2\u00e3"+
- "\u00e4\7\5\2\2\u00e4\u00e5\5\22\n\2\u00e5\u00e6\7\6\2\2\u00e6\u00e7\5"+
- "\30\r\25\u00e7\u00f2\3\2\2\2\u00e8\u00e9\t\3\2\2\u00e9\u00f2\5\30\r\23"+
- "\u00ea\u00eb\t\4\2\2\u00eb\u00f2\5\30\r\21\u00ec\u00f2\7>\2\2\u00ed\u00f2"+
- "\7\65\2\2\u00ee\u00f2\7\62\2\2\u00ef\u00f2\7\63\2\2\u00f0\u00f2\7\64\2"+
- "\2\u00f1\u00d8\3\2\2\2\u00f1\u00dd\3\2\2\2\u00f1\u00e3\3\2\2\2\u00f1\u00e8"+
- "\3\2\2\2\u00f1\u00ea\3\2\2\2\u00f1\u00ec\3\2\2\2\u00f1\u00ed\3\2\2\2\u00f1"+
- "\u00ee\3\2\2\2\u00f1\u00ef\3\2\2\2\u00f1\u00f0\3\2\2\2\u00f2\u0117\3\2"+
- "\2\2\u00f3\u00f4\f\20\2\2\u00f4\u00f5\t\5\2\2\u00f5\u0116\5\30\r\21\u00f6"+
- "\u00f7\f\17\2\2\u00f7\u00f8\t\6\2\2\u00f8\u0116\5\30\r\20\u00f9\u00fa"+
- "\f\16\2\2\u00fa\u00fb\t\7\2\2\u00fb\u0116\5\30\r\17\u00fc\u00fd\f\r\2"+
- "\2\u00fd\u00fe\t\b\2\2\u00fe\u0116\5\30\r\16\u00ff\u0100\f\f\2\2\u0100"+
- "\u0101\7\36\2\2\u0101\u0116\5\30\r\r\u0102\u0103\f\13\2\2\u0103\u0104"+
- "\7+\2\2\u0104\u0116\5\30\r\f\u0105\u0106\f\n\2\2\u0106\u0107\7,\2\2\u0107"+
- "\u0116\5\30\r\13\u0108\u0109\f\t\2\2\u0109\u010a\7-\2\2\u010a\u0116\5"+
- "\30\r\n\u010b\u010c\f\b\2\2\u010c\u010d\7.\2\2\u010d\u0116\5\30\r\t\u010e"+
- "\u010f\f\24\2\2\u010f\u0110\7\25\2\2\u0110\u0111\5\30\r\2\u0111\u0112"+
- "\7\26\2\2\u0112\u0116\3\2\2\2\u0113\u0114\f\22\2\2\u0114\u0116\t\3\2\2"+
- "\u0115\u00f3\3\2\2\2\u0115\u00f6\3\2\2\2\u0115\u00f9\3\2\2\2\u0115\u00fc"+
- "\3\2\2\2\u0115\u00ff\3\2\2\2\u0115\u0102\3\2\2\2\u0115\u0105\3\2\2\2\u0115"+
- "\u0108\3\2\2\2\u0115\u010b\3\2\2\2\u0115\u010e\3\2\2\2\u0115\u0113\3\2"+
- "\2\2\u0116\u0119\3\2\2\2\u0117\u0115\3\2\2\2\u0117\u0118\3\2\2\2\u0118"+
- "\31\3\2\2\2\u0119\u0117\3\2\2\2\u011a\u011f\5\30\r\2\u011b\u011c\7\23"+
- "\2\2\u011c\u011e\5\30\r\2\u011d\u011b\3\2\2\2\u011e\u0121\3\2\2\2\u011f"+
- "\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120\33\3\2\2\2\u0121\u011f\3\2\2"+
- "\2\u0122\u0126\5\36\20\2\u0123\u0125\5\36\20\2\u0124\u0123\3\2\2\2\u0125"+
- "\u0128\3\2\2\2\u0126\u0124\3\2\2\2\u0126\u0127\3\2\2\2\u0127\35\3\2\2"+
- "\2\u0128\u0126\3\2\2\2\u0129\u012c\5 \21\2\u012a\u012c\5\"\22\2\u012b"+
- "\u0129\3\2\2\2\u012b\u012a\3\2\2\2\u012c\37\3\2\2\2\u012d\u012e\7>\2\2"+
- "\u012e\u0132\7\21\2\2\u012f\u0130\7\35\2\2\u0130\u0132\7\21\2\2\u0131"+
- "\u012d\3\2\2\2\u0131\u012f\3\2\2\2\u0132!\3\2\2\2\u0133\u0135\7\60\2\2"+
- "\u0134\u0136\5$\23\2\u0135\u0134\3\2\2\2\u0135\u0136\3\2\2\2\u0136#\3"+
- "\2\2\2\u0137\u014f\5&\24\2\u0138\u0139\7/\2\2\u0139\u014f\5&\24\2\u013a"+
- "\u013b\5&\24\2\u013b\u013c\7\23\2\2\u013c\u013d\7>\2\2\u013d\u014f\3\2"+
- "\2\2\u013e\u013f\7\5\2\2\u013f\u0140\5&\24\2\u0140\u0141\7\6\2\2\u0141"+
- "\u0142\7\23\2\2\u0142\u0143\7>\2\2\u0143\u014f\3\2\2\2\u0144\u0145\7\5"+
- "\2\2\u0145\u0146\5&\24\2\u0146\u0147\7\23\2\2\u0147\u0148\7>\2\2\u0148"+
- "\u0149\7\6\2\2\u0149\u014f\3\2\2\2\u014a\u014b\7\5\2\2\u014b\u014c\5&"+
- "\24\2\u014c\u014d\7\6\2\2\u014d\u014f\3\2\2\2\u014e\u0137\3\2\2\2\u014e"+
- "\u0138\3\2\2\2\u014e\u013a\3\2\2\2\u014e\u013e\3\2\2\2\u014e\u0144\3\2"+
- "\2\2\u014e\u014a\3\2\2\2\u014f%\3\2\2\2\u0150\u0151\b\24\1\2\u0151\u0152"+
- "\t\t\2\2\u0152\u015a\5&\24\t\u0153\u015a\7>\2\2\u0154\u015a\7?\2\2\u0155"+
- "\u0156\7\3\2\2\u0156\u0157\7>\2\2\u0157\u015a\7\4\2\2\u0158\u015a\7\65"+
- "\2\2\u0159\u0150\3\2\2\2\u0159\u0153\3\2\2\2\u0159\u0154\3\2\2\2\u0159"+
- "\u0155\3\2\2\2\u0159\u0158\3\2\2\2\u015a\u0163\3\2\2\2\u015b\u015c\f\b"+
- "\2\2\u015c\u015d\t\n\2\2\u015d\u0162\5&\24\t\u015e\u015f\f\7\2\2\u015f"+
- "\u0160\t\7\2\2\u0160\u0162\5&\24\b\u0161\u015b\3\2\2\2\u0161\u015e\3\2"+
- "\2\2\u0162\u0165\3\2\2\2\u0163\u0161\3\2\2\2\u0163\u0164\3\2\2\2\u0164"+
- "\'\3\2\2\2\u0165\u0163\3\2\2\2%\61\65\2\2\u0089\u008a\7\b\2\2\u008a\u008c\5\24\13\2\u008b\u0089\3"+
+ "\2\2\2\u008b\u008c\3\2\2\2\u008c\13\3\2\2\2\u008d\u008e\7\t\2\2\u008e"+
+ "\u008f\5\30\r\2\u008f\u0091\7\t\2\2\u0090\u0092\5\30\r\2\u0091\u0090\3"+
+ "\2\2\2\u0091\u0092\3\2\2\2\u0092\u0099\3\2\2\2\u0093\u0094\7\21\2\2\u0094"+
+ "\u0095\5\30\r\2\u0095\u0096\7\22\2\2\u0096\u0097\5\30\r\2\u0097\u0099"+
+ "\3\2\2\2\u0098\u008d\3\2\2\2\u0098\u0093\3\2\2\2\u0099\r\3\2\2\2\u009a"+
+ "\u009f\5\20\t\2\u009b\u009c\7\23\2\2\u009c\u009e\5\20\t\2\u009d\u009b"+
+ "\3\2\2\2\u009e\u00a1\3\2\2\2\u009f\u009d\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0"+
+ "\17\3\2\2\2\u00a1\u009f\3\2\2\2\u00a2\u00a3\5\22\n\2\u00a3\u00a4\7>\2"+
+ "\2\u00a4\21\3\2\2\2\u00a5\u00a6\b\n\1\2\u00a6\u00a7\7\61\2\2\u00a7\u00b2"+
+ "\3\2\2\2\u00a8\u00a9\f\4\2\2\u00a9\u00b1\7\24\2\2\u00aa\u00ab\f\3\2\2"+
+ "\u00ab\u00ad\7\25\2\2\u00ac\u00ae\5\30\r\2\u00ad\u00ac\3\2\2\2\u00ad\u00ae"+
+ "\3\2\2\2\u00ae\u00af\3\2\2\2\u00af\u00b1\7\26\2\2\u00b0\u00a8\3\2\2\2"+
+ "\u00b0\u00aa\3\2\2\2\u00b1\u00b4\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b2\u00b3"+
+ "\3\2\2\2\u00b3\23\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b5\u00c2\5\30\r\2\u00b6"+
+ "\u00b7\7\3\2\2\u00b7\u00bc\5\24\13\2\u00b8\u00b9\7\23\2\2\u00b9\u00bb"+
+ "\5\24\13\2\u00ba\u00b8\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2"+
+ "\u00bc\u00bd\3\2\2\2\u00bd\u00bf\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c0"+
+ "\7\4\2\2\u00c0\u00c2\3\2\2\2\u00c1\u00b5\3\2\2\2\u00c1\u00b6\3\2\2\2\u00c2"+
+ "\25\3\2\2\2\u00c3\u00c4\b\f\1\2\u00c4\u00c5\7\5\2\2\u00c5\u00c6\5\26\f"+
+ "\2\u00c6\u00c7\7\6\2\2\u00c7\u00ce\3\2\2\2\u00c8\u00ce\7>\2\2\u00c9\u00ca"+
+ "\7\24\2\2\u00ca\u00ce\5\26\f\5\u00cb\u00cc\t\2\2\2\u00cc\u00ce\5\26\f"+
+ "\4\u00cd\u00c3\3\2\2\2\u00cd\u00c8\3\2\2\2\u00cd\u00c9\3\2\2\2\u00cd\u00cb"+
+ "\3\2\2\2\u00ce\u00d6\3\2\2\2\u00cf\u00d0\f\3\2\2\u00d0\u00d1\7\25\2\2"+
+ "\u00d1\u00d2\5\30\r\2\u00d2\u00d3\7\26\2\2\u00d3\u00d5\3\2\2\2\u00d4\u00cf"+
+ "\3\2\2\2\u00d5\u00d8\3\2\2\2\u00d6\u00d4\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7"+
+ "\27\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d9\u00da\b\r\1\2\u00da\u00db\7\5\2"+
+ "\2\u00db\u00dc\5\30\r\2\u00dc\u00dd\7\6\2\2\u00dd\u00f3\3\2\2\2\u00de"+
+ "\u00df\7>\2\2\u00df\u00e1\7\5\2\2\u00e0\u00e2\5\32\16\2\u00e1\u00e0\3"+
+ "\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00f3\7\6\2\2\u00e4"+
+ "\u00e5\7\5\2\2\u00e5\u00e6\5\22\n\2\u00e6\u00e7\7\6\2\2\u00e7\u00e8\5"+
+ "\30\r\25\u00e8\u00f3\3\2\2\2\u00e9\u00ea\t\3\2\2\u00ea\u00f3\5\30\r\23"+
+ "\u00eb\u00ec\t\4\2\2\u00ec\u00f3\5\30\r\21\u00ed\u00f3\7>\2\2\u00ee\u00f3"+
+ "\7\65\2\2\u00ef\u00f3\7\62\2\2\u00f0\u00f3\7\63\2\2\u00f1\u00f3\7\64\2"+
+ "\2\u00f2\u00d9\3\2\2\2\u00f2\u00de\3\2\2\2\u00f2\u00e4\3\2\2\2\u00f2\u00e9"+
+ "\3\2\2\2\u00f2\u00eb\3\2\2\2\u00f2\u00ed\3\2\2\2\u00f2\u00ee\3\2\2\2\u00f2"+
+ "\u00ef\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f2\u00f1\3\2\2\2\u00f3\u0118\3\2"+
+ "\2\2\u00f4\u00f5\f\20\2\2\u00f5\u00f6\t\5\2\2\u00f6\u0117\5\30\r\21\u00f7"+
+ "\u00f8\f\17\2\2\u00f8\u00f9\t\6\2\2\u00f9\u0117\5\30\r\20\u00fa\u00fb"+
+ "\f\16\2\2\u00fb\u00fc\t\7\2\2\u00fc\u0117\5\30\r\17\u00fd\u00fe\f\r\2"+
+ "\2\u00fe\u00ff\t\b\2\2\u00ff\u0117\5\30\r\16\u0100\u0101\f\f\2\2\u0101"+
+ "\u0102\7\36\2\2\u0102\u0117\5\30\r\r\u0103\u0104\f\13\2\2\u0104\u0105"+
+ "\7+\2\2\u0105\u0117\5\30\r\f\u0106\u0107\f\n\2\2\u0107\u0108\7,\2\2\u0108"+
+ "\u0117\5\30\r\13\u0109\u010a\f\t\2\2\u010a\u010b\7-\2\2\u010b\u0117\5"+
+ "\30\r\n\u010c\u010d\f\b\2\2\u010d\u010e\7.\2\2\u010e\u0117\5\30\r\t\u010f"+
+ "\u0110\f\24\2\2\u0110\u0111\7\25\2\2\u0111\u0112\5\30\r\2\u0112\u0113"+
+ "\7\26\2\2\u0113\u0117\3\2\2\2\u0114\u0115\f\22\2\2\u0115\u0117\t\3\2\2"+
+ "\u0116\u00f4\3\2\2\2\u0116\u00f7\3\2\2\2\u0116\u00fa\3\2\2\2\u0116\u00fd"+
+ "\3\2\2\2\u0116\u0100\3\2\2\2\u0116\u0103\3\2\2\2\u0116\u0106\3\2\2\2\u0116"+
+ "\u0109\3\2\2\2\u0116\u010c\3\2\2\2\u0116\u010f\3\2\2\2\u0116\u0114\3\2"+
+ "\2\2\u0117\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119"+
+ "\31\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u0120\5\30\r\2\u011c\u011d\7\23"+
+ "\2\2\u011d\u011f\5\30\r\2\u011e\u011c\3\2\2\2\u011f\u0122\3\2\2\2\u0120"+
+ "\u011e\3\2\2\2\u0120\u0121\3\2\2\2\u0121\33\3\2\2\2\u0122\u0120\3\2\2"+
+ "\2\u0123\u0127\5\36\20\2\u0124\u0126\5\36\20\2\u0125\u0124\3\2\2\2\u0126"+
+ "\u0129\3\2\2\2\u0127\u0125\3\2\2\2\u0127\u0128\3\2\2\2\u0128\35\3\2\2"+
+ "\2\u0129\u0127\3\2\2\2\u012a\u012d\5 \21\2\u012b\u012d\5\"\22\2\u012c"+
+ "\u012a\3\2\2\2\u012c\u012b\3\2\2\2\u012d\37\3\2\2\2\u012e\u012f\7>\2\2"+
+ "\u012f\u0133\7\21\2\2\u0130\u0131\7\35\2\2\u0131\u0133\7\21\2\2\u0132"+
+ "\u012e\3\2\2\2\u0132\u0130\3\2\2\2\u0133!\3\2\2\2\u0134\u0136\7\60\2\2"+
+ "\u0135\u0137\5$\23\2\u0136\u0135\3\2\2\2\u0136\u0137\3\2\2\2\u0137#\3"+
+ "\2\2\2\u0138\u0150\5&\24\2\u0139\u013a\7/\2\2\u013a\u0150\5&\24\2\u013b"+
+ "\u013c\5&\24\2\u013c\u013d\7\23\2\2\u013d\u013e\7>\2\2\u013e\u0150\3\2"+
+ "\2\2\u013f\u0140\7\5\2\2\u0140\u0141\5&\24\2\u0141\u0142\7\6\2\2\u0142"+
+ "\u0143\7\23\2\2\u0143\u0144\7>\2\2\u0144\u0150\3\2\2\2\u0145\u0146\7\5"+
+ "\2\2\u0146\u0147\5&\24\2\u0147\u0148\7\23\2\2\u0148\u0149\7>\2\2\u0149"+
+ "\u014a\7\6\2\2\u014a\u0150\3\2\2\2\u014b\u014c\7\5\2\2\u014c\u014d\5&"+
+ "\24\2\u014d\u014e\7\6\2\2\u014e\u0150\3\2\2\2\u014f\u0138\3\2\2\2\u014f"+
+ "\u0139\3\2\2\2\u014f\u013b\3\2\2\2\u014f\u013f\3\2\2\2\u014f\u0145\3\2"+
+ "\2\2\u014f\u014b\3\2\2\2\u0150%\3\2\2\2\u0151\u0152\b\24\1\2\u0152\u0153"+
+ "\t\t\2\2\u0153\u015c\5&\24\n\u0154\u015c\7>\2\2\u0155\u015c\7?\2\2\u0156"+
+ "\u0157\7\3\2\2\u0157\u0158\7>\2\2\u0158\u015c\7\4\2\2\u0159\u015c\7\65"+
+ "\2\2\u015a\u015c\7\63\2\2\u015b\u0151\3\2\2\2\u015b\u0154\3\2\2\2\u015b"+
+ "\u0155\3\2\2\2\u015b\u0156\3\2\2\2\u015b\u0159\3\2\2\2\u015b\u015a\3\2"+
+ "\2\2\u015c\u0165\3\2\2\2\u015d\u015e\f\t\2\2\u015e\u015f\t\n\2\2\u015f"+
+ "\u0164\5&\24\n\u0160\u0161\f\b\2\2\u0161\u0162\t\7\2\2\u0162\u0164\5&"+
+ "\24\t\u0163\u015d\3\2\2\2\u0163\u0160\3\2\2\2\u0164\u0167\3\2\2\2\u0165"+
+ "\u0163\3\2\2\2\u0165\u0166\3\2\2\2\u0166\'\3\2\2\2\u0167\u0165\3\2\2\2"+
+ "%\61\65 extends ParseTreeVisitor {
* @return the visitor result
*/
T visitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code asmExprChar}
+ * labeled alternative in {@link KickCParser#asmExpr}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitAsmExprChar(KickCParser.AsmExprCharContext ctx);
}
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/test/TestPrograms.java b/src/main/java/dk/camelot64/kickc/test/TestPrograms.java
index 05354d21f..a2d308c07 100644
--- a/src/main/java/dk/camelot64/kickc/test/TestPrograms.java
+++ b/src/main/java/dk/camelot64/kickc/test/TestPrograms.java
@@ -32,6 +32,10 @@ public class TestPrograms extends TestCase {
compileAndCompare("inline-asm");
}
+ public void testChargen() throws IOException, URISyntaxException {
+ compileAndCompare("chargen");
+ }
+
public void testBitmapPlotter() throws IOException, URISyntaxException {
compileAndCompare("bitmap-plotter");
}
diff --git a/src/main/java/dk/camelot64/kickc/test/bitmap-bresenham.kc b/src/main/java/dk/camelot64/kickc/test/bitmap-bresenham.kc
index 134c0d154..aebfe2dbd 100644
--- a/src/main/java/dk/camelot64/kickc/test/bitmap-bresenham.kc
+++ b/src/main/java/dk/camelot64/kickc/test/bitmap-bresenham.kc
@@ -37,7 +37,7 @@ void main() {
init_plot_tables();
do {
lines();
- } while (true)
+ } while (true);
}
void lines() {
@@ -96,7 +96,7 @@ void line_xdyi(byte x, byte y, byte x1, byte xd, byte yd) {
y = y+1;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
@@ -109,7 +109,7 @@ void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
y = y-1;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
@@ -122,7 +122,7 @@ void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
x = x+1;
e = e - yd;
}
- } while (y<(y1+1))
+ } while (y<(y1+1));
}
void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
@@ -135,7 +135,7 @@ void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
x = x-1;
e = e - yd;
}
- } while (y<(y1+1))
+ } while (y<(y1+1));
}
void plot(byte x, byte y) {
diff --git a/src/main/java/dk/camelot64/kickc/test/bitmap-plotter.kc b/src/main/java/dk/camelot64/kickc/test/bitmap-plotter.kc
index c3cd94b80..03fe3e6ae 100644
--- a/src/main/java/dk/camelot64/kickc/test/bitmap-plotter.kc
+++ b/src/main/java/dk/camelot64/kickc/test/bitmap-plotter.kc
@@ -26,11 +26,11 @@ void main() {
init_screen();
init_plot_tables();
do {
- do {} while (*RASTER!=$ff)
+ do {} while (*RASTER!=$ff);
*BGCOL = *BGCOL+1;
plots();
*BGCOL = *BGCOL-1;
- } while (true)
+ } while (true);
}
byte[] plots_x = { 60, 80, 110, 80, 60, 40, 10, 40 };
diff --git a/src/main/java/dk/camelot64/kickc/test/bresenham.kc b/src/main/java/dk/camelot64/kickc/test/bresenham.kc
index 1119be82d..038c4ace6 100644
--- a/src/main/java/dk/camelot64/kickc/test/bresenham.kc
+++ b/src/main/java/dk/camelot64/kickc/test/bresenham.kc
@@ -22,5 +22,5 @@ void main() {
cursor = cursor + 40;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/test/bresenhamarr.kc b/src/main/java/dk/camelot64/kickc/test/bresenhamarr.kc
index f09cba684..e784fed62 100644
--- a/src/main/java/dk/camelot64/kickc/test/bresenhamarr.kc
+++ b/src/main/java/dk/camelot64/kickc/test/bresenhamarr.kc
@@ -22,5 +22,5 @@ void main() {
idx = idx + 40;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/test/chargen.kc b/src/main/java/dk/camelot64/kickc/test/chargen.kc
new file mode 100644
index 000000000..adbd00b10
--- /dev/null
+++ b/src/main/java/dk/camelot64/kickc/test/chargen.kc
@@ -0,0 +1,25 @@
+byte* PROCPORT = $01;
+byte* CHARGEN = $d000;
+byte* SCREEN = $0400;
+
+void main() {
+ asm { sei };
+ byte* CHAR_A = CHARGEN+8;
+ *PROCPORT = $32;
+ byte* sc = SCREEN;
+ for(byte y:0..7) {
+ byte bits = CHAR_A[y];
+ for(byte x:0..7) {
+ byte c = '.';
+ if((bits & $80) != 0) {
+ c = '*';
+ }
+ *sc = c;
+ sc++;
+ bits = bits<<1;
+ }
+ sc = sc+32;
+ }
+ *PROCPORT = $37;
+ asm { cli };
+}
diff --git a/src/main/java/dk/camelot64/kickc/test/const-identification.kc b/src/main/java/dk/camelot64/kickc/test/const-identification.kc
index 621d5b617..d5b342bef 100644
--- a/src/main/java/dk/camelot64/kickc/test/const-identification.kc
+++ b/src/main/java/dk/camelot64/kickc/test/const-identification.kc
@@ -8,7 +8,7 @@ void main() {
}
do {
line(0, 10);
- } while (true)
+ } while (true);
}
void line(byte x0, byte x1) {
diff --git a/src/main/java/dk/camelot64/kickc/test/fibmem.kc b/src/main/java/dk/camelot64/kickc/test/fibmem.kc
index a26276038..11d387c84 100644
--- a/src/main/java/dk/camelot64/kickc/test/fibmem.kc
+++ b/src/main/java/dk/camelot64/kickc/test/fibmem.kc
@@ -6,5 +6,5 @@ void main() {
byte i = 0;
do {
fibs[i+2] = fibs[i]+fibs[i+1];
- } while(++i<15)
+ } while(++i<15);
}
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/test/flipper-rex2.kc b/src/main/java/dk/camelot64/kickc/test/flipper-rex2.kc
index 86d8216cc..57098393f 100644
--- a/src/main/java/dk/camelot64/kickc/test/flipper-rex2.kc
+++ b/src/main/java/dk/camelot64/kickc/test/flipper-rex2.kc
@@ -7,12 +7,12 @@ void main() {
prepare();
do {
for( byte c : 25..1) {
- do { } while(*RASTER!=254)
- do { } while(*RASTER!=255)
+ do { } while(*RASTER!=254);
+ do { } while(*RASTER!=255);
}
flip();
plot();
- } while(true)
+ } while(true);
}
// Prepare buffer
diff --git a/src/main/java/dk/camelot64/kickc/test/halfscii.kc b/src/main/java/dk/camelot64/kickc/test/halfscii.kc
index 304d80811..0169fd1f7 100644
--- a/src/main/java/dk/camelot64/kickc/test/halfscii.kc
+++ b/src/main/java/dk/camelot64/kickc/test/halfscii.kc
@@ -8,6 +8,7 @@ byte* CHARSET4 = $2800;
byte[] bits_count = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
void main() {
+ asm { sei };
*PROCPORT = $32;
byte* chargen = CHARGEN;
byte* charset4 = CHARSET4;
@@ -29,9 +30,9 @@ void main() {
*charset4 = bits_gen;
charset4++;
chargen = chargen+2;
- } while (chargen0)
+ } while (i>0);
}
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/test/loopnest.kc b/src/main/java/dk/camelot64/kickc/test/loopnest.kc
index 7647e1eda..f0c7c9a56 100644
--- a/src/main/java/dk/camelot64/kickc/test/loopnest.kc
+++ b/src/main/java/dk/camelot64/kickc/test/loopnest.kc
@@ -4,12 +4,12 @@ void main() {
byte i=100;
do {
nest();
- } while (--i>0)
+ } while (--i>0);
}
void nest() {
byte j=100;
do {
*SCREEN = j;
- } while (--j>0)
+ } while (--j>0);
}
diff --git a/src/main/java/dk/camelot64/kickc/test/loopnest2.kc b/src/main/java/dk/camelot64/kickc/test/loopnest2.kc
index 1981e5819..d5608743f 100644
--- a/src/main/java/dk/camelot64/kickc/test/loopnest2.kc
+++ b/src/main/java/dk/camelot64/kickc/test/loopnest2.kc
@@ -6,8 +6,8 @@ void main() {
byte j=100;
do {
nest1();
- } while (--j>0)
- } while (--i>0)
+ } while (--j>0);
+ } while (--i>0);
}
void nest1() {
@@ -16,8 +16,8 @@ void nest1() {
byte j=100;
do {
nest2();
- } while (--j>0)
- } while (--i>0)
+ } while (--j>0);
+ } while (--i>0);
}
void nest2() {
@@ -26,6 +26,6 @@ void nest2() {
byte j=100;
do {
*SCREEN = j;
- } while (--j>0)
- } while (--i>0)
+ } while (--j>0);
+ } while (--i>0);
}
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log
index e5ad61aee..b17976ce8 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log
@@ -37,7 +37,7 @@ void main() {
init_plot_tables();
do {
lines();
- } while (true)
+ } while (true);
}
void lines() {
@@ -96,7 +96,7 @@ void line_xdyi(byte x, byte y, byte x1, byte xd, byte yd) {
y = y+1;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
@@ -109,7 +109,7 @@ void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
y = y-1;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
@@ -122,7 +122,7 @@ void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
x = x+1;
e = e - yd;
}
- } while (y<(y1+1))
+ } while (y<(y1+1));
}
void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
@@ -135,7 +135,7 @@ void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
x = x-1;
e = e - yd;
}
- } while (y<(y1+1))
+ } while (y<(y1+1));
}
void plot(byte x, byte y) {
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log
index c3b0b0387..218845d49 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log
@@ -26,11 +26,11 @@ void main() {
init_screen();
init_plot_tables();
do {
- do {} while (*RASTER!=$ff)
+ do {} while (*RASTER!=$ff);
*BGCOL = *BGCOL+1;
plots();
*BGCOL = *BGCOL-1;
- } while (true)
+ } while (true);
}
byte[] plots_x = { 60, 80, 110, 80, 60, 40, 10, 40 };
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log
index 4e9f9938b..09fb8a859 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log
@@ -22,7 +22,7 @@ void main() {
cursor = cursor + 40;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
PROGRAM
(byte) STAR ← (byte) 81
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log b/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log
index e7ea69ed4..550728090 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log
@@ -22,7 +22,7 @@ void main() {
idx = idx + 40;
e = e - xd;
}
- } while (x<(x1+1))
+ } while (x<(x1+1));
}
PROGRAM
proc (void()) main()
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/chargen.asm b/src/main/java/dk/camelot64/kickc/test/ref/chargen.asm
new file mode 100644
index 000000000..1cc314b57
--- /dev/null
+++ b/src/main/java/dk/camelot64/kickc/test/ref/chargen.asm
@@ -0,0 +1,62 @@
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+ .const PROCPORT = 1
+ .const CHARGEN = $d000
+ .const SCREEN = $400
+ jsr main
+main: {
+ .const CHAR_A = CHARGEN+8
+ .label bits = 3
+ .label sc = 4
+ .label y = 2
+ sei
+ lda #$32
+ sta PROCPORT
+ lda #SCREEN
+ sta sc+1
+ lda #0
+ sta y
+ b1:
+ ldx y
+ lda CHAR_A,x
+ sta bits
+ ldx #0
+ b2:
+ lda bits
+ and #$80
+ cmp #0
+ beq b3_from_b2
+ lda #'*'
+ jmp b3
+ b3_from_b2:
+ lda #'.'
+ b3:
+ ldy #0
+ sta (sc),y
+ inc sc
+ bne !+
+ inc sc+1
+ !:
+ asl bits
+ inx
+ cpx #8
+ bne b2
+ lda sc
+ clc
+ adc #$20
+ sta sc
+ bcc !+
+ inc sc+1
+ !:
+ inc y
+ lda y
+ cmp #8
+ bne b1
+ lda #$37
+ sta PROCPORT
+ cli
+ rts
+}
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/chargen.cfg b/src/main/java/dk/camelot64/kickc/test/ref/chargen.cfg
new file mode 100644
index 000000000..66e0444a3
--- /dev/null
+++ b/src/main/java/dk/camelot64/kickc/test/ref/chargen.cfg
@@ -0,0 +1,44 @@
+@begin: scope:[] from
+ to:@1
+@1: scope:[] from @begin
+ [0] call main param-assignment [ ]
+ to:@end
+@end: scope:[] from @1
+main: scope:[main] from @1
+ asm { sei }
+ [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ [3] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 ) [ main::y#2 main::sc#7 ]
+ [3] (byte) main::y#2 ← phi( main/(byte) 0 main::@5/(byte) main::y#1 ) [ main::y#2 main::sc#7 ]
+ [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ]
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ [5] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [5] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [5] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
+ [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ to:main::@4
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@3: scope:[main] from main::@2 main::@4
+ [8] (byte) main::c#2 ← phi( main::@2/(byte) '.' main::@4/(byte) '*' ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::c#2 ]
+ [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
+ [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ]
+ [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
+ [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
+ to:main::@5
+main::@5: scope:[main] from main::@3
+ [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
+ [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ]
+ [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ]
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ [19] return [ ]
+ to:@return
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/chargen.log b/src/main/java/dk/camelot64/kickc/test/ref/chargen.log
new file mode 100644
index 000000000..fbad7f401
--- /dev/null
+++ b/src/main/java/dk/camelot64/kickc/test/ref/chargen.log
@@ -0,0 +1,2461 @@
+byte* PROCPORT = $01;
+byte* CHARGEN = $d000;
+byte* SCREEN = $0400;
+
+void main() {
+ asm { sei };
+ byte* CHAR_A = CHARGEN+8;
+ *PROCPORT = $32;
+ byte* sc = SCREEN;
+ for(byte y:0..7) {
+ byte bits = CHAR_A[y];
+ for(byte x:0..7) {
+ byte c = '.';
+ if((bits & $80) != 0) {
+ c = '*';
+ }
+ *sc = c;
+ sc++;
+ bits = bits<<1;
+ }
+ sc = sc+32;
+ }
+ *PROCPORT = $37;
+ asm { cli };
+}
+
+Adding pre/post-modifier (byte*) main::sc ← ++ (byte*) main::sc
+PROGRAM
+ (byte*) PROCPORT ← (byte) 1
+ (byte*) CHARGEN ← (word) 53248
+ (byte*) SCREEN ← (word) 1024
+proc (void()) main()
+ asm { sei }
+ (byte*~) main::$0 ← (byte*) CHARGEN + (byte) 8
+ (byte*) main::CHAR_A ← (byte*~) main::$0
+ *((byte*) PROCPORT) ← (byte) 50
+ (byte*) main::sc ← (byte*) SCREEN
+ (byte) main::y ← (byte) 0
+main::@1:
+ (byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
+ (byte) main::bits ← (byte~) main::$1
+ (byte) main::x ← (byte) 0
+main::@2:
+ (byte) main::c ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits & (byte) 128
+ (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
+ (boolean~) main::$4 ← ! (boolean~) main::$3
+ if((boolean~) main::$4) goto main::@3
+ (byte) main::c ← (byte) '*'
+main::@3:
+ *((byte*) main::sc) ← (byte) main::c
+ (byte*) main::sc ← ++ (byte*) main::sc
+ (byte~) main::$5 ← (byte) main::bits << (byte) 1
+ (byte) main::bits ← (byte~) main::$5
+ (byte) main::x ← ++ (byte) main::x
+ (boolean~) main::$6 ← (byte) main::x != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ (byte*~) main::$7 ← (byte*) main::sc + (byte) 32
+ (byte*) main::sc ← (byte*~) main::$7
+ (byte) main::y ← ++ (byte) main::y
+ (boolean~) main::$8 ← (byte) main::y != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ *((byte*) PROCPORT) ← (byte) 55
+ asm { cli }
+main::@return:
+ return
+endproc // main()
+ call main
+
+SYMBOLS
+(byte*) CHARGEN
+(byte*) PROCPORT
+(byte*) SCREEN
+(void()) main()
+(byte*~) main::$0
+(byte~) main::$1
+(byte~) main::$2
+(boolean~) main::$3
+(boolean~) main::$4
+(byte~) main::$5
+(boolean~) main::$6
+(byte*~) main::$7
+(boolean~) main::$8
+(label) main::@1
+(label) main::@2
+(label) main::@3
+(label) main::@return
+(byte*) main::CHAR_A
+(byte) main::bits
+(byte) main::c
+(byte*) main::sc
+(byte) main::x
+(byte) main::y
+
+INITIAL CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT ← (byte) 1
+ (byte*) CHARGEN ← (word) 53248
+ (byte*) SCREEN ← (word) 1024
+ to:@1
+main: scope:[main] from
+ asm { sei }
+ (byte*~) main::$0 ← (byte*) CHARGEN + (byte) 8
+ (byte*) main::CHAR_A ← (byte*~) main::$0
+ *((byte*) PROCPORT) ← (byte) 50
+ (byte*) main::sc ← (byte*) SCREEN
+ (byte) main::y ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
+ (byte) main::bits ← (byte~) main::$1
+ (byte) main::x ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::c ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits & (byte) 128
+ (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
+ (boolean~) main::$4 ← ! (boolean~) main::$3
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ *((byte*) main::sc) ← (byte) main::c
+ (byte*) main::sc ← ++ (byte*) main::sc
+ (byte~) main::$5 ← (byte) main::bits << (byte) 1
+ (byte) main::bits ← (byte~) main::$5
+ (byte) main::x ← ++ (byte) main::x
+ (boolean~) main::$6 ← (byte) main::x != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte) main::c ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*~) main::$7 ← (byte*) main::sc + (byte) 32
+ (byte*) main::sc ← (byte*~) main::$7
+ (byte) main::y ← ++ (byte) main::y
+ (boolean~) main::$8 ← (byte) main::y != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main
+ to:@end
+@end: scope:[] from @1
+
+PROCEDURE MODIFY VARIABLE ANALYSIS
+
+CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
+@begin: scope:[] from
+ (byte*) PROCPORT ← (byte) 1
+ (byte*) CHARGEN ← (word) 53248
+ (byte*) SCREEN ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ (byte*~) main::$0 ← (byte*) CHARGEN + (byte) 8
+ (byte*) main::CHAR_A ← (byte*~) main::$0
+ *((byte*) PROCPORT) ← (byte) 50
+ (byte*) main::sc ← (byte*) SCREEN
+ (byte) main::y ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
+ (byte) main::bits ← (byte~) main::$1
+ (byte) main::x ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::c ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits & (byte) 128
+ (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
+ (boolean~) main::$4 ← ! (boolean~) main::$3
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ *((byte*) main::sc) ← (byte) main::c
+ (byte*) main::sc ← ++ (byte*) main::sc
+ (byte~) main::$5 ← (byte) main::bits << (byte) 1
+ (byte) main::bits ← (byte~) main::$5
+ (byte) main::x ← ++ (byte) main::x
+ (boolean~) main::$6 ← (byte) main::x != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte) main::c ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*~) main::$7 ← (byte*) main::sc + (byte) 32
+ (byte*) main::sc ← (byte*~) main::$7
+ (byte) main::y ← ++ (byte) main::y
+ (boolean~) main::$8 ← (byte) main::y != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@2
+@2: scope:[] from @1
+ to:@end
+@end: scope:[] from @2
+
+Completing Phi functions...
+Completing Phi functions...
+Completing Phi functions...
+Completing Phi functions...
+Completing Phi functions...
+CONTROL FLOW GRAPH SSA
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
+ (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
+ (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
+ asm { sei }
+ (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
+ (byte*) main::CHAR_A#0 ← (byte*~) main::$0
+ *((byte*) PROCPORT#1) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#1
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
+ (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::bits#0 ← (byte~) main::$1
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte*) PROCPORT#6 ← phi( main::@1/(byte*) PROCPORT#8 main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#4 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#5 ← phi( main::@1/(byte) main::y#2 main::@3/(byte) main::y#4 )
+ (byte) main::x#3 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
+ (boolean~) main::$4 ← ! (boolean~) main::$3
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
+ (byte*) main::CHAR_A#3 ← phi( main::@2/(byte*) main::CHAR_A#4 main::@4/(byte*) main::CHAR_A#5 )
+ (byte) main::y#4 ← phi( main::@2/(byte) main::y#5 main::@4/(byte) main::y#6 )
+ (byte) main::x#2 ← phi( main::@2/(byte) main::x#3 main::@4/(byte) main::x#4 )
+ (byte) main::bits#3 ← phi( main::@2/(byte) main::bits#2 main::@4/(byte) main::bits#4 )
+ (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#5 main::@4/(byte*) main::sc#6 )
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
+ (byte) main::bits#1 ← (byte~) main::$5
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
+ (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#4 )
+ (byte) main::y#6 ← phi( main::@2/(byte) main::y#5 )
+ (byte) main::x#4 ← phi( main::@2/(byte) main::x#3 )
+ (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
+ (byte*) main::sc#6 ← phi( main::@2/(byte*) main::sc#5 )
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) PROCPORT#4 ← phi( main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
+ (byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
+ (byte*~) main::$7 ← (byte*) main::sc#4 + (byte) 32
+ (byte*) main::sc#2 ← (byte*~) main::$7
+ (byte) main::y#1 ← ++ (byte) main::y#3
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ (byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
+ *((byte*) PROCPORT#2) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
+ (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
+ (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
+ call main param-assignment
+ to:@2
+@2: scope:[] from @1
+ to:@end
+@end: scope:[] from @2
+
+CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
+ (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
+ (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
+ asm { sei }
+ (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
+ (byte*) main::CHAR_A#0 ← (byte*~) main::$0
+ *((byte*) PROCPORT#1) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#1
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
+ (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::bits#0 ← (byte~) main::$1
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte*) PROCPORT#6 ← phi( main::@1/(byte*) PROCPORT#8 main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#4 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#5 ← phi( main::@1/(byte) main::y#2 main::@3/(byte) main::y#4 )
+ (byte) main::x#3 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
+ (boolean~) main::$4 ← ! (boolean~) main::$3
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
+ (byte*) main::CHAR_A#3 ← phi( main::@2/(byte*) main::CHAR_A#4 main::@4/(byte*) main::CHAR_A#5 )
+ (byte) main::y#4 ← phi( main::@2/(byte) main::y#5 main::@4/(byte) main::y#6 )
+ (byte) main::x#2 ← phi( main::@2/(byte) main::x#3 main::@4/(byte) main::x#4 )
+ (byte) main::bits#3 ← phi( main::@2/(byte) main::bits#2 main::@4/(byte) main::bits#4 )
+ (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#5 main::@4/(byte*) main::sc#6 )
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
+ (byte) main::bits#1 ← (byte~) main::$5
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
+ (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#4 )
+ (byte) main::y#6 ← phi( main::@2/(byte) main::y#5 )
+ (byte) main::x#4 ← phi( main::@2/(byte) main::x#3 )
+ (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
+ (byte*) main::sc#6 ← phi( main::@2/(byte*) main::sc#5 )
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) PROCPORT#4 ← phi( main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
+ (byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
+ (byte*~) main::$7 ← (byte*) main::sc#4 + (byte) 32
+ (byte*) main::sc#2 ← (byte*~) main::$7
+ (byte) main::y#1 ← ++ (byte) main::y#3
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ (byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
+ *((byte*) PROCPORT#2) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
+ (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
+ (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
+ call main param-assignment
+ to:@2
+@2: scope:[] from @1
+ to:@end
+@end: scope:[] from @2
+
+INITIAL SSA SYMBOL TABLE
+(label) @1
+(label) @2
+(label) @begin
+(label) @end
+(byte*) CHARGEN
+(byte*) CHARGEN#0
+(byte*) CHARGEN#1
+(byte*) CHARGEN#2
+(byte*) PROCPORT
+(byte*) PROCPORT#0
+(byte*) PROCPORT#1
+(byte*) PROCPORT#2
+(byte*) PROCPORT#3
+(byte*) PROCPORT#4
+(byte*) PROCPORT#5
+(byte*) PROCPORT#6
+(byte*) PROCPORT#7
+(byte*) PROCPORT#8
+(byte*) SCREEN
+(byte*) SCREEN#0
+(byte*) SCREEN#1
+(byte*) SCREEN#2
+(void()) main()
+(byte*~) main::$0
+(byte~) main::$1
+(byte~) main::$2
+(boolean~) main::$3
+(boolean~) main::$4
+(byte~) main::$5
+(boolean~) main::$6
+(byte*~) main::$7
+(boolean~) main::$8
+(label) main::@1
+(label) main::@2
+(label) main::@3
+(label) main::@4
+(label) main::@5
+(label) main::@6
+(label) main::@return
+(byte*) main::CHAR_A
+(byte*) main::CHAR_A#0
+(byte*) main::CHAR_A#1
+(byte*) main::CHAR_A#2
+(byte*) main::CHAR_A#3
+(byte*) main::CHAR_A#4
+(byte*) main::CHAR_A#5
+(byte) main::bits
+(byte) main::bits#0
+(byte) main::bits#1
+(byte) main::bits#2
+(byte) main::bits#3
+(byte) main::bits#4
+(byte) main::c
+(byte) main::c#0
+(byte) main::c#1
+(byte) main::c#2
+(byte*) main::sc
+(byte*) main::sc#0
+(byte*) main::sc#1
+(byte*) main::sc#2
+(byte*) main::sc#3
+(byte*) main::sc#4
+(byte*) main::sc#5
+(byte*) main::sc#6
+(byte*) main::sc#7
+(byte) main::x
+(byte) main::x#0
+(byte) main::x#1
+(byte) main::x#2
+(byte) main::x#3
+(byte) main::x#4
+(byte) main::y
+(byte) main::y#0
+(byte) main::y#1
+(byte) main::y#2
+(byte) main::y#3
+(byte) main::y#4
+(byte) main::y#5
+(byte) main::y#6
+
+Culled Empty Block (label) @2
+Succesful SSA optimization Pass2CullEmptyBlocks
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
+ (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
+ (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
+ asm { sei }
+ (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
+ (byte*) main::CHAR_A#0 ← (byte*~) main::$0
+ *((byte*) PROCPORT#1) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#1
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
+ (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::bits#0 ← (byte~) main::$1
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte*) PROCPORT#6 ← phi( main::@1/(byte*) PROCPORT#8 main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#4 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#5 ← phi( main::@1/(byte) main::y#2 main::@3/(byte) main::y#4 )
+ (byte) main::x#3 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
+ (boolean~) main::$4 ← ! (boolean~) main::$3
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
+ (byte*) main::CHAR_A#3 ← phi( main::@2/(byte*) main::CHAR_A#4 main::@4/(byte*) main::CHAR_A#5 )
+ (byte) main::y#4 ← phi( main::@2/(byte) main::y#5 main::@4/(byte) main::y#6 )
+ (byte) main::x#2 ← phi( main::@2/(byte) main::x#3 main::@4/(byte) main::x#4 )
+ (byte) main::bits#3 ← phi( main::@2/(byte) main::bits#2 main::@4/(byte) main::bits#4 )
+ (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#5 main::@4/(byte*) main::sc#6 )
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
+ (byte) main::bits#1 ← (byte~) main::$5
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
+ (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#4 )
+ (byte) main::y#6 ← phi( main::@2/(byte) main::y#5 )
+ (byte) main::x#4 ← phi( main::@2/(byte) main::x#3 )
+ (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
+ (byte*) main::sc#6 ← phi( main::@2/(byte*) main::sc#5 )
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) PROCPORT#4 ← phi( main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
+ (byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
+ (byte*~) main::$7 ← (byte*) main::sc#4 + (byte) 32
+ (byte*) main::sc#2 ← (byte*~) main::$7
+ (byte) main::y#1 ← ++ (byte) main::y#3
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ (byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
+ *((byte*) PROCPORT#2) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
+ (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
+ (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Inversing boolean not (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0 from (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
+Succesful SSA optimization Pass2UnaryNotSimplification
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
+ (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
+ (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
+ asm { sei }
+ (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
+ (byte*) main::CHAR_A#0 ← (byte*~) main::$0
+ *((byte*) PROCPORT#1) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#1
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
+ (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::bits#0 ← (byte~) main::$1
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte*) PROCPORT#6 ← phi( main::@1/(byte*) PROCPORT#8 main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#4 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#5 ← phi( main::@1/(byte) main::y#2 main::@3/(byte) main::y#4 )
+ (byte) main::x#3 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte*) PROCPORT#5 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#7 )
+ (byte*) main::CHAR_A#3 ← phi( main::@2/(byte*) main::CHAR_A#4 main::@4/(byte*) main::CHAR_A#5 )
+ (byte) main::y#4 ← phi( main::@2/(byte) main::y#5 main::@4/(byte) main::y#6 )
+ (byte) main::x#2 ← phi( main::@2/(byte) main::x#3 main::@4/(byte) main::x#4 )
+ (byte) main::bits#3 ← phi( main::@2/(byte) main::bits#2 main::@4/(byte) main::bits#4 )
+ (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#5 main::@4/(byte*) main::sc#6 )
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
+ (byte) main::bits#1 ← (byte~) main::$5
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#6 )
+ (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#4 )
+ (byte) main::y#6 ← phi( main::@2/(byte) main::y#5 )
+ (byte) main::x#4 ← phi( main::@2/(byte) main::x#3 )
+ (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
+ (byte*) main::sc#6 ← phi( main::@2/(byte*) main::sc#5 )
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) PROCPORT#4 ← phi( main::@3/(byte*) PROCPORT#5 )
+ (byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#3 )
+ (byte) main::y#3 ← phi( main::@3/(byte) main::y#4 )
+ (byte*) main::sc#4 ← phi( main::@3/(byte*) main::sc#1 )
+ (byte*~) main::$7 ← (byte*) main::sc#4 + (byte) 32
+ (byte*) main::sc#2 ← (byte*~) main::$7
+ (byte) main::y#1 ← ++ (byte) main::y#3
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ (byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
+ *((byte*) PROCPORT#2) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
+ (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
+ (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Not aliassing across scopes: main::sc#0 SCREEN#1
+Alias (byte*) CHARGEN#0 = (byte*) CHARGEN#1 (byte*) CHARGEN#2
+Alias (byte*) PROCPORT#0 = (byte*) PROCPORT#1 (byte*) PROCPORT#3
+Alias (byte*) SCREEN#0 = (byte*) SCREEN#1 (byte*) SCREEN#2
+Alias (byte*) main::CHAR_A#0 = (byte*~) main::$0
+Alias (byte) main::bits#0 = (byte~) main::$1
+Alias (byte) main::bits#1 = (byte~) main::$5
+Alias (byte*) main::sc#5 = (byte*) main::sc#6
+Alias (byte) main::bits#2 = (byte) main::bits#4
+Alias (byte) main::x#3 = (byte) main::x#4
+Alias (byte) main::y#5 = (byte) main::y#6
+Alias (byte*) main::CHAR_A#4 = (byte*) main::CHAR_A#5
+Alias (byte*) PROCPORT#6 = (byte*) PROCPORT#7
+Alias (byte*) main::sc#1 = (byte*) main::sc#4
+Alias (byte) main::y#3 = (byte) main::y#4
+Alias (byte*) main::CHAR_A#2 = (byte*) main::CHAR_A#3
+Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#4 (byte*) PROCPORT#5
+Alias (byte*) main::sc#2 = (byte*~) main::$7
+Succesful SSA optimization Pass2AliasElimination
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
+ *((byte*) PROCPORT#0) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#0
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#0 main::@5/(byte*) PROCPORT#2 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte*) PROCPORT#6 ← phi( main::@1/(byte*) PROCPORT#8 main::@3/(byte*) PROCPORT#2 )
+ (byte*) main::CHAR_A#4 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@3/(byte*) main::CHAR_A#2 )
+ (byte) main::y#5 ← phi( main::@1/(byte) main::y#2 main::@3/(byte) main::y#3 )
+ (byte) main::x#3 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#5 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte*) PROCPORT#2 ← phi( main::@2/(byte*) PROCPORT#6 main::@4/(byte*) PROCPORT#6 )
+ (byte*) main::CHAR_A#2 ← phi( main::@2/(byte*) main::CHAR_A#4 main::@4/(byte*) main::CHAR_A#4 )
+ (byte) main::y#3 ← phi( main::@2/(byte) main::y#5 main::@4/(byte) main::y#5 )
+ (byte) main::x#2 ← phi( main::@2/(byte) main::x#3 main::@4/(byte) main::x#3 )
+ (byte) main::bits#3 ← phi( main::@2/(byte) main::bits#2 main::@4/(byte) main::bits#2 )
+ (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#5 main::@4/(byte*) main::sc#5 )
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#3 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#3
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#2) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Not aliassing across scopes: main::sc#0 SCREEN#0
+Alias (byte*) main::sc#3 = (byte*) main::sc#5
+Alias (byte) main::bits#2 = (byte) main::bits#3
+Alias (byte) main::x#2 = (byte) main::x#3
+Alias (byte) main::y#3 = (byte) main::y#5
+Alias (byte*) main::CHAR_A#2 = (byte*) main::CHAR_A#4
+Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#6
+Succesful SSA optimization Pass2AliasElimination
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
+ *((byte*) PROCPORT#0) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#0
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#0 main::@5/(byte*) PROCPORT#2 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte*) PROCPORT#2 ← phi( main::@1/(byte*) PROCPORT#8 main::@3/(byte*) PROCPORT#2 )
+ (byte*) main::CHAR_A#2 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@3/(byte*) main::CHAR_A#2 )
+ (byte) main::y#3 ← phi( main::@1/(byte) main::y#2 main::@3/(byte) main::y#3 )
+ (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#3
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#2) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Not aliassing across scopes: main::sc#0 SCREEN#0
+Self Phi Eliminated (byte) main::y#3
+Self Phi Eliminated (byte*) main::CHAR_A#2
+Self Phi Eliminated (byte*) PROCPORT#2
+Succesful SSA optimization Pass2SelfPhiElimination
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
+ *((byte*) PROCPORT#0) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#0
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#0 main::@5/(byte*) PROCPORT#2 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte*) PROCPORT#2 ← phi( main::@1/(byte*) PROCPORT#8 )
+ (byte*) main::CHAR_A#2 ← phi( main::@1/(byte*) main::CHAR_A#1 )
+ (byte) main::y#3 ← phi( main::@1/(byte) main::y#2 )
+ (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#3
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#2) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Redundant Phi (byte) main::y#3 (byte) main::y#2
+Redundant Phi (byte*) main::CHAR_A#2 (byte*) main::CHAR_A#1
+Redundant Phi (byte*) PROCPORT#2 (byte*) PROCPORT#8
+Succesful SSA optimization Pass2RedundantPhiElimination
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
+ *((byte*) PROCPORT#0) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#0
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#0 main::@5/(byte*) PROCPORT#8 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
+ if((boolean~) main::$4) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
+ if((boolean~) main::$6) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
+ if((boolean~) main::$8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#8) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Simple Condition (boolean~) main::$4 if((byte~) main::$2==(byte) 0) goto main::@3
+Simple Condition (boolean~) main::$6 if((byte) main::x#1!=(byte) 8) goto main::@2
+Simple Condition (boolean~) main::$8 if((byte) main::y#1!=(byte) 8) goto main::@1
+Succesful SSA optimization Pass2ConditionalJumpSimplification
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ (byte*) PROCPORT#0 ← (byte) 1
+ (byte*) CHARGEN#0 ← (word) 53248
+ (byte*) SCREEN#0 ← (word) 1024
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
+ *((byte*) PROCPORT#0) ← (byte) 50
+ (byte*) main::sc#0 ← (byte*) SCREEN#0
+ (byte) main::y#0 ← (byte) 0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(byte*) PROCPORT#0 main::@5/(byte*) PROCPORT#8 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ (byte) main::x#0 ← (byte) 0
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte) main::c#0 ← (byte) '.'
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ if((byte~) main::$2==(byte) 0) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ if((byte) main::x#1!=(byte) 8) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ (byte) main::c#1 ← (byte) '*'
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ if((byte) main::y#1!=(byte) 8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#8) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Constant (const byte*) PROCPORT#0 = 1
+Constant (const byte*) CHARGEN#0 = 53248
+Constant (const byte*) SCREEN#0 = 1024
+Constant (const byte) main::y#0 = 0
+Constant (const byte) main::x#0 = 0
+Constant (const byte) main::c#0 = '.'
+Constant (const byte) main::c#1 = '*'
+Succesful SSA optimization Pass2ConstantIdentification
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ (byte*) main::CHAR_A#0 ← (const byte*) CHARGEN#0 + (byte) 8
+ *((const byte*) PROCPORT#0) ← (byte) 50
+ (byte*) main::sc#0 ← (const byte*) SCREEN#0
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(const byte*) PROCPORT#0 main::@5/(byte*) PROCPORT#8 )
+ (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ if((byte~) main::$2==(byte) 0) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ if((byte) main::x#1!=(byte) 8) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ if((byte) main::y#1!=(byte) 8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#8) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Constant (const byte*) main::CHAR_A#0 = CHARGEN#0+8
+Constant (const byte*) main::sc#0 = SCREEN#0
+Succesful SSA optimization Pass2ConstantIdentification
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ *((const byte*) PROCPORT#0) ← (byte) 50
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(const byte*) PROCPORT#0 main::@5/(byte*) PROCPORT#8 )
+ (byte*) main::sc#7 ← phi( main/(const byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(const byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#1 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ if((byte~) main::$2==(byte) 0) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ if((byte) main::x#1!=(byte) 8) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ if((byte) main::y#1!=(byte) 8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#8) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
+Not culling empty block because it shares successor with its predecessor. (label) main::@4
+Self Phi Eliminated (byte*) main::CHAR_A#1
+Self Phi Eliminated (byte*) PROCPORT#8
+Succesful SSA optimization Pass2SelfPhiElimination
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ *((const byte*) PROCPORT#0) ← (byte) 50
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) PROCPORT#8 ← phi( main/(const byte*) PROCPORT#0 )
+ (byte*) main::sc#7 ← phi( main/(const byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte*) main::CHAR_A#1 ← phi( main/(const byte*) main::CHAR_A#0 )
+ (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ if((byte~) main::$2==(byte) 0) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ if((byte) main::x#1!=(byte) 8) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ if((byte) main::y#1!=(byte) 8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((byte*) PROCPORT#8) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Redundant Phi (byte*) main::CHAR_A#1 (const byte*) main::CHAR_A#0
+Redundant Phi (byte*) PROCPORT#8 (const byte*) PROCPORT#0
+Succesful SSA optimization Pass2RedundantPhiElimination
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ *((const byte*) PROCPORT#0) ← (byte) 50
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) main::sc#7 ← phi( main/(const byte*) main::sc#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@5/(byte) main::y#1 )
+ (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ if((byte~) main::$2==(byte) 0) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(const byte) main::c#0 main::@4/(const byte) main::c#1 )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ if((byte) main::x#1!=(byte) 8) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ if((byte) main::y#1!=(byte) 8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((const byte*) PROCPORT#0) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+Multiple usages for variable. Not optimizing sub-constant (byte) main::y#2
+Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
+Not culling empty block because it shares successor with its predecessor. (label) main::@4
+Multiple usages for variable. Not optimizing sub-constant (byte) main::y#2
+Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
+Inlining constant with var siblings (const byte) main::y#0
+Inlining constant with var siblings (const byte) main::y#0
+Inlining constant with var siblings (const byte) main::x#0
+Inlining constant with var siblings (const byte) main::x#0
+Inlining constant with var siblings (const byte) main::c#0
+Inlining constant with different constant siblings (const byte) main::c#0
+Inlining constant with var siblings (const byte) main::c#1
+Inlining constant with different constant siblings (const byte) main::c#1
+Inlining constant with var siblings (const byte*) main::sc#0
+Inlining constant with var siblings (const byte*) main::sc#0
+Inlining constant with var siblings (const byte*) main::sc#0
+Inlining constant with var siblings (const byte*) main::sc#0
+Constant inlined main::c#1 = (byte) '*'
+Constant inlined main::x#0 = (byte) 0
+Constant inlined main::c#0 = (byte) '.'
+Constant inlined main::sc#0 = (const byte*) SCREEN#0
+Constant inlined main::y#0 = (byte) 0
+Succesful SSA optimization Pass2ConstantInlining
+CONTROL FLOW GRAPH
+@begin: scope:[] from
+ to:@1
+main: scope:[main] from @1
+ asm { sei }
+ *((const byte*) PROCPORT#0) ← (byte) 50
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 )
+ (byte) main::y#2 ← phi( main/(byte) 0 main::@5/(byte) main::y#1 )
+ (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::x#1 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 )
+ (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 )
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ if((byte~) main::$2==(byte) 0) goto main::@3
+ to:main::@4
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(byte) '.' main::@4/(byte) '*' )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ if((byte) main::x#1!=(byte) 8) goto main::@2
+ to:main::@5
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ if((byte) main::y#1!=(byte) 8) goto main::@1
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((const byte*) PROCPORT#0) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+
+FINAL SYMBOL TABLE
+(label) @1
+(label) @begin
+(label) @end
+(byte*) CHARGEN
+(const byte*) CHARGEN#0 = (word) 53248
+(byte*) PROCPORT
+(const byte*) PROCPORT#0 = (byte) 1
+(byte*) SCREEN
+(const byte*) SCREEN#0 = (word) 1024
+(void()) main()
+(byte~) main::$2
+(label) main::@1
+(label) main::@2
+(label) main::@3
+(label) main::@4
+(label) main::@5
+(label) main::@6
+(label) main::@return
+(byte*) main::CHAR_A
+(const byte*) main::CHAR_A#0 = (const byte*) CHARGEN#0+(byte) 8
+(byte) main::bits
+(byte) main::bits#0
+(byte) main::bits#1
+(byte) main::bits#2
+(byte) main::c
+(byte) main::c#2
+(byte*) main::sc
+(byte*) main::sc#1
+(byte*) main::sc#2
+(byte*) main::sc#3
+(byte*) main::sc#7
+(byte) main::x
+(byte) main::x#1
+(byte) main::x#2
+(byte) main::y
+(byte) main::y#1
+(byte) main::y#2
+
+Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@4 main::@3 main::@5 main::@6 main::@return
+Added new block during phi lifting main::@7(between main::@5 and main::@1)
+Added new block during phi lifting main::@8(between main::@3 and main::@2)
+Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@4 main::@3 main::@5 main::@6 main::@return main::@7 main::@8
+CONTROL FLOW GRAPH - PHI LIFTED
+@begin: scope:[] from
+ to:@1
+@1: scope:[] from @begin
+ call main param-assignment
+ to:@end
+@end: scope:[] from @1
+main: scope:[main] from @1
+ asm { sei }
+ *((const byte*) PROCPORT#0) ← (byte) 50
+ to:main::@1
+main::@1: scope:[main] from main main::@7
+ (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*~) main::sc#8 )
+ (byte) main::y#2 ← phi( main/(byte) 0 main::@7/(byte~) main::y#7 )
+ (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
+ (byte~) main::bits#5 ← (byte) main::bits#0
+ (byte*~) main::sc#9 ← (byte*) main::sc#7
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@8
+ (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@8/(byte~) main::x#5 )
+ (byte*) main::sc#3 ← phi( main::@1/(byte*~) main::sc#9 main::@8/(byte*~) main::sc#10 )
+ (byte) main::bits#2 ← phi( main::@1/(byte~) main::bits#5 main::@8/(byte~) main::bits#6 )
+ (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
+ if((byte~) main::$2==(byte) 0) goto main::@3
+ to:main::@4
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@3: scope:[main] from main::@2 main::@4
+ (byte) main::c#2 ← phi( main::@2/(byte) '.' main::@4/(byte) '*' )
+ *((byte*) main::sc#3) ← (byte) main::c#2
+ (byte*) main::sc#1 ← ++ (byte*) main::sc#3
+ (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
+ (byte) main::x#1 ← ++ (byte) main::x#2
+ if((byte) main::x#1!=(byte) 8) goto main::@8
+ to:main::@5
+main::@5: scope:[main] from main::@3
+ (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
+ (byte) main::y#1 ← ++ (byte) main::y#2
+ if((byte) main::y#1!=(byte) 8) goto main::@7
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ *((const byte*) PROCPORT#0) ← (byte) 55
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ return
+ to:@return
+main::@7: scope:[main] from main::@5
+ (byte~) main::y#7 ← (byte) main::y#1
+ (byte*~) main::sc#8 ← (byte*) main::sc#2
+ to:main::@1
+main::@8: scope:[main] from main::@3
+ (byte~) main::bits#6 ← (byte) main::bits#1
+ (byte*~) main::sc#10 ← (byte*) main::sc#1
+ (byte~) main::x#5 ← (byte) main::x#1
+ to:main::@2
+
+CALL GRAPH
+Calls in [] to 0:main
+
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+CONTROL FLOW GRAPH - LIVE RANGES FOUND
+@begin: scope:[] from
+ to:@1
+@1: scope:[] from @begin
+ [0] call main param-assignment [ ]
+ to:@end
+@end: scope:[] from @1
+main: scope:[main] from @1
+ asm { sei }
+ [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
+ to:main::@1
+main::@1: scope:[main] from main main::@7
+ [3] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*~) main::sc#8 ) [ main::y#2 main::sc#7 ]
+ [3] (byte) main::y#2 ← phi( main/(byte) 0 main::@7/(byte~) main::y#7 ) [ main::y#2 main::sc#7 ]
+ [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ]
+ [5] (byte~) main::bits#5 ← (byte) main::bits#0 [ main::y#2 main::sc#7 main::bits#5 ]
+ [6] (byte*~) main::sc#9 ← (byte*) main::sc#7 [ main::y#2 main::bits#5 main::sc#9 ]
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@8
+ [7] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@8/(byte~) main::x#5 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [7] (byte*) main::sc#3 ← phi( main::@1/(byte*~) main::sc#9 main::@8/(byte*~) main::sc#10 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [7] (byte) main::bits#2 ← phi( main::@1/(byte~) main::bits#5 main::@8/(byte~) main::bits#6 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [8] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
+ [9] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ to:main::@4
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@3: scope:[main] from main::@2 main::@4
+ [10] (byte) main::c#2 ← phi( main::@2/(byte) '.' main::@4/(byte) '*' ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::c#2 ]
+ [11] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [12] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
+ [13] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::sc#1 main::bits#1 ]
+ [14] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::sc#1 main::bits#1 main::x#1 ]
+ [15] if((byte) main::x#1!=(byte) 8) goto main::@8 [ main::y#2 main::sc#1 main::bits#1 main::x#1 ]
+ to:main::@5
+main::@5: scope:[main] from main::@3
+ [16] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
+ [17] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::sc#2 main::y#1 ]
+ [18] if((byte) main::y#1!=(byte) 8) goto main::@7 [ main::sc#2 main::y#1 ]
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ [19] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ [21] return [ ]
+ to:@return
+main::@7: scope:[main] from main::@5
+ [22] (byte~) main::y#7 ← (byte) main::y#1 [ main::y#7 main::sc#2 ]
+ [23] (byte*~) main::sc#8 ← (byte*) main::sc#2 [ main::y#7 main::sc#8 ]
+ to:main::@1
+main::@8: scope:[main] from main::@3
+ [24] (byte~) main::bits#6 ← (byte) main::bits#1 [ main::y#2 main::bits#6 main::sc#1 main::x#1 ]
+ [25] (byte*~) main::sc#10 ← (byte*) main::sc#1 [ main::y#2 main::bits#6 main::sc#10 main::x#1 ]
+ [26] (byte~) main::x#5 ← (byte) main::x#1 [ main::y#2 main::bits#6 main::sc#10 main::x#5 ]
+ to:main::@2
+
+Created 6 initial phi equivalence classes
+Coalesced [5] main::bits#5 ← main::bits#0
+Coalesced [6] main::sc#9 ← main::sc#7
+Coalesced [22] main::y#7 ← main::y#1
+Coalesced [23] main::sc#8 ← main::sc#2
+Coalesced [24] main::bits#6 ← main::bits#1
+Coalesced [25] main::sc#10 ← main::sc#1
+Coalesced [26] main::x#5 ← main::x#1
+Coalesced down to 5 phi equivalence classes
+Not culling empty block because it shares successor with its predecessor. (label) main::@4
+Culled Empty Block (label) main::@7
+Culled Empty Block (label) main::@8
+Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@4 main::@3 main::@5 main::@6 main::@return
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+Propagating live ranges...
+CONTROL FLOW GRAPH - PHI MEM COALESCED
+@begin: scope:[] from
+ to:@1
+@1: scope:[] from @begin
+ [0] call main param-assignment [ ]
+ to:@end
+@end: scope:[] from @1
+main: scope:[main] from @1
+ asm { sei }
+ [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
+ to:main::@1
+main::@1: scope:[main] from main main::@5
+ [3] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 ) [ main::y#2 main::sc#7 ]
+ [3] (byte) main::y#2 ← phi( main/(byte) 0 main::@5/(byte) main::y#1 ) [ main::y#2 main::sc#7 ]
+ [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ]
+ to:main::@2
+main::@2: scope:[main] from main::@1 main::@3
+ [5] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [5] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [5] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
+ [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ to:main::@4
+main::@4: scope:[main] from main::@2
+ to:main::@3
+main::@3: scope:[main] from main::@2 main::@4
+ [8] (byte) main::c#2 ← phi( main::@2/(byte) '.' main::@4/(byte) '*' ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::c#2 ]
+ [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
+ [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
+ [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ]
+ [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
+ [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
+ to:main::@5
+main::@5: scope:[main] from main::@3
+ [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
+ [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ]
+ [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ]
+ to:main::@6
+main::@6: scope:[main] from main::@5
+ [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ asm { cli }
+ to:main::@return
+main::@return: scope:[main] from main::@6
+ [19] return [ ]
+ to:@return
+
+DOMINATORS
+@begin dominated by @begin
+@1 dominated by @1 @begin
+@end dominated by @1 @end @begin
+main dominated by @1 @begin main
+main::@1 dominated by @1 @begin main::@1 main
+main::@2 dominated by @1 @begin main::@2 main::@1 main
+main::@4 dominated by @1 @begin main::@2 main::@1 main::@4 main
+main::@3 dominated by @1 @begin main::@2 main::@1 main::@3 main
+main::@5 dominated by @1 @begin main::@2 main::@1 main::@3 main::@5 main
+main::@6 dominated by @1 @begin main::@2 main::@1 main::@3 main::@6 main::@5 main
+main::@return dominated by @1 main::@return @begin main::@2 main::@1 main::@3 main::@6 main::@5 main
+
+Found back edge: Loop head: main::@2 tails: main::@3 blocks: null
+Found back edge: Loop head: main::@1 tails: main::@5 blocks: null
+Populated: Loop head: main::@2 tails: main::@3 blocks: main::@3 main::@2 main::@4
+Populated: Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@3 main::@2 main::@4 main::@1
+NATURAL LOOPS
+Loop head: main::@2 tails: main::@3 blocks: main::@3 main::@2 main::@4
+Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@3 main::@2 main::@4 main::@1
+
+Found 0 loops in scope []
+Found 2 loops in scope [main]
+ Loop head: main::@2 tails: main::@3 blocks: main::@3 main::@2 main::@4
+ Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@3 main::@2 main::@4 main::@1
+NATURAL LOOPS WITH DEPTH
+Loop head: main::@2 tails: main::@3 blocks: main::@3 main::@2 main::@4 depth: 2
+Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@3 main::@2 main::@4 main::@1 depth: 1
+
+
+VARIABLE REGISTER WEIGHTS
+(byte*) CHARGEN
+(byte*) PROCPORT
+(byte*) SCREEN
+(void()) main()
+(byte~) main::$2 202.0
+(byte*) main::CHAR_A
+(byte) main::bits
+(byte) main::bits#0 22.0
+(byte) main::bits#1 67.33333333333333
+(byte) main::bits#2 52.33333333333333
+(byte) main::c
+(byte) main::c#2 101.0
+(byte*) main::sc
+(byte*) main::sc#1 53.25
+(byte*) main::sc#2 7.333333333333333
+(byte*) main::sc#3 62.8
+(byte*) main::sc#7 11.0
+(byte) main::x
+(byte) main::x#1 151.5
+(byte) main::x#2 28.857142857142858
+(byte) main::y
+(byte) main::y#1 16.5
+(byte) main::y#2 2.75
+
+Initial phi equivalence classes
+[ main::y#2 main::y#1 ]
+[ main::bits#2 main::bits#0 main::bits#1 ]
+[ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
+[ main::x#2 main::x#1 ]
+[ main::c#2 ]
+Added variable main::$2 to zero page equivalence class [ main::$2 ]
+Complete equivalence classes
+[ main::y#2 main::y#1 ]
+[ main::bits#2 main::bits#0 main::bits#1 ]
+[ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
+[ main::x#2 main::x#1 ]
+[ main::c#2 ]
+[ main::$2 ]
+Allocated zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Allocated zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
+Allocated zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
+Allocated zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
+Allocated zp ZP_BYTE:7 [ main::c#2 ]
+Allocated zp ZP_BYTE:8 [ main::$2 ]
+INITIAL ASM
+//SEG0 Basic Upstart
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+//SEG1 Global Constants & labels
+ .const PROCPORT = 1
+ .const CHARGEN = $d000
+ .const SCREEN = $400
+//SEG2 @begin
+bbegin:
+ jmp b1
+//SEG3 @1
+b1:
+//SEG4 [0] call main param-assignment [ ]
+ jsr main
+ jmp bend
+//SEG5 @end
+bend:
+//SEG6 main
+main: {
+ .const CHAR_A = CHARGEN+8
+ .label _2 = 8
+ .label bits = 3
+ .label sc = 4
+ .label x = 6
+ .label y = 2
+ .label c = 7
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ lda #$32
+ sta PROCPORT
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ b1_from_main:
+ //SEG10 [3] phi (byte*) main::sc#7 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ lda #SCREEN
+ sta sc+1
+ //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
+ lda #0
+ sta y
+ jmp b1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ b1_from_b5:
+ //SEG13 [3] phi (byte*) main::sc#7 = (byte*) main::sc#2 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#1] -- register_copy
+ jmp b1
+ //SEG15 main::@1
+ b1:
+ //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
+ ldx y
+ lda CHAR_A,x
+ sta bits
+ //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ b2_from_b1:
+ //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- zpby1=coby1
+ lda #0
+ sta x
+ //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#7 [phi:main::@1->main::@2#1] -- register_copy
+ //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
+ jmp b2
+ //SEG21 [5] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
+ b2_from_b3:
+ //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@3->main::@2#0] -- register_copy
+ //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@3->main::@2#1] -- register_copy
+ //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@3->main::@2#2] -- register_copy
+ jmp b2
+ //SEG25 main::@2
+ b2:
+ //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- zpby1=zpby2_band_coby1
+ lda bits
+ and #$80
+ sta _2
+ //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- zpby1_eq_0_then_la1
+ lda _2
+ beq b3_from_b2
+ jmp b4
+ //SEG28 main::@4
+ b4:
+ //SEG29 [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
+ b3_from_b4:
+ //SEG30 [8] phi (byte) main::c#2 = (byte) '*' [phi:main::@4->main::@3#0] -- zpby1=coby1
+ lda #'*'
+ sta c
+ jmp b3
+ //SEG31 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
+ b3_from_b2:
+ //SEG32 [8] phi (byte) main::c#2 = (byte) '.' [phi:main::@2->main::@3#0] -- zpby1=coby1
+ lda #'.'
+ sta c
+ jmp b3
+ //SEG33 main::@3
+ b3:
+ //SEG34 [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=zpby1
+ ldy #0
+ lda c
+ sta (sc),y
+ //SEG35 [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
+ inc sc
+ bne !+
+ inc sc+1
+ !:
+ //SEG36 [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
+ asl bits
+ //SEG37 [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- zpby1=_inc_zpby1
+ inc x
+ //SEG38 [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- zpby1_neq_coby1_then_la1
+ lda x
+ cmp #8
+ bne b2_from_b3
+ jmp b5
+ //SEG39 main::@5
+ b5:
+ //SEG40 [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
+ lda sc
+ clc
+ adc #$20
+ sta sc
+ bcc !+
+ inc sc+1
+ !:
+ //SEG41 [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
+ inc y
+ //SEG42 [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
+ lda y
+ cmp #8
+ bne b1_from_b5
+ jmp b6
+ //SEG43 main::@6
+ b6:
+ //SEG44 [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
+ lda #$37
+ sta PROCPORT
+ //SEG45 asm { cli }
+ cli
+ jmp breturn
+ //SEG46 main::@return
+ breturn:
+ //SEG47 [19] return [ ]
+ rts
+}
+
+REGISTER UPLIFT POTENTIAL REGISTERS
+Statement [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
+Statement [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] always clobbers reg byte a
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
+Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
+Statement [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] always clobbers reg byte y
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
+Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
+Statement [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] always clobbers reg byte a
+Statement [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
+Statement [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
+Statement [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] always clobbers reg byte a
+Statement [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] always clobbers reg byte a
+Statement [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] always clobbers reg byte y
+Statement [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] always clobbers reg byte a
+Statement [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
+Potential registers zp ZP_BYTE:2 [ main::y#2 main::y#1 ] : zp ZP_BYTE:2 , reg byte x ,
+Potential registers zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] : zp ZP_BYTE:3 , reg byte x ,
+Potential registers zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] : zp ZP_PTR_BYTE:4 ,
+Potential registers zp ZP_BYTE:6 [ main::x#2 main::x#1 ] : zp ZP_BYTE:6 , reg byte x ,
+Potential registers zp ZP_BYTE:7 [ main::c#2 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
+Potential registers zp ZP_BYTE:8 [ main::$2 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
+
+REGISTER UPLIFT SCOPES
+Uplift Scope [main] 202: zp ZP_BYTE:8 [ main::$2 ] 180.36: zp ZP_BYTE:6 [ main::x#2 main::x#1 ] 141.67: zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] 134.38: zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] 101: zp ZP_BYTE:7 [ main::c#2 ] 19.25: zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Uplift Scope []
+
+Uplifting [main] best 7259 combination reg byte a [ main::$2 ] reg byte x [ main::x#2 main::x#1 ] zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ] reg byte a [ main::c#2 ] zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Uplifting [] best 7259 combination
+Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
+Uplifting [main] best 7259 combination zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
+Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Uplifting [main] best 7259 combination zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Removing instruction jmp b1
+Removing instruction jmp bend
+Removing instruction jmp b1
+Removing instruction jmp b2
+Removing instruction jmp b4
+Removing instruction jmp b3
+Removing instruction jmp b5
+Removing instruction jmp b6
+Removing instruction jmp breturn
+Succesful ASM optimization Pass5NextJumpElimination
+ASSEMBLER
+//SEG0 Basic Upstart
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+//SEG1 Global Constants & labels
+ .const PROCPORT = 1
+ .const CHARGEN = $d000
+ .const SCREEN = $400
+//SEG2 @begin
+bbegin:
+//SEG3 @1
+b1:
+//SEG4 [0] call main param-assignment [ ]
+ jsr main
+//SEG5 @end
+bend:
+//SEG6 main
+main: {
+ .const CHAR_A = CHARGEN+8
+ .label bits = 3
+ .label sc = 4
+ .label y = 2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ lda #$32
+ sta PROCPORT
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ b1_from_main:
+ //SEG10 [3] phi (byte*) main::sc#7 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ lda #SCREEN
+ sta sc+1
+ //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
+ lda #0
+ sta y
+ jmp b1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ b1_from_b5:
+ //SEG13 [3] phi (byte*) main::sc#7 = (byte*) main::sc#2 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
+ b1:
+ //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
+ ldx y
+ lda CHAR_A,x
+ sta bits
+ //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ b2_from_b1:
+ //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
+ ldx #0
+ //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#7 [phi:main::@1->main::@2#1] -- register_copy
+ //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
+ jmp b2
+ //SEG21 [5] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
+ b2_from_b3:
+ //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@3->main::@2#0] -- register_copy
+ //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@3->main::@2#1] -- register_copy
+ //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@3->main::@2#2] -- register_copy
+ //SEG25 main::@2
+ b2:
+ //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
+ lda bits
+ and #$80
+ //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
+ cmp #0
+ beq b3_from_b2
+ //SEG28 main::@4
+ b4:
+ //SEG29 [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
+ b3_from_b4:
+ //SEG30 [8] phi (byte) main::c#2 = (byte) '*' [phi:main::@4->main::@3#0] -- aby=coby1
+ lda #'*'
+ jmp b3
+ //SEG31 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
+ b3_from_b2:
+ //SEG32 [8] phi (byte) main::c#2 = (byte) '.' [phi:main::@2->main::@3#0] -- aby=coby1
+ lda #'.'
+ //SEG33 main::@3
+ b3:
+ //SEG34 [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=aby
+ ldy #0
+ sta (sc),y
+ //SEG35 [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
+ inc sc
+ bne !+
+ inc sc+1
+ !:
+ //SEG36 [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
+ asl bits
+ //SEG37 [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
+ inx
+ //SEG38 [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
+ cpx #8
+ bne b2_from_b3
+ //SEG39 main::@5
+ b5:
+ //SEG40 [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
+ lda sc
+ clc
+ adc #$20
+ sta sc
+ bcc !+
+ inc sc+1
+ !:
+ //SEG41 [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
+ inc y
+ //SEG42 [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
+ lda y
+ cmp #8
+ bne b1_from_b5
+ //SEG43 main::@6
+ b6:
+ //SEG44 [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
+ lda #$37
+ sta PROCPORT
+ //SEG45 asm { cli }
+ cli
+ //SEG46 main::@return
+ breturn:
+ //SEG47 [19] return [ ]
+ rts
+}
+
+Replacing label b2_from_b3 with b2
+Replacing label b1_from_b5 with b1
+Removing instruction bbegin:
+Removing instruction b1_from_b5:
+Removing instruction b2_from_b3:
+Removing instruction b3_from_b4:
+Succesful ASM optimization Pass5RedundantLabelElimination
+ASSEMBLER
+//SEG0 Basic Upstart
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+//SEG1 Global Constants & labels
+ .const PROCPORT = 1
+ .const CHARGEN = $d000
+ .const SCREEN = $400
+//SEG2 @begin
+//SEG3 @1
+b1:
+//SEG4 [0] call main param-assignment [ ]
+ jsr main
+//SEG5 @end
+bend:
+//SEG6 main
+main: {
+ .const CHAR_A = CHARGEN+8
+ .label bits = 3
+ .label sc = 4
+ .label y = 2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ lda #$32
+ sta PROCPORT
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ b1_from_main:
+ //SEG10 [3] phi (byte*) main::sc#7 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ lda #SCREEN
+ sta sc+1
+ //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
+ lda #0
+ sta y
+ jmp b1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::sc#7 = (byte*) main::sc#2 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
+ b1:
+ //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
+ ldx y
+ lda CHAR_A,x
+ sta bits
+ //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ b2_from_b1:
+ //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
+ ldx #0
+ //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#7 [phi:main::@1->main::@2#1] -- register_copy
+ //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
+ jmp b2
+ //SEG21 [5] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
+ //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@3->main::@2#0] -- register_copy
+ //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@3->main::@2#1] -- register_copy
+ //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@3->main::@2#2] -- register_copy
+ //SEG25 main::@2
+ b2:
+ //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
+ lda bits
+ and #$80
+ //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
+ cmp #0
+ beq b3_from_b2
+ //SEG28 main::@4
+ b4:
+ //SEG29 [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
+ //SEG30 [8] phi (byte) main::c#2 = (byte) '*' [phi:main::@4->main::@3#0] -- aby=coby1
+ lda #'*'
+ jmp b3
+ //SEG31 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
+ b3_from_b2:
+ //SEG32 [8] phi (byte) main::c#2 = (byte) '.' [phi:main::@2->main::@3#0] -- aby=coby1
+ lda #'.'
+ //SEG33 main::@3
+ b3:
+ //SEG34 [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=aby
+ ldy #0
+ sta (sc),y
+ //SEG35 [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
+ inc sc
+ bne !+
+ inc sc+1
+ !:
+ //SEG36 [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
+ asl bits
+ //SEG37 [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
+ inx
+ //SEG38 [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
+ cpx #8
+ bne b2
+ //SEG39 main::@5
+ b5:
+ //SEG40 [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
+ lda sc
+ clc
+ adc #$20
+ sta sc
+ bcc !+
+ inc sc+1
+ !:
+ //SEG41 [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
+ inc y
+ //SEG42 [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
+ lda y
+ cmp #8
+ bne b1
+ //SEG43 main::@6
+ b6:
+ //SEG44 [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
+ lda #$37
+ sta PROCPORT
+ //SEG45 asm { cli }
+ cli
+ //SEG46 main::@return
+ breturn:
+ //SEG47 [19] return [ ]
+ rts
+}
+
+Removing instruction b1:
+Removing instruction bend:
+Removing instruction b1_from_main:
+Removing instruction b2_from_b1:
+Removing instruction b4:
+Removing instruction b5:
+Removing instruction b6:
+Removing instruction breturn:
+Succesful ASM optimization Pass5UnusedLabelElimination
+ASSEMBLER
+//SEG0 Basic Upstart
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+//SEG1 Global Constants & labels
+ .const PROCPORT = 1
+ .const CHARGEN = $d000
+ .const SCREEN = $400
+//SEG2 @begin
+//SEG3 @1
+//SEG4 [0] call main param-assignment [ ]
+ jsr main
+//SEG5 @end
+//SEG6 main
+main: {
+ .const CHAR_A = CHARGEN+8
+ .label bits = 3
+ .label sc = 4
+ .label y = 2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ lda #$32
+ sta PROCPORT
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ //SEG10 [3] phi (byte*) main::sc#7 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ lda #SCREEN
+ sta sc+1
+ //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
+ lda #0
+ sta y
+ jmp b1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::sc#7 = (byte*) main::sc#2 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
+ b1:
+ //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
+ ldx y
+ lda CHAR_A,x
+ sta bits
+ //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
+ ldx #0
+ //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#7 [phi:main::@1->main::@2#1] -- register_copy
+ //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
+ jmp b2
+ //SEG21 [5] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
+ //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@3->main::@2#0] -- register_copy
+ //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@3->main::@2#1] -- register_copy
+ //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@3->main::@2#2] -- register_copy
+ //SEG25 main::@2
+ b2:
+ //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
+ lda bits
+ and #$80
+ //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
+ cmp #0
+ beq b3_from_b2
+ //SEG28 main::@4
+ //SEG29 [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
+ //SEG30 [8] phi (byte) main::c#2 = (byte) '*' [phi:main::@4->main::@3#0] -- aby=coby1
+ lda #'*'
+ jmp b3
+ //SEG31 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
+ b3_from_b2:
+ //SEG32 [8] phi (byte) main::c#2 = (byte) '.' [phi:main::@2->main::@3#0] -- aby=coby1
+ lda #'.'
+ //SEG33 main::@3
+ b3:
+ //SEG34 [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=aby
+ ldy #0
+ sta (sc),y
+ //SEG35 [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
+ inc sc
+ bne !+
+ inc sc+1
+ !:
+ //SEG36 [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
+ asl bits
+ //SEG37 [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
+ inx
+ //SEG38 [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
+ cpx #8
+ bne b2
+ //SEG39 main::@5
+ //SEG40 [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
+ lda sc
+ clc
+ adc #$20
+ sta sc
+ bcc !+
+ inc sc+1
+ !:
+ //SEG41 [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
+ inc y
+ //SEG42 [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
+ lda y
+ cmp #8
+ bne b1
+ //SEG43 main::@6
+ //SEG44 [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
+ lda #$37
+ sta PROCPORT
+ //SEG45 asm { cli }
+ cli
+ //SEG46 main::@return
+ //SEG47 [19] return [ ]
+ rts
+}
+
+Removing instruction jmp b1
+Removing instruction jmp b2
+Succesful ASM optimization Pass5NextJumpElimination
+ASSEMBLER
+//SEG0 Basic Upstart
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+//SEG1 Global Constants & labels
+ .const PROCPORT = 1
+ .const CHARGEN = $d000
+ .const SCREEN = $400
+//SEG2 @begin
+//SEG3 @1
+//SEG4 [0] call main param-assignment [ ]
+ jsr main
+//SEG5 @end
+//SEG6 main
+main: {
+ .const CHAR_A = CHARGEN+8
+ .label bits = 3
+ .label sc = 4
+ .label y = 2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ lda #$32
+ sta PROCPORT
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ //SEG10 [3] phi (byte*) main::sc#7 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ lda #SCREEN
+ sta sc+1
+ //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
+ lda #0
+ sta y
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::sc#7 = (byte*) main::sc#2 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
+ b1:
+ //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
+ ldx y
+ lda CHAR_A,x
+ sta bits
+ //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
+ ldx #0
+ //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#7 [phi:main::@1->main::@2#1] -- register_copy
+ //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
+ //SEG21 [5] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
+ //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@3->main::@2#0] -- register_copy
+ //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@3->main::@2#1] -- register_copy
+ //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@3->main::@2#2] -- register_copy
+ //SEG25 main::@2
+ b2:
+ //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
+ lda bits
+ and #$80
+ //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
+ cmp #0
+ beq b3_from_b2
+ //SEG28 main::@4
+ //SEG29 [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
+ //SEG30 [8] phi (byte) main::c#2 = (byte) '*' [phi:main::@4->main::@3#0] -- aby=coby1
+ lda #'*'
+ jmp b3
+ //SEG31 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
+ b3_from_b2:
+ //SEG32 [8] phi (byte) main::c#2 = (byte) '.' [phi:main::@2->main::@3#0] -- aby=coby1
+ lda #'.'
+ //SEG33 main::@3
+ b3:
+ //SEG34 [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=aby
+ ldy #0
+ sta (sc),y
+ //SEG35 [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
+ inc sc
+ bne !+
+ inc sc+1
+ !:
+ //SEG36 [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
+ asl bits
+ //SEG37 [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
+ inx
+ //SEG38 [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
+ cpx #8
+ bne b2
+ //SEG39 main::@5
+ //SEG40 [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
+ lda sc
+ clc
+ adc #$20
+ sta sc
+ bcc !+
+ inc sc+1
+ !:
+ //SEG41 [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
+ inc y
+ //SEG42 [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
+ lda y
+ cmp #8
+ bne b1
+ //SEG43 main::@6
+ //SEG44 [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
+ lda #$37
+ sta PROCPORT
+ //SEG45 asm { cli }
+ cli
+ //SEG46 main::@return
+ //SEG47 [19] return [ ]
+ rts
+}
+
+FINAL SYMBOL TABLE
+(label) @1
+(label) @begin
+(label) @end
+(byte*) CHARGEN
+(const byte*) CHARGEN#0 CHARGEN = (word) 53248
+(byte*) PROCPORT
+(const byte*) PROCPORT#0 PROCPORT = (byte) 1
+(byte*) SCREEN
+(const byte*) SCREEN#0 SCREEN = (word) 1024
+(void()) main()
+(byte~) main::$2 reg byte a 202.0
+(label) main::@1
+(label) main::@2
+(label) main::@3
+(label) main::@4
+(label) main::@5
+(label) main::@6
+(label) main::@return
+(byte*) main::CHAR_A
+(const byte*) main::CHAR_A#0 CHAR_A = (const byte*) CHARGEN#0+(byte) 8
+(byte) main::bits
+(byte) main::bits#0 bits zp ZP_BYTE:3 22.0
+(byte) main::bits#1 bits zp ZP_BYTE:3 67.33333333333333
+(byte) main::bits#2 bits zp ZP_BYTE:3 52.33333333333333
+(byte) main::c
+(byte) main::c#2 reg byte a 101.0
+(byte*) main::sc
+(byte*) main::sc#1 sc zp ZP_PTR_BYTE:4 53.25
+(byte*) main::sc#2 sc zp ZP_PTR_BYTE:4 7.333333333333333
+(byte*) main::sc#3 sc zp ZP_PTR_BYTE:4 62.8
+(byte*) main::sc#7 sc zp ZP_PTR_BYTE:4 11.0
+(byte) main::x
+(byte) main::x#1 reg byte x 151.5
+(byte) main::x#2 reg byte x 28.857142857142858
+(byte) main::y
+(byte) main::y#1 y zp ZP_BYTE:2 16.5
+(byte) main::y#2 y zp ZP_BYTE:2 2.75
+
+zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
+zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
+reg byte x [ main::x#2 main::x#1 ]
+reg byte a [ main::c#2 ]
+reg byte a [ main::$2 ]
+
+FINAL CODE
+//SEG0 Basic Upstart
+.pc = $801 "Basic"
+:BasicUpstart(main)
+.pc = $80d "Program"
+//SEG1 Global Constants & labels
+ .const PROCPORT = 1
+ .const CHARGEN = $d000
+ .const SCREEN = $400
+//SEG2 @begin
+//SEG3 @1
+//SEG4 [0] call main param-assignment [ ]
+ jsr main
+//SEG5 @end
+//SEG6 main
+main: {
+ .const CHAR_A = CHARGEN+8
+ .label bits = 3
+ .label sc = 4
+ .label y = 2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ lda #$32
+ sta PROCPORT
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ //SEG10 [3] phi (byte*) main::sc#7 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ lda #SCREEN
+ sta sc+1
+ //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
+ lda #0
+ sta y
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::sc#7 = (byte*) main::sc#2 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
+ b1:
+ //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
+ ldx y
+ lda CHAR_A,x
+ sta bits
+ //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
+ ldx #0
+ //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#7 [phi:main::@1->main::@2#1] -- register_copy
+ //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
+ //SEG21 [5] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
+ //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@3->main::@2#0] -- register_copy
+ //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@3->main::@2#1] -- register_copy
+ //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@3->main::@2#2] -- register_copy
+ //SEG25 main::@2
+ b2:
+ //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
+ lda bits
+ and #$80
+ //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
+ cmp #0
+ beq b3_from_b2
+ //SEG28 main::@4
+ //SEG29 [8] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
+ //SEG30 [8] phi (byte) main::c#2 = (byte) '*' [phi:main::@4->main::@3#0] -- aby=coby1
+ lda #'*'
+ jmp b3
+ //SEG31 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
+ b3_from_b2:
+ //SEG32 [8] phi (byte) main::c#2 = (byte) '.' [phi:main::@2->main::@3#0] -- aby=coby1
+ lda #'.'
+ //SEG33 main::@3
+ b3:
+ //SEG34 [9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=aby
+ ldy #0
+ sta (sc),y
+ //SEG35 [10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
+ inc sc
+ bne !+
+ inc sc+1
+ !:
+ //SEG36 [11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
+ asl bits
+ //SEG37 [12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
+ inx
+ //SEG38 [13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
+ cpx #8
+ bne b2
+ //SEG39 main::@5
+ //SEG40 [14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
+ lda sc
+ clc
+ adc #$20
+ sta sc
+ bcc !+
+ inc sc+1
+ !:
+ //SEG41 [15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
+ inc y
+ //SEG42 [16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
+ lda y
+ cmp #8
+ bne b1
+ //SEG43 main::@6
+ //SEG44 [17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
+ lda #$37
+ sta PROCPORT
+ //SEG45 asm { cli }
+ cli
+ //SEG46 main::@return
+ //SEG47 [19] return [ ]
+ rts
+}
+
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/chargen.sym b/src/main/java/dk/camelot64/kickc/test/ref/chargen.sym
new file mode 100644
index 000000000..fb6cbe8df
--- /dev/null
+++ b/src/main/java/dk/camelot64/kickc/test/ref/chargen.sym
@@ -0,0 +1,44 @@
+(label) @1
+(label) @begin
+(label) @end
+(byte*) CHARGEN
+(const byte*) CHARGEN#0 CHARGEN = (word) 53248
+(byte*) PROCPORT
+(const byte*) PROCPORT#0 PROCPORT = (byte) 1
+(byte*) SCREEN
+(const byte*) SCREEN#0 SCREEN = (word) 1024
+(void()) main()
+(byte~) main::$2 reg byte a 202.0
+(label) main::@1
+(label) main::@2
+(label) main::@3
+(label) main::@4
+(label) main::@5
+(label) main::@6
+(label) main::@return
+(byte*) main::CHAR_A
+(const byte*) main::CHAR_A#0 CHAR_A = (const byte*) CHARGEN#0+(byte) 8
+(byte) main::bits
+(byte) main::bits#0 bits zp ZP_BYTE:3 22.0
+(byte) main::bits#1 bits zp ZP_BYTE:3 67.33333333333333
+(byte) main::bits#2 bits zp ZP_BYTE:3 52.33333333333333
+(byte) main::c
+(byte) main::c#2 reg byte a 101.0
+(byte*) main::sc
+(byte*) main::sc#1 sc zp ZP_PTR_BYTE:4 53.25
+(byte*) main::sc#2 sc zp ZP_PTR_BYTE:4 7.333333333333333
+(byte*) main::sc#3 sc zp ZP_PTR_BYTE:4 62.8
+(byte*) main::sc#7 sc zp ZP_PTR_BYTE:4 11.0
+(byte) main::x
+(byte) main::x#1 reg byte x 151.5
+(byte) main::x#2 reg byte x 28.857142857142858
+(byte) main::y
+(byte) main::y#1 y zp ZP_BYTE:2 16.5
+(byte) main::y#2 y zp ZP_BYTE:2 2.75
+
+zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
+zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
+reg byte x [ main::x#2 main::x#1 ]
+reg byte a [ main::c#2 ]
+reg byte a [ main::$2 ]
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/const-identification.log b/src/main/java/dk/camelot64/kickc/test/ref/const-identification.log
index da5f1f53b..67d1b5b58 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/const-identification.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/const-identification.log
@@ -8,7 +8,7 @@ void main() {
}
do {
line(0, 10);
- } while (true)
+ } while (true);
}
void line(byte x0, byte x1) {
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log b/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log
index 5c6ad8568..c403e16db 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log
@@ -6,7 +6,7 @@ void main() {
byte i = 0;
do {
fibs[i+2] = fibs[i]+fibs[i+1];
- } while(++i<15)
+ } while(++i<15);
}
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
PROGRAM
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log
index f999ab8cb..e16736a65 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log
@@ -7,12 +7,12 @@ void main() {
prepare();
do {
for( byte c : 25..1) {
- do { } while(*RASTER!=254)
- do { } while(*RASTER!=255)
+ do { } while(*RASTER!=254);
+ do { } while(*RASTER!=255);
}
flip();
plot();
- } while(true)
+ } while(true);
}
// Prepare buffer
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/halfscii.asm b/src/main/java/dk/camelot64/kickc/test/ref/halfscii.asm
index 1a8f23b1c..bd0865f14 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/halfscii.asm
+++ b/src/main/java/dk/camelot64/kickc/test/ref/halfscii.asm
@@ -18,6 +18,7 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
+ sei
lda #$32
sta PROCPORT
lda #> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
- [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
- [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
- [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
- [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
- [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
+ [3] (byte*) main::charset4#10 ← phi( main/(const byte*) CHARSET4#0 main::@5/(byte*) main::charset4#1 ) [ main::chargen#10 main::charset4#10 ]
+ [3] (byte*) main::chargen#10 ← phi( main/(const byte*) CHARGEN#0 main::@5/(byte*) main::chargen#1 ) [ main::chargen#10 main::charset4#10 ]
+ [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
+ [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ]
+ [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ]
+ [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ]
+ [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ]
+ [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
+ [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
+ [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
+ [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
+ [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
+ [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
to:main::@7
main::@7: scope:[main] from main::@1
to:main::@2
main::@2: scope:[main] from main::@1 main::@7
- [14] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
- [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
- [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
- [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
- [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
- [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
- [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
- [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
- [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
- [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
- [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
+ [15] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
+ [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
+ [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
+ [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
+ [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
+ [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
+ [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
+ [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
+ [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
+ [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
+ [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
to:main::@8
main::@8: scope:[main] from main::@2
- [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
+ [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
to:main::@3
main::@3: scope:[main] from main::@2 main::@8
- [26] (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
- [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
- [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
- [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
- [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
- [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
- [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
- [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
- [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
- [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
- [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
+ [27] (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
+ [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
+ [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
+ [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
+ [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
+ [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
+ [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
+ [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
+ [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
+ [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
+ [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
to:main::@9
main::@9: scope:[main] from main::@3
- [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
+ [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
to:main::@4
main::@4: scope:[main] from main::@3 main::@9
- [38] (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
- [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
- [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
- [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
- [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
- [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
- [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
- [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
- [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
- [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
+ [39] (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
+ [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
+ [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
+ [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
+ [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
+ [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
+ [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
+ [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
+ [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
+ [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
to:main::@10
main::@10: scope:[main] from main::@4
- [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
+ [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
to:main::@5
main::@5: scope:[main] from main::@10 main::@4
- [49] (byte) main::bits_gen#15 ← phi( main::@10/(byte) main::bits_gen#8 main::@4/(byte) main::bits_gen#16 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
- [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
- [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
- [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
- [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ]
- [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ]
+ [50] (byte) main::bits_gen#15 ← phi( main::@10/(byte) main::bits_gen#8 main::@4/(byte) main::bits_gen#16 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
+ [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
+ [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
+ [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
+ [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ]
+ [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ]
to:main::@11
main::@11: scope:[main] from main::@5
- [55] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ [56] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ asm { cli }
to:main::@6
main::@6: scope:[main] from main::@11 main::@6
- [56] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ]
- [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
- [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
- [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ]
+ [58] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ]
+ [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
+ [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
+ [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ]
to:main::@12
main::@12: scope:[main] from main::@6
- [60] *((const byte*) D018#0) ← (byte) 25 [ ]
+ [62] *((const byte*) D018#0) ← (byte) 25 [ ]
to:main::@return
main::@return: scope:[main] from main::@12
- [61] return [ ]
+ [63] return [ ]
to:@return
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log b/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log
index c95d86d1d..592faa184 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log
@@ -8,6 +8,7 @@ byte* CHARSET4 = $2800;
byte[] bits_count = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
void main() {
+ asm { sei };
*PROCPORT = $32;
byte* chargen = CHARGEN;
byte* charset4 = CHARSET4;
@@ -29,9 +30,9 @@ void main() {
*charset4 = bits_gen;
charset4++;
chargen = chargen+2;
- } while (chargen> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
- [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
- [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
- [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
- [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
- [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
+ [3] (byte*) main::charset4#10 ← phi( main/(const byte*) CHARSET4#0 main::@13/(byte*~) main::charset4#11 ) [ main::chargen#10 main::charset4#10 ]
+ [3] (byte*) main::chargen#10 ← phi( main/(const byte*) CHARGEN#0 main::@13/(byte*~) main::chargen#11 ) [ main::chargen#10 main::charset4#10 ]
+ [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
+ [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ]
+ [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ]
+ [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ]
+ [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ]
+ [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
+ [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
+ [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
+ [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
+ [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
+ [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
to:main::@7
main::@7: scope:[main] from main::@1
to:main::@2
main::@2: scope:[main] from main::@1 main::@7
- [14] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
- [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
- [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
- [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
- [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
- [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
- [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
- [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
- [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
- [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
- [24] if((byte) main::bits#1<(byte) 2) goto main::@14 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
+ [15] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
+ [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
+ [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
+ [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
+ [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
+ [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
+ [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
+ [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
+ [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
+ [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
+ [25] if((byte) main::bits#1<(byte) 2) goto main::@14 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
to:main::@8
main::@8: scope:[main] from main::@2
- [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
- [26] (byte~) main::bits_gen#18 ← (byte) main::bits_gen#4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#18 ]
+ [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
+ [27] (byte~) main::bits_gen#18 ← (byte) main::bits_gen#4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#18 ]
to:main::@3
main::@3: scope:[main] from main::@14 main::@8
- [27] (byte) main::bits_gen#11 ← phi( main::@14/(byte~) main::bits_gen#17 main::@8/(byte~) main::bits_gen#18 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
- [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
- [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
- [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
- [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
- [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
- [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
- [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
- [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
- [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
- [37] if((byte) main::bits#2<(byte) 2) goto main::@15 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
+ [28] (byte) main::bits_gen#11 ← phi( main::@14/(byte~) main::bits_gen#17 main::@8/(byte~) main::bits_gen#18 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
+ [29] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
+ [30] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
+ [31] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
+ [32] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
+ [33] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
+ [34] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
+ [35] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
+ [36] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
+ [37] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
+ [38] if((byte) main::bits#2<(byte) 2) goto main::@15 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
to:main::@9
main::@9: scope:[main] from main::@3
- [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
- [39] (byte~) main::bits_gen#20 ← (byte) main::bits_gen#6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#20 ]
+ [39] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
+ [40] (byte~) main::bits_gen#20 ← (byte) main::bits_gen#6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#20 ]
to:main::@4
main::@4: scope:[main] from main::@15 main::@9
- [40] (byte) main::bits_gen#13 ← phi( main::@15/(byte~) main::bits_gen#19 main::@9/(byte~) main::bits_gen#20 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
- [41] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
- [42] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
- [43] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
- [44] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
- [45] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
- [46] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
- [47] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
- [48] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
- [49] if((byte) main::bits#3<(byte) 2) goto main::@16 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
+ [41] (byte) main::bits_gen#13 ← phi( main::@15/(byte~) main::bits_gen#19 main::@9/(byte~) main::bits_gen#20 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
+ [42] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
+ [43] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
+ [44] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
+ [45] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
+ [46] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
+ [47] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
+ [48] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
+ [49] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
+ [50] if((byte) main::bits#3<(byte) 2) goto main::@16 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
to:main::@10
main::@10: scope:[main] from main::@4
- [50] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
- [51] (byte~) main::bits_gen#21 ← (byte) main::bits_gen#8 [ main::chargen#10 main::charset4#10 main::bits_gen#21 ]
+ [51] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
+ [52] (byte~) main::bits_gen#21 ← (byte) main::bits_gen#8 [ main::chargen#10 main::charset4#10 main::bits_gen#21 ]
to:main::@5
main::@5: scope:[main] from main::@10 main::@16
- [52] (byte) main::bits_gen#15 ← phi( main::@10/(byte~) main::bits_gen#21 main::@16/(byte~) main::bits_gen#22 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
- [53] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
- [54] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
- [55] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
- [56] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::charset4#1 main::chargen#1 ]
- [57] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@13 [ main::charset4#1 main::chargen#1 ]
+ [53] (byte) main::bits_gen#15 ← phi( main::@10/(byte~) main::bits_gen#21 main::@16/(byte~) main::bits_gen#22 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
+ [54] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
+ [55] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
+ [56] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
+ [57] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::charset4#1 main::chargen#1 ]
+ [58] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@13 [ main::charset4#1 main::chargen#1 ]
to:main::@11
main::@11: scope:[main] from main::@5
- [58] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ [59] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ asm { cli }
to:main::@6
main::@6: scope:[main] from main::@11 main::@17
- [59] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@17/(byte~) main::i#3 ) [ main::i#2 ]
- [60] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
- [61] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
- [62] if((byte) main::i#1!=(byte) 0) goto main::@17 [ main::i#1 ]
+ [61] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@17/(byte~) main::i#3 ) [ main::i#2 ]
+ [62] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
+ [63] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
+ [64] if((byte) main::i#1!=(byte) 0) goto main::@17 [ main::i#1 ]
to:main::@12
main::@12: scope:[main] from main::@6
- [63] *((const byte*) D018#0) ← (byte) 25 [ ]
+ [65] *((const byte*) D018#0) ← (byte) 25 [ ]
to:main::@return
main::@return: scope:[main] from main::@12
- [64] return [ ]
+ [66] return [ ]
to:@return
main::@17: scope:[main] from main::@6
- [65] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
+ [67] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
to:main::@6
main::@13: scope:[main] from main::@5
- [66] (byte*~) main::chargen#11 ← (byte*) main::chargen#1 [ main::chargen#11 main::charset4#1 ]
- [67] (byte*~) main::charset4#11 ← (byte*) main::charset4#1 [ main::chargen#11 main::charset4#11 ]
+ [68] (byte*~) main::chargen#11 ← (byte*) main::chargen#1 [ main::chargen#11 main::charset4#1 ]
+ [69] (byte*~) main::charset4#11 ← (byte*) main::charset4#1 [ main::chargen#11 main::charset4#11 ]
to:main::@1
main::@16: scope:[main] from main::@4
- [68] (byte~) main::bits_gen#22 ← (byte) main::bits_gen#16 [ main::chargen#10 main::charset4#10 main::bits_gen#22 ]
+ [70] (byte~) main::bits_gen#22 ← (byte) main::bits_gen#16 [ main::chargen#10 main::charset4#10 main::bits_gen#22 ]
to:main::@5
main::@15: scope:[main] from main::@3
- [69] (byte~) main::bits_gen#19 ← (byte) main::bits_gen#14 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#19 ]
+ [71] (byte~) main::bits_gen#19 ← (byte) main::bits_gen#14 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#19 ]
to:main::@4
main::@14: scope:[main] from main::@2
- [70] (byte~) main::bits_gen#17 ← (byte) main::bits_gen#1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#17 ]
+ [72] (byte~) main::bits_gen#17 ← (byte) main::bits_gen#1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#17 ]
to:main::@3
Created 7 initial phi equivalence classes
-Coalesced [26] main::bits_gen#18 ← main::bits_gen#4
-Coalesced [39] main::bits_gen#20 ← main::bits_gen#6
-Coalesced [51] main::bits_gen#21 ← main::bits_gen#8
-Coalesced [65] main::i#3 ← main::i#1
-Coalesced [66] main::chargen#11 ← main::chargen#1
-Coalesced [67] main::charset4#11 ← main::charset4#1
-Coalesced [68] main::bits_gen#22 ← main::bits_gen#16
-Coalesced [69] main::bits_gen#19 ← main::bits_gen#14
-Coalesced [70] main::bits_gen#17 ← main::bits_gen#1
+Coalesced [27] main::bits_gen#18 ← main::bits_gen#4
+Coalesced [40] main::bits_gen#20 ← main::bits_gen#6
+Coalesced [52] main::bits_gen#21 ← main::bits_gen#8
+Coalesced [67] main::i#3 ← main::i#1
+Coalesced [68] main::chargen#11 ← main::chargen#1
+Coalesced [69] main::charset4#11 ← main::charset4#1
+Coalesced [70] main::bits_gen#22 ← main::bits_gen#16
+Coalesced [71] main::bits_gen#19 ← main::bits_gen#14
+Coalesced [72] main::bits_gen#17 ← main::bits_gen#1
Coalesced down to 7 phi equivalence classes
Not culling empty block because it shares successor with its predecessor. (label) main::@7
Culled Empty Block (label) main::@17
@@ -3144,94 +3179,96 @@ CONTROL FLOW GRAPH - PHI MEM COALESCED
to:@end
@end: scope:[] from @1
main: scope:[main] from @1
- [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
+ asm { sei }
+ [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
to:main::@1
main::@1: scope:[main] from main main::@5
- [2] (byte*) main::charset4#10 ← phi( main/(const byte*) CHARSET4#0 main::@5/(byte*) main::charset4#1 ) [ main::chargen#10 main::charset4#10 ]
- [2] (byte*) main::chargen#10 ← phi( main/(const byte*) CHARGEN#0 main::@5/(byte*) main::chargen#1 ) [ main::chargen#10 main::charset4#10 ]
- [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
- [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ]
- [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ]
- [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ]
- [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ]
- [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
- [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
- [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
- [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
- [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
- [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
+ [3] (byte*) main::charset4#10 ← phi( main/(const byte*) CHARSET4#0 main::@5/(byte*) main::charset4#1 ) [ main::chargen#10 main::charset4#10 ]
+ [3] (byte*) main::chargen#10 ← phi( main/(const byte*) CHARGEN#0 main::@5/(byte*) main::chargen#1 ) [ main::chargen#10 main::charset4#10 ]
+ [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
+ [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ]
+ [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ]
+ [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ]
+ [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ]
+ [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
+ [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
+ [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
+ [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
+ [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
+ [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
to:main::@7
main::@7: scope:[main] from main::@1
to:main::@2
main::@2: scope:[main] from main::@1 main::@7
- [14] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
- [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
- [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
- [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
- [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
- [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
- [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
- [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
- [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
- [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
- [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
+ [15] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
+ [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
+ [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
+ [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
+ [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
+ [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
+ [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
+ [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
+ [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
+ [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
+ [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
to:main::@8
main::@8: scope:[main] from main::@2
- [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
+ [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
to:main::@3
main::@3: scope:[main] from main::@2 main::@8
- [26] (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
- [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
- [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
- [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
- [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
- [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
- [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
- [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
- [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
- [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
- [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
+ [27] (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
+ [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
+ [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
+ [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
+ [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
+ [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
+ [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
+ [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
+ [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
+ [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
+ [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
to:main::@9
main::@9: scope:[main] from main::@3
- [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
+ [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
to:main::@4
main::@4: scope:[main] from main::@3 main::@9
- [38] (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
- [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
- [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
- [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
- [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
- [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
- [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
- [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
- [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
- [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
+ [39] (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
+ [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
+ [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
+ [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
+ [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
+ [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
+ [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
+ [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
+ [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
+ [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
to:main::@10
main::@10: scope:[main] from main::@4
- [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
+ [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
to:main::@5
main::@5: scope:[main] from main::@10 main::@4
- [49] (byte) main::bits_gen#15 ← phi( main::@10/(byte) main::bits_gen#8 main::@4/(byte) main::bits_gen#16 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
- [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
- [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
- [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
- [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ]
- [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ]
+ [50] (byte) main::bits_gen#15 ← phi( main::@10/(byte) main::bits_gen#8 main::@4/(byte) main::bits_gen#16 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
+ [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
+ [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
+ [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
+ [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ]
+ [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ]
to:main::@11
main::@11: scope:[main] from main::@5
- [55] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ [56] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
+ asm { cli }
to:main::@6
main::@6: scope:[main] from main::@11 main::@6
- [56] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ]
- [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
- [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
- [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ]
+ [58] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ]
+ [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
+ [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
+ [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ]
to:main::@12
main::@12: scope:[main] from main::@6
- [60] *((const byte*) D018#0) ← (byte) 25 [ ]
+ [62] *((const byte*) D018#0) ← (byte) 25 [ ]
to:main::@return
main::@return: scope:[main] from main::@12
- [61] return [ ]
+ [63] return [ ]
to:@return
DOMINATORS
@@ -3531,30 +3568,32 @@ main: {
.label bits_gen_14 = 8
.label bits_gen_15 = 9
.label bits_gen_16 = 9
- //SEG7 [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
lda #$32
sta PROCPORT
- //SEG8 [2] phi from main to main::@1 [phi:main->main::@1]
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
- //SEG9 [2] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ //SEG10 [3] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
lda #CHARSET4
sta charset4+1
- //SEG10 [2] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
+ //SEG11 [3] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
lda #CHARGEN
sta chargen+1
jmp b1
- //SEG11 [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
b1_from_b5:
- //SEG12 [2] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
- //SEG13 [2] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG13 [3] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
jmp b1
- //SEG14 main::@1
+ //SEG15 main::@1
b1:
- //SEG15 [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
+ //SEG16 [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
lda chargen
clc
adc #1
@@ -3562,233 +3601,233 @@ main: {
lda chargen+1
adc #0
sta chargen1+1
- //SEG16 [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- zpby1=_star_zpptrby1
+ //SEG17 [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen),y
sta _1
- //SEG17 [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=zpby2_band_coby1
+ //SEG18 [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=zpby2_band_coby1
lda _1
and #$60
sta _2
- //SEG18 [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- zpby1=_star_zpptrby1
+ //SEG19 [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen1),y
sta _3
- //SEG19 [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- zpby1=zpby2_band_coby1
+ //SEG20 [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- zpby1=zpby2_band_coby1
lda _3
and #$60
sta _4
- //SEG20 [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- zpby1=zpby2_ror_2
+ //SEG21 [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- zpby1=zpby2_ror_2
lda _4
lsr
lsr
sta _5
- //SEG21 [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- zpby1=zpby2_bor_zpby3
+ //SEG22 [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- zpby1=zpby2_bor_zpby3
lda _2
ora _5
sta _6
- //SEG22 [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- zpby1=zpby2_ror_1
+ //SEG23 [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- zpby1=zpby2_ror_1
lda _6
lsr
sta _7
- //SEG23 [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- zpby1=zpby2_ror_2
+ //SEG24 [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- zpby1=zpby2_ror_2
lda _7
lsr
lsr
sta _8
- //SEG24 [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
+ //SEG25 [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
ldx _8
lda bits_count,x
sta bits
- //SEG25 [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpby1_lt_coby1_then_la1
+ //SEG26 [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpby1_lt_coby1_then_la1
lda bits
cmp #2
bcc b2_from_b1
jmp b7
- //SEG26 main::@7
+ //SEG27 main::@7
b7:
- //SEG27 [14] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+ //SEG28 [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
b2_from_b7:
- //SEG28 [14] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- zpby1=coby1
+ //SEG29 [15] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- zpby1=coby1
lda #0+1
sta bits_gen_9
jmp b2
- //SEG29 [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG30 [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
- //SEG30 [14] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- zpby1=coby1
+ //SEG31 [15] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- zpby1=coby1
lda #0
sta bits_gen_9
jmp b2
- //SEG31 main::@2
+ //SEG32 main::@2
b2:
- //SEG32 [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=zpby2_rol_1
+ //SEG33 [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=zpby2_rol_1
lda bits_gen_9
asl
sta bits_gen
- //SEG33 [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- zpby1=_star_zpptrby1
+ //SEG34 [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen),y
sta _14
- //SEG34 [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=zpby2_band_coby1
+ //SEG35 [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=zpby2_band_coby1
lda _14
and #$18
sta _15
- //SEG35 [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- zpby1=_star_zpptrby1
+ //SEG36 [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen1),y
sta _16
- //SEG36 [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- zpby1=zpby2_band_coby1
+ //SEG37 [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- zpby1=zpby2_band_coby1
lda _16
and #$18
sta _17
- //SEG37 [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- zpby1=zpby2_ror_2
+ //SEG38 [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- zpby1=zpby2_ror_2
lda _17
lsr
lsr
sta _18
- //SEG38 [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- zpby1=zpby2_bor_zpby3
+ //SEG39 [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- zpby1=zpby2_bor_zpby3
lda _15
ora _18
sta _19
- //SEG39 [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- zpby1=zpby2_ror_1
+ //SEG40 [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- zpby1=zpby2_ror_1
lda _19
lsr
sta _20
- //SEG40 [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- zpby1=cowo1_staridx_zpby2
+ //SEG41 [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- zpby1=cowo1_staridx_zpby2
ldx _20
lda bits_count,x
sta bits_1
- //SEG41 [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1_lt_coby1_then_la1
+ //SEG42 [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1_lt_coby1_then_la1
lda bits_1
cmp #2
bcc b3_from_b2
jmp b8
- //SEG42 main::@8
+ //SEG43 main::@8
b8:
- //SEG43 [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
+ //SEG44 [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG44 [26] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
+ //SEG45 [27] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
b3_from_b2:
b3_from_b8:
- //SEG45 [26] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
+ //SEG46 [27] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
jmp b3
- //SEG46 main::@3
+ //SEG47 main::@3
b3:
- //SEG47 [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby2_rol_1
+ //SEG48 [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby2_rol_1
lda bits_gen
asl
sta bits_gen_14
- //SEG48 [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- zpby1=_star_zpptrby1
+ //SEG49 [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen),y
sta _26
- //SEG49 [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- zpby1=zpby2_band_coby1
+ //SEG50 [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- zpby1=zpby2_band_coby1
lda _26
and #6
sta _27
- //SEG50 [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=zpby2_rol_1
+ //SEG51 [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=zpby2_rol_1
lda _27
asl
sta _28
- //SEG51 [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- zpby1=_star_zpptrby1
+ //SEG52 [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen1),y
sta _29
- //SEG52 [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- zpby1=zpby2_band_coby1
+ //SEG53 [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- zpby1=zpby2_band_coby1
lda _29
and #6
sta _30
- //SEG53 [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- zpby1=zpby2_ror_1
+ //SEG54 [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- zpby1=zpby2_ror_1
lda _30
lsr
sta _31
- //SEG54 [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- zpby1=zpby2_bor_zpby3
+ //SEG55 [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- zpby1=zpby2_bor_zpby3
lda _28
ora _31
sta _32
- //SEG55 [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- zpby1=cowo1_staridx_zpby2
+ //SEG56 [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- zpby1=cowo1_staridx_zpby2
ldx _32
lda bits_count,x
sta bits_2
- //SEG56 [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1_lt_coby1_then_la1
+ //SEG57 [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1_lt_coby1_then_la1
lda bits_2
cmp #2
bcc b4_from_b3
jmp b9
- //SEG57 main::@9
+ //SEG58 main::@9
b9:
- //SEG58 [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
+ //SEG59 [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
inc bits_gen_6
- //SEG59 [38] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
+ //SEG60 [39] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
b4_from_b3:
b4_from_b9:
- //SEG60 [38] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
+ //SEG61 [39] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
jmp b4
- //SEG61 main::@4
+ //SEG62 main::@4
b4:
- //SEG62 [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby2_rol_1
+ //SEG63 [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby2_rol_1
lda bits_gen_13
asl
sta bits_gen_16
- //SEG63 [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- zpby1=_star_zpptrby1
+ //SEG64 [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen),y
sta _38
- //SEG64 [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- zpby1=zpby2_band_coby1
+ //SEG65 [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- zpby1=zpby2_band_coby1
lda _38
and #1
sta _39
- //SEG65 [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=zpby2_rol_2
+ //SEG66 [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=zpby2_rol_2
lda _39
asl
asl
sta _40
- //SEG66 [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- zpby1=_star_zpptrby1
+ //SEG67 [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- zpby1=_star_zpptrby1
ldy #0
lda (chargen1),y
sta _41
- //SEG67 [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- zpby1=zpby2_band_coby1
+ //SEG68 [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- zpby1=zpby2_band_coby1
lda _41
and #1
sta _42
- //SEG68 [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- zpby1=zpby2_bor_zpby3
+ //SEG69 [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- zpby1=zpby2_bor_zpby3
lda _40
ora _42
sta _43
- //SEG69 [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- zpby1=cowo1_staridx_zpby2
+ //SEG70 [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- zpby1=cowo1_staridx_zpby2
ldx _43
lda bits_count,x
sta bits_3
- //SEG70 [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- zpby1_lt_coby1_then_la1
+ //SEG71 [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- zpby1_lt_coby1_then_la1
lda bits_3
cmp #2
bcc b5_from_b4
jmp b10
- //SEG71 main::@10
+ //SEG72 main::@10
b10:
- //SEG72 [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
+ //SEG73 [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
inc bits_gen_8
- //SEG73 [49] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
+ //SEG74 [50] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
b5_from_b10:
b5_from_b4:
- //SEG74 [49] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
+ //SEG75 [50] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
jmp b5
- //SEG75 main::@5
+ //SEG76 main::@5
b5:
- //SEG76 [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- zpby1=zpby2_rol_1
+ //SEG77 [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- zpby1=zpby2_rol_1
lda bits_gen_15
asl
sta bits_gen_7
- //SEG77 [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=zpby1
+ //SEG78 [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=zpby1
ldy #0
lda bits_gen_7
sta (charset4),y
- //SEG78 [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
+ //SEG79 [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
inc charset4
bne !+
inc charset4+1
!:
- //SEG79 [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
+ //SEG80 [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda chargen
clc
adc #2
@@ -3796,7 +3835,7 @@ main: {
bcc !+
inc chargen+1
!:
- //SEG80 [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
+ //SEG81 [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
lda chargen+1
cmp #>CHARGEN+$800
bcc b1_from_b5
@@ -3806,120 +3845,122 @@ main: {
bcc b1_from_b5
!:
jmp b11
- //SEG81 main::@11
+ //SEG82 main::@11
b11:
- //SEG82 [55] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
+ //SEG83 [56] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
lda #$37
sta PROCPORT
- //SEG83 [56] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
+ //SEG84 asm { cli }
+ cli
+ //SEG85 [58] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
b6_from_b11:
- //SEG84 [56] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- zpby1=coby1
+ //SEG86 [58] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- zpby1=coby1
lda #0
sta i
jmp b6
- //SEG85 [56] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
+ //SEG87 [58] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
b6_from_b6:
- //SEG86 [56] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
+ //SEG88 [58] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
jmp b6
- //SEG87 main::@6
+ //SEG89 main::@6
b6:
- //SEG88 [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_zpby1=zpby1
+ //SEG90 [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_zpby1=zpby1
ldx i
txa
sta SCREEN,x
- //SEG89 [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- zpby1=_inc_zpby1
+ //SEG91 [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- zpby1=_inc_zpby1
inc i
- //SEG90 [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- zpby1_neq_0_then_la1
+ //SEG92 [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- zpby1_neq_0_then_la1
lda i
bne b6_from_b6
jmp b12
- //SEG91 main::@12
+ //SEG93 main::@12
b12:
- //SEG92 [60] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
+ //SEG94 [62] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
lda #$19
sta D018
jmp breturn
- //SEG93 main::@return
+ //SEG95 main::@return
breturn:
- //SEG94 [61] return [ ]
+ //SEG96 [63] return [ ]
rts
}
REGISTER UPLIFT POTENTIAL REGISTERS
-Statement [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
-Statement [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] always clobbers reg byte a
-Statement [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] always clobbers reg byte a reg byte y
-Statement [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] always clobbers reg byte a
-Statement [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] always clobbers reg byte a reg byte y
+Statement [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
+Statement [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] always clobbers reg byte a
+Statement [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] always clobbers reg byte a reg byte y
+Statement [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] always clobbers reg byte a
+Statement [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ main::$2 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ main::$2 ]
-Statement [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] always clobbers reg byte a
-Statement [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] always clobbers reg byte a
-Statement [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] always clobbers reg byte a reg byte y
+Statement [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] always clobbers reg byte a
+Statement [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] always clobbers reg byte a
+Statement [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 ]
-Statement [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] always clobbers reg byte a
-Statement [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] always clobbers reg byte a reg byte y
+Statement [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] always clobbers reg byte a
+Statement [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ main::$15 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:23 [ main::$15 ]
-Statement [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] always clobbers reg byte a
-Statement [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] always clobbers reg byte a
-Statement [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] always clobbers reg byte a
-Statement [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] always clobbers reg byte a reg byte y
+Statement [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] always clobbers reg byte a
+Statement [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] always clobbers reg byte a
+Statement [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] always clobbers reg byte a
+Statement [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ]
-Statement [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] always clobbers reg byte a
-Statement [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] always clobbers reg byte a reg byte y
+Statement [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] always clobbers reg byte a
+Statement [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ main::$28 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:32 [ main::$28 ]
-Statement [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] always clobbers reg byte a
-Statement [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] always clobbers reg byte a
-Statement [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] always clobbers reg byte a
-Statement [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] always clobbers reg byte a reg byte y
+Statement [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] always clobbers reg byte a
+Statement [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] always clobbers reg byte a
+Statement [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] always clobbers reg byte a
+Statement [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:9 [ main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ]
-Statement [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] always clobbers reg byte a
-Statement [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] always clobbers reg byte a reg byte y
+Statement [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] always clobbers reg byte a
+Statement [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ main::$40 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:40 [ main::$40 ]
-Statement [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] always clobbers reg byte a
-Statement [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] always clobbers reg byte a
-Statement [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] always clobbers reg byte a
-Statement [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] always clobbers reg byte y
-Statement [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
-Statement [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
-Statement [55] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
-Statement [60] *((const byte*) D018#0) ← (byte) 25 [ ] always clobbers reg byte a
-Statement [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
-Statement [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] always clobbers reg byte a
-Statement [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] always clobbers reg byte a reg byte y
-Statement [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] always clobbers reg byte a
-Statement [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] always clobbers reg byte a reg byte y
-Statement [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] always clobbers reg byte a
-Statement [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] always clobbers reg byte a
-Statement [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] always clobbers reg byte a reg byte y
-Statement [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] always clobbers reg byte a
-Statement [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] always clobbers reg byte a reg byte y
-Statement [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] always clobbers reg byte a
-Statement [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] always clobbers reg byte a
-Statement [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] always clobbers reg byte a
-Statement [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] always clobbers reg byte a reg byte y
-Statement [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] always clobbers reg byte a
-Statement [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] always clobbers reg byte a reg byte y
-Statement [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] always clobbers reg byte a
-Statement [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] always clobbers reg byte a
-Statement [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] always clobbers reg byte a
-Statement [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] always clobbers reg byte a reg byte y
-Statement [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] always clobbers reg byte a
-Statement [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] always clobbers reg byte a reg byte y
-Statement [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] always clobbers reg byte a
-Statement [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] always clobbers reg byte a
-Statement [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] always clobbers reg byte a
-Statement [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] always clobbers reg byte y
-Statement [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
-Statement [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
-Statement [55] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
-Statement [60] *((const byte*) D018#0) ← (byte) 25 [ ] always clobbers reg byte a
+Statement [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] always clobbers reg byte a
+Statement [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] always clobbers reg byte a
+Statement [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] always clobbers reg byte a
+Statement [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] always clobbers reg byte y
+Statement [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
+Statement [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
+Statement [56] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
+Statement [62] *((const byte*) D018#0) ← (byte) 25 [ ] always clobbers reg byte a
+Statement [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
+Statement [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] always clobbers reg byte a
+Statement [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] always clobbers reg byte a reg byte y
+Statement [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] always clobbers reg byte a
+Statement [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] always clobbers reg byte a reg byte y
+Statement [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] always clobbers reg byte a
+Statement [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] always clobbers reg byte a
+Statement [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] always clobbers reg byte a reg byte y
+Statement [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] always clobbers reg byte a
+Statement [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] always clobbers reg byte a reg byte y
+Statement [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] always clobbers reg byte a
+Statement [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] always clobbers reg byte a
+Statement [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] always clobbers reg byte a
+Statement [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] always clobbers reg byte a reg byte y
+Statement [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] always clobbers reg byte a
+Statement [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] always clobbers reg byte a reg byte y
+Statement [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] always clobbers reg byte a
+Statement [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] always clobbers reg byte a
+Statement [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] always clobbers reg byte a
+Statement [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] always clobbers reg byte a reg byte y
+Statement [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] always clobbers reg byte a
+Statement [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] always clobbers reg byte a reg byte y
+Statement [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] always clobbers reg byte a
+Statement [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] always clobbers reg byte a
+Statement [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] always clobbers reg byte a
+Statement [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] always clobbers reg byte y
+Statement [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
+Statement [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] always clobbers reg byte a
+Statement [56] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
+Statement [62] *((const byte*) D018#0) ← (byte) 25 [ ] always clobbers reg byte a
Potential registers zp ZP_PTR_BYTE:2 [ main::chargen#10 main::chargen#1 ] : zp ZP_PTR_BYTE:2 ,
Potential registers zp ZP_PTR_BYTE:4 [ main::charset4#10 main::charset4#1 ] : zp ZP_PTR_BYTE:4 ,
Potential registers zp ZP_BYTE:6 [ main::bits_gen#9 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
@@ -3966,83 +4007,83 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 58.67: zp ZP_BYTE:9 [ main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ] 58.3: zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 ] 58.3: zp ZP_BYTE:8 [ main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ] 38.5: zp ZP_BYTE:10 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:13 [ main::$1 ] 22: zp ZP_BYTE:15 [ main::$3 ] 22: zp ZP_BYTE:16 [ main::$4 ] 22: zp ZP_BYTE:17 [ main::$5 ] 22: zp ZP_BYTE:18 [ main::$6 ] 22: zp ZP_BYTE:19 [ main::$7 ] 22: zp ZP_BYTE:20 [ main::$8 ] 22: zp ZP_BYTE:21 [ main::bits#0 ] 22: zp ZP_BYTE:22 [ main::$14 ] 22: zp ZP_BYTE:24 [ main::$16 ] 22: zp ZP_BYTE:25 [ main::$17 ] 22: zp ZP_BYTE:26 [ main::$18 ] 22: zp ZP_BYTE:27 [ main::$19 ] 22: zp ZP_BYTE:28 [ main::$20 ] 22: zp ZP_BYTE:29 [ main::bits#1 ] 22: zp ZP_BYTE:30 [ main::$26 ] 22: zp ZP_BYTE:31 [ main::$27 ] 22: zp ZP_BYTE:33 [ main::$29 ] 22: zp ZP_BYTE:34 [ main::$30 ] 22: zp ZP_BYTE:35 [ main::$31 ] 22: zp ZP_BYTE:36 [ main::$32 ] 22: zp ZP_BYTE:37 [ main::bits#2 ] 22: zp ZP_BYTE:38 [ main::$38 ] 22: zp ZP_BYTE:39 [ main::$39 ] 22: zp ZP_BYTE:41 [ main::$41 ] 22: zp ZP_BYTE:42 [ main::$42 ] 22: zp ZP_BYTE:43 [ main::$43 ] 22: zp ZP_BYTE:44 [ main::bits#3 ] 22: zp ZP_BYTE:45 [ main::bits_gen#7 ] 18.01: zp ZP_PTR_BYTE:2 [ main::chargen#10 main::chargen#1 ] 11: zp ZP_BYTE:6 [ main::bits_gen#9 ] 7.99: zp ZP_PTR_BYTE:4 [ main::charset4#10 main::charset4#1 ] 7.33: zp ZP_BYTE:40 [ main::$40 ] 5.5: zp ZP_BYTE:14 [ main::$2 ] 5.5: zp ZP_BYTE:23 [ main::$15 ] 5.5: zp ZP_BYTE:32 [ main::$28 ] 1.38: zp ZP_PTR_BYTE:11 [ main::chargen1#0 ]
Uplift Scope []
-Uplifting [] best 5586 combination
+Uplifting [] best 5590 combination
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ]
-Uplifting [main] best 5586 combination zp ZP_BYTE:9 [ main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ]
+Uplifting [main] best 5590 combination zp ZP_BYTE:9 [ main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 ]
-Uplifting [main] best 5586 combination zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 ]
+Uplifting [main] best 5590 combination zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ]
-Uplifting [main] best 5586 combination zp ZP_BYTE:8 [ main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ]
+Uplifting [main] best 5590 combination zp ZP_BYTE:8 [ main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:10 [ main::i#2 main::i#1 ]
-Uplifting [main] best 5486 combination reg byte x [ main::i#2 main::i#1 ]
+Uplifting [main] best 5490 combination reg byte x [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ main::$1 ]
-Uplifting [main] best 5426 combination reg byte a [ main::$1 ]
+Uplifting [main] best 5430 combination reg byte a [ main::$1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ main::$3 ]
-Uplifting [main] best 5366 combination reg byte a [ main::$3 ]
+Uplifting [main] best 5370 combination reg byte a [ main::$3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:16 [ main::$4 ]
-Uplifting [main] best 5306 combination reg byte a [ main::$4 ]
+Uplifting [main] best 5310 combination reg byte a [ main::$4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:17 [ main::$5 ]
-Uplifting [main] best 5246 combination reg byte a [ main::$5 ]
+Uplifting [main] best 5250 combination reg byte a [ main::$5 ]
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ main::$6 ]
-Uplifting [main] best 5186 combination reg byte a [ main::$6 ]
+Uplifting [main] best 5190 combination reg byte a [ main::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ main::$7 ]
-Uplifting [main] best 5126 combination reg byte a [ main::$7 ]
+Uplifting [main] best 5130 combination reg byte a [ main::$7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ main::$8 ]
-Uplifting [main] best 5086 combination reg byte a [ main::$8 ]
+Uplifting [main] best 5090 combination reg byte a [ main::$8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ main::bits#0 ]
-Uplifting [main] best 5026 combination reg byte a [ main::bits#0 ]
+Uplifting [main] best 5030 combination reg byte a [ main::bits#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ main::$14 ]
-Uplifting [main] best 4966 combination reg byte a [ main::$14 ]
+Uplifting [main] best 4970 combination reg byte a [ main::$14 ]
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ main::$16 ]
-Uplifting [main] best 4906 combination reg byte a [ main::$16 ]
+Uplifting [main] best 4910 combination reg byte a [ main::$16 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ main::$17 ]
-Uplifting [main] best 4846 combination reg byte a [ main::$17 ]
+Uplifting [main] best 4850 combination reg byte a [ main::$17 ]
Attempting to uplift remaining variables inzp ZP_BYTE:26 [ main::$18 ]
-Uplifting [main] best 4786 combination reg byte a [ main::$18 ]
+Uplifting [main] best 4790 combination reg byte a [ main::$18 ]
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ main::$19 ]
-Uplifting [main] best 4726 combination reg byte a [ main::$19 ]
+Uplifting [main] best 4730 combination reg byte a [ main::$19 ]
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ main::$20 ]
-Uplifting [main] best 4686 combination reg byte a [ main::$20 ]
+Uplifting [main] best 4690 combination reg byte a [ main::$20 ]
Attempting to uplift remaining variables inzp ZP_BYTE:29 [ main::bits#1 ]
-Uplifting [main] best 4626 combination reg byte a [ main::bits#1 ]
+Uplifting [main] best 4630 combination reg byte a [ main::bits#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ main::$26 ]
-Uplifting [main] best 4566 combination reg byte a [ main::$26 ]
+Uplifting [main] best 4570 combination reg byte a [ main::$26 ]
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ main::$27 ]
-Uplifting [main] best 4506 combination reg byte a [ main::$27 ]
+Uplifting [main] best 4510 combination reg byte a [ main::$27 ]
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ main::$29 ]
-Uplifting [main] best 4446 combination reg byte a [ main::$29 ]
+Uplifting [main] best 4450 combination reg byte a [ main::$29 ]
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ main::$30 ]
-Uplifting [main] best 4386 combination reg byte a [ main::$30 ]
+Uplifting [main] best 4390 combination reg byte a [ main::$30 ]
Attempting to uplift remaining variables inzp ZP_BYTE:35 [ main::$31 ]
-Uplifting [main] best 4326 combination reg byte a [ main::$31 ]
+Uplifting [main] best 4330 combination reg byte a [ main::$31 ]
Attempting to uplift remaining variables inzp ZP_BYTE:36 [ main::$32 ]
-Uplifting [main] best 4286 combination reg byte a [ main::$32 ]
+Uplifting [main] best 4290 combination reg byte a [ main::$32 ]
Attempting to uplift remaining variables inzp ZP_BYTE:37 [ main::bits#2 ]
-Uplifting [main] best 4226 combination reg byte a [ main::bits#2 ]
+Uplifting [main] best 4230 combination reg byte a [ main::bits#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:38 [ main::$38 ]
-Uplifting [main] best 4166 combination reg byte a [ main::$38 ]
+Uplifting [main] best 4170 combination reg byte a [ main::$38 ]
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ main::$39 ]
-Uplifting [main] best 4106 combination reg byte a [ main::$39 ]
+Uplifting [main] best 4110 combination reg byte a [ main::$39 ]
Attempting to uplift remaining variables inzp ZP_BYTE:41 [ main::$41 ]
-Uplifting [main] best 4046 combination reg byte a [ main::$41 ]
+Uplifting [main] best 4050 combination reg byte a [ main::$41 ]
Attempting to uplift remaining variables inzp ZP_BYTE:42 [ main::$42 ]
-Uplifting [main] best 3986 combination reg byte a [ main::$42 ]
+Uplifting [main] best 3990 combination reg byte a [ main::$42 ]
Attempting to uplift remaining variables inzp ZP_BYTE:43 [ main::$43 ]
-Uplifting [main] best 3946 combination reg byte a [ main::$43 ]
+Uplifting [main] best 3950 combination reg byte a [ main::$43 ]
Attempting to uplift remaining variables inzp ZP_BYTE:44 [ main::bits#3 ]
-Uplifting [main] best 3886 combination reg byte a [ main::bits#3 ]
+Uplifting [main] best 3890 combination reg byte a [ main::bits#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:45 [ main::bits_gen#7 ]
-Uplifting [main] best 3826 combination reg byte a [ main::bits_gen#7 ]
+Uplifting [main] best 3830 combination reg byte a [ main::bits_gen#7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::bits_gen#9 ]
-Uplifting [main] best 3736 combination reg byte a [ main::bits_gen#9 ]
+Uplifting [main] best 3740 combination reg byte a [ main::bits_gen#9 ]
Attempting to uplift remaining variables inzp ZP_BYTE:40 [ main::$40 ]
-Uplifting [main] best 3736 combination zp ZP_BYTE:40 [ main::$40 ]
+Uplifting [main] best 3740 combination zp ZP_BYTE:40 [ main::$40 ]
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ main::$2 ]
-Uplifting [main] best 3736 combination zp ZP_BYTE:14 [ main::$2 ]
+Uplifting [main] best 3740 combination zp ZP_BYTE:14 [ main::$2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:23 [ main::$15 ]
-Uplifting [main] best 3736 combination zp ZP_BYTE:23 [ main::$15 ]
+Uplifting [main] best 3740 combination zp ZP_BYTE:23 [ main::$15 ]
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ main::$28 ]
-Uplifting [main] best 3736 combination zp ZP_BYTE:32 [ main::$28 ]
+Uplifting [main] best 3740 combination zp ZP_BYTE:32 [ main::$28 ]
Coalescing zero page register [ zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 ] ] with [ zp ZP_BYTE:8 [ main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ] ]
Coalescing zero page register [ zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 ] ] with [ zp ZP_BYTE:9 [ main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ] ]
Coalescing zero page register [ zp ZP_BYTE:7 [ main::bits_gen#11 main::bits_gen#1 main::bits_gen#4 main::bits_gen#13 main::bits_gen#14 main::bits_gen#6 main::bits_gen#15 main::bits_gen#8 main::bits_gen#16 ] ] with [ zp ZP_BYTE:14 [ main::$2 ] ]
@@ -4098,29 +4139,31 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
- //SEG7 [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
lda #$32
sta PROCPORT
- //SEG8 [2] phi from main to main::@1 [phi:main->main::@1]
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
- //SEG9 [2] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ //SEG10 [3] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
lda #CHARSET4
sta charset4+1
- //SEG10 [2] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
+ //SEG11 [3] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
lda #CHARGEN
sta chargen+1
jmp b1
- //SEG11 [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
b1_from_b5:
- //SEG12 [2] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
- //SEG13 [2] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
- //SEG14 main::@1
+ //SEG13 [3] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
b1:
- //SEG15 [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
+ //SEG16 [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
lda chargen
clc
adc #1
@@ -4128,166 +4171,164 @@ main: {
lda chargen+1
adc #0
sta chargen1+1
- //SEG16 [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
+ //SEG17 [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG17 [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
+ //SEG18 [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
and #$60
sta _2
- //SEG18 [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
+ //SEG19 [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen1),y
- //SEG19 [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
+ //SEG20 [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
and #$60
- //SEG20 [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
+ //SEG21 [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
lsr
lsr
- //SEG21 [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
+ //SEG22 [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
ora _2
- //SEG22 [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
+ //SEG23 [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
lsr
- //SEG23 [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
+ //SEG24 [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
lsr
lsr
- //SEG24 [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
+ //SEG25 [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG25 [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
+ //SEG26 [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b2_from_b1
- //SEG26 main::@7
+ //SEG27 main::@7
b7:
- //SEG27 [14] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+ //SEG28 [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
b2_from_b7:
- //SEG28 [14] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
+ //SEG29 [15] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
lda #0+1
jmp b2
- //SEG29 [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG30 [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
- //SEG30 [14] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
+ //SEG31 [15] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
lda #0
- //SEG31 main::@2
+ //SEG32 main::@2
b2:
- //SEG32 [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
+ //SEG33 [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
asl
sta bits_gen
- //SEG33 [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
+ //SEG34 [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG34 [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
+ //SEG35 [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
and #$18
sta _15
- //SEG35 [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
+ //SEG36 [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen1),y
- //SEG36 [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
+ //SEG37 [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
and #$18
- //SEG37 [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
+ //SEG38 [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
lsr
lsr
- //SEG38 [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
+ //SEG39 [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
ora _15
- //SEG39 [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
+ //SEG40 [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
lsr
- //SEG40 [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
+ //SEG41 [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG41 [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
+ //SEG42 [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b3_from_b2
- //SEG42 main::@8
+ //SEG43 main::@8
b8:
- //SEG43 [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
+ //SEG44 [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG44 [26] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
+ //SEG45 [27] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
b3_from_b2:
b3_from_b8:
- //SEG45 [26] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
- //SEG46 main::@3
+ //SEG46 [27] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
+ //SEG47 main::@3
b3:
- //SEG47 [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG48 [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
+ //SEG48 [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG49 [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG49 [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
+ //SEG50 [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
and #6
- //SEG50 [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
+ //SEG51 [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
asl
sta _28
- //SEG51 [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
+ //SEG52 [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen1),y
- //SEG52 [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
+ //SEG53 [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
and #6
- //SEG53 [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
+ //SEG54 [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
lsr
- //SEG54 [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
+ //SEG55 [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
ora _28
- //SEG55 [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
+ //SEG56 [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG56 [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
+ //SEG57 [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b4_from_b3
- //SEG57 main::@9
+ //SEG58 main::@9
b9:
- //SEG58 [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
+ //SEG59 [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG59 [38] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
+ //SEG60 [39] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
b4_from_b3:
b4_from_b9:
- //SEG60 [38] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
- //SEG61 main::@4
+ //SEG61 [39] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
+ //SEG62 main::@4
b4:
- //SEG62 [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG63 [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
+ //SEG63 [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG64 [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG64 [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
+ //SEG65 [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
and #1
- //SEG65 [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
+ //SEG66 [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
asl
asl
sta _40
- //SEG66 [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
+ //SEG67 [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen1),y
- //SEG67 [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
+ //SEG68 [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
and #1
- //SEG68 [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
+ //SEG69 [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
ora _40
- //SEG69 [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
+ //SEG70 [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG70 [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
+ //SEG71 [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b5_from_b4
- //SEG71 main::@10
+ //SEG72 main::@10
b10:
- //SEG72 [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
+ //SEG73 [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG73 [49] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
+ //SEG74 [50] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
b5_from_b10:
b5_from_b4:
- //SEG74 [49] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
- //SEG75 main::@5
+ //SEG75 [50] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
+ //SEG76 main::@5
b5:
- //SEG76 [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
+ //SEG77 [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
lda bits_gen
asl
- //SEG77 [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
+ //SEG78 [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
ldy #0
sta (charset4),y
- //SEG78 [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
+ //SEG79 [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
inc charset4
bne !+
inc charset4+1
!:
- //SEG79 [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
+ //SEG80 [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda chargen
clc
adc #2
@@ -4295,7 +4336,7 @@ main: {
bcc !+
inc chargen+1
!:
- //SEG80 [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
+ //SEG81 [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
lda chargen+1
cmp #>CHARGEN+$800
bcc b1_from_b5
@@ -4304,37 +4345,39 @@ main: {
cmp #main::@6]
+ //SEG84 asm { cli }
+ cli
+ //SEG85 [58] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
b6_from_b11:
- //SEG84 [56] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
+ //SEG86 [58] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
ldx #0
jmp b6
- //SEG85 [56] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
+ //SEG87 [58] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
b6_from_b6:
- //SEG86 [56] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
- //SEG87 main::@6
+ //SEG88 [58] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
+ //SEG89 main::@6
b6:
- //SEG88 [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
+ //SEG90 [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
txa
sta SCREEN,x
- //SEG89 [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
+ //SEG91 [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
inx
- //SEG90 [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
+ //SEG92 [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
cpx #0
bne b6_from_b6
- //SEG91 main::@12
+ //SEG93 main::@12
b12:
- //SEG92 [60] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
+ //SEG94 [62] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
lda #$19
sta D018
- //SEG93 main::@return
+ //SEG95 main::@return
breturn:
- //SEG94 [61] return [ ]
+ //SEG96 [63] return [ ]
rts
}
@@ -4374,29 +4417,31 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
- //SEG7 [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
lda #$32
sta PROCPORT
- //SEG8 [2] phi from main to main::@1 [phi:main->main::@1]
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
- //SEG9 [2] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ //SEG10 [3] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
lda #CHARSET4
sta charset4+1
- //SEG10 [2] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
+ //SEG11 [3] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
lda #CHARGEN
sta chargen+1
jmp b1
- //SEG11 [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
b1_from_b5:
- //SEG12 [2] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
- //SEG13 [2] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
- //SEG14 main::@1
+ //SEG13 [3] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
b1:
- //SEG15 [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
+ //SEG16 [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
lda chargen
clc
adc #1
@@ -4404,162 +4449,160 @@ main: {
lda chargen+1
adc #0
sta chargen1+1
- //SEG16 [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
+ //SEG17 [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG17 [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
+ //SEG18 [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
and #$60
sta _2
- //SEG18 [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
+ //SEG19 [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG19 [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
+ //SEG20 [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
and #$60
- //SEG20 [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
+ //SEG21 [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
lsr
lsr
- //SEG21 [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
+ //SEG22 [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
ora _2
- //SEG22 [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
+ //SEG23 [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
lsr
- //SEG23 [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
+ //SEG24 [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
lsr
lsr
- //SEG24 [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
+ //SEG25 [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG25 [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
+ //SEG26 [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b2_from_b1
- //SEG26 main::@7
+ //SEG27 main::@7
b7:
- //SEG27 [14] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+ //SEG28 [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
b2_from_b7:
- //SEG28 [14] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
+ //SEG29 [15] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
lda #0+1
jmp b2
- //SEG29 [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG30 [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
- //SEG30 [14] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
+ //SEG31 [15] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
lda #0
- //SEG31 main::@2
+ //SEG32 main::@2
b2:
- //SEG32 [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
+ //SEG33 [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
asl
sta bits_gen
- //SEG33 [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
+ //SEG34 [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG34 [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
+ //SEG35 [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
and #$18
sta _15
- //SEG35 [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
+ //SEG36 [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG36 [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
+ //SEG37 [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
and #$18
- //SEG37 [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
+ //SEG38 [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
lsr
lsr
- //SEG38 [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
+ //SEG39 [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
ora _15
- //SEG39 [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
+ //SEG40 [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
lsr
- //SEG40 [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
+ //SEG41 [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG41 [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
+ //SEG42 [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b3_from_b2
- //SEG42 main::@8
+ //SEG43 main::@8
b8:
- //SEG43 [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
+ //SEG44 [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG44 [26] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
+ //SEG45 [27] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
b3_from_b2:
b3_from_b8:
- //SEG45 [26] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
- //SEG46 main::@3
+ //SEG46 [27] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
+ //SEG47 main::@3
b3:
- //SEG47 [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG48 [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
+ //SEG48 [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG49 [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG49 [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
+ //SEG50 [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
and #6
- //SEG50 [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
+ //SEG51 [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
asl
sta _28
- //SEG51 [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
+ //SEG52 [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG52 [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
+ //SEG53 [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
and #6
- //SEG53 [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
+ //SEG54 [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
lsr
- //SEG54 [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
+ //SEG55 [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
ora _28
- //SEG55 [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
+ //SEG56 [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG56 [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
+ //SEG57 [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b4_from_b3
- //SEG57 main::@9
+ //SEG58 main::@9
b9:
- //SEG58 [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
+ //SEG59 [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG59 [38] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
+ //SEG60 [39] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
b4_from_b3:
b4_from_b9:
- //SEG60 [38] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
- //SEG61 main::@4
+ //SEG61 [39] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
+ //SEG62 main::@4
b4:
- //SEG62 [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG63 [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
+ //SEG63 [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG64 [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG64 [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
+ //SEG65 [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
and #1
- //SEG65 [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
+ //SEG66 [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
asl
asl
sta _40
- //SEG66 [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
+ //SEG67 [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG67 [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
+ //SEG68 [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
and #1
- //SEG68 [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
+ //SEG69 [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
ora _40
- //SEG69 [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
+ //SEG70 [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG70 [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
+ //SEG71 [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b5_from_b4
- //SEG71 main::@10
+ //SEG72 main::@10
b10:
- //SEG72 [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
+ //SEG73 [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG73 [49] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
+ //SEG74 [50] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
b5_from_b10:
b5_from_b4:
- //SEG74 [49] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
- //SEG75 main::@5
+ //SEG75 [50] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
+ //SEG76 main::@5
b5:
- //SEG76 [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
+ //SEG77 [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
lda bits_gen
asl
- //SEG77 [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
+ //SEG78 [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
ldy #0
sta (charset4),y
- //SEG78 [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
+ //SEG79 [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
inc charset4
bne !+
inc charset4+1
!:
- //SEG79 [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
+ //SEG80 [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda chargen
clc
adc #2
@@ -4567,7 +4610,7 @@ main: {
bcc !+
inc chargen+1
!:
- //SEG80 [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
+ //SEG81 [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
lda chargen+1
cmp #>CHARGEN+$800
bcc b1_from_b5
@@ -4576,37 +4619,39 @@ main: {
cmp #main::@6]
+ //SEG84 asm { cli }
+ cli
+ //SEG85 [58] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
b6_from_b11:
- //SEG84 [56] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
+ //SEG86 [58] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
ldx #0
jmp b6
- //SEG85 [56] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
+ //SEG87 [58] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
b6_from_b6:
- //SEG86 [56] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
- //SEG87 main::@6
+ //SEG88 [58] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
+ //SEG89 main::@6
b6:
- //SEG88 [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
+ //SEG90 [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
txa
sta SCREEN,x
- //SEG89 [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
+ //SEG91 [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
inx
- //SEG90 [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
+ //SEG92 [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
cpx #0
bne b6_from_b6
- //SEG91 main::@12
+ //SEG93 main::@12
b12:
- //SEG92 [60] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
+ //SEG94 [62] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
lda #$19
sta D018
- //SEG93 main::@return
+ //SEG95 main::@return
breturn:
- //SEG94 [61] return [ ]
+ //SEG96 [63] return [ ]
rts
}
@@ -4657,28 +4702,30 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
- //SEG7 [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
lda #$32
sta PROCPORT
- //SEG8 [2] phi from main to main::@1 [phi:main->main::@1]
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
- //SEG9 [2] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ //SEG10 [3] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
lda #CHARSET4
sta charset4+1
- //SEG10 [2] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
+ //SEG11 [3] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
lda #CHARGEN
sta chargen+1
jmp b1
- //SEG11 [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
- //SEG12 [2] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
- //SEG13 [2] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
- //SEG14 main::@1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
b1:
- //SEG15 [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
+ //SEG16 [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
lda chargen
clc
adc #1
@@ -4686,155 +4733,153 @@ main: {
lda chargen+1
adc #0
sta chargen1+1
- //SEG16 [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
+ //SEG17 [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG17 [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
+ //SEG18 [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
and #$60
sta _2
- //SEG18 [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
+ //SEG19 [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG19 [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
+ //SEG20 [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
and #$60
- //SEG20 [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
+ //SEG21 [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
lsr
lsr
- //SEG21 [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
+ //SEG22 [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
ora _2
- //SEG22 [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
+ //SEG23 [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
lsr
- //SEG23 [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
+ //SEG24 [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
lsr
lsr
- //SEG24 [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
+ //SEG25 [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG25 [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
+ //SEG26 [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b2_from_b1
- //SEG26 main::@7
+ //SEG27 main::@7
b7:
- //SEG27 [14] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
- //SEG28 [14] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
+ //SEG28 [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+ //SEG29 [15] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
lda #0+1
jmp b2
- //SEG29 [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG30 [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
- //SEG30 [14] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
+ //SEG31 [15] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
lda #0
- //SEG31 main::@2
+ //SEG32 main::@2
b2:
- //SEG32 [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
+ //SEG33 [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
asl
sta bits_gen
- //SEG33 [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
+ //SEG34 [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG34 [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
+ //SEG35 [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
and #$18
sta _15
- //SEG35 [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
+ //SEG36 [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG36 [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
+ //SEG37 [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
and #$18
- //SEG37 [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
+ //SEG38 [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
lsr
lsr
- //SEG38 [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
+ //SEG39 [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
ora _15
- //SEG39 [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
+ //SEG40 [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
lsr
- //SEG40 [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
+ //SEG41 [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG41 [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
+ //SEG42 [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b3
- //SEG42 main::@8
+ //SEG43 main::@8
b8:
- //SEG43 [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
+ //SEG44 [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG44 [26] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
- //SEG45 [26] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
- //SEG46 main::@3
+ //SEG45 [27] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
+ //SEG46 [27] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
+ //SEG47 main::@3
b3:
- //SEG47 [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG48 [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
+ //SEG48 [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG49 [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG49 [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
+ //SEG50 [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
and #6
- //SEG50 [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
+ //SEG51 [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
asl
sta _28
- //SEG51 [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
+ //SEG52 [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG52 [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
+ //SEG53 [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
and #6
- //SEG53 [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
+ //SEG54 [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
lsr
- //SEG54 [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
+ //SEG55 [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
ora _28
- //SEG55 [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
+ //SEG56 [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG56 [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
+ //SEG57 [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b4
- //SEG57 main::@9
+ //SEG58 main::@9
b9:
- //SEG58 [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
+ //SEG59 [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG59 [38] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
- //SEG60 [38] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
- //SEG61 main::@4
+ //SEG60 [39] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
+ //SEG61 [39] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
+ //SEG62 main::@4
b4:
- //SEG62 [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG63 [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
+ //SEG63 [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG64 [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG64 [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
+ //SEG65 [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
and #1
- //SEG65 [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
+ //SEG66 [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
asl
asl
sta _40
- //SEG66 [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
+ //SEG67 [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG67 [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
+ //SEG68 [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
and #1
- //SEG68 [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
+ //SEG69 [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
ora _40
- //SEG69 [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
+ //SEG70 [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG70 [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
+ //SEG71 [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b5
- //SEG71 main::@10
+ //SEG72 main::@10
b10:
- //SEG72 [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
+ //SEG73 [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG73 [49] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
- //SEG74 [49] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
- //SEG75 main::@5
+ //SEG74 [50] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
+ //SEG75 [50] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
+ //SEG76 main::@5
b5:
- //SEG76 [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
+ //SEG77 [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
lda bits_gen
asl
- //SEG77 [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
+ //SEG78 [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
ldy #0
sta (charset4),y
- //SEG78 [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
+ //SEG79 [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
inc charset4
bne !+
inc charset4+1
!:
- //SEG79 [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
+ //SEG80 [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda chargen
clc
adc #2
@@ -4842,7 +4887,7 @@ main: {
bcc !+
inc chargen+1
!:
- //SEG80 [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
+ //SEG81 [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
lda chargen+1
cmp #>CHARGEN+$800
bcc b1
@@ -4851,36 +4896,38 @@ main: {
cmp #main::@6]
+ //SEG84 asm { cli }
+ cli
+ //SEG85 [58] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
b6_from_b11:
- //SEG84 [56] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
+ //SEG86 [58] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
ldx #0
jmp b6
- //SEG85 [56] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
- //SEG86 [56] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
- //SEG87 main::@6
+ //SEG87 [58] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
+ //SEG88 [58] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
+ //SEG89 main::@6
b6:
- //SEG88 [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
+ //SEG90 [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
txa
sta SCREEN,x
- //SEG89 [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
+ //SEG91 [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
inx
- //SEG90 [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
+ //SEG92 [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
cpx #0
bne b6
- //SEG91 main::@12
+ //SEG93 main::@12
b12:
- //SEG92 [60] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
+ //SEG94 [62] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
lda #$19
sta D018
- //SEG93 main::@return
+ //SEG95 main::@return
breturn:
- //SEG94 [61] return [ ]
+ //SEG96 [63] return [ ]
rts
}
@@ -4924,27 +4971,29 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
- //SEG7 [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
lda #$32
sta PROCPORT
- //SEG8 [2] phi from main to main::@1 [phi:main->main::@1]
- //SEG9 [2] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ //SEG10 [3] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
lda #CHARSET4
sta charset4+1
- //SEG10 [2] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
+ //SEG11 [3] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
lda #CHARGEN
sta chargen+1
jmp b1
- //SEG11 [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
- //SEG12 [2] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
- //SEG13 [2] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
- //SEG14 main::@1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
b1:
- //SEG15 [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
+ //SEG16 [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
lda chargen
clc
adc #1
@@ -4952,151 +5001,149 @@ main: {
lda chargen+1
adc #0
sta chargen1+1
- //SEG16 [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
+ //SEG17 [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG17 [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
+ //SEG18 [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
and #$60
sta _2
- //SEG18 [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
+ //SEG19 [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG19 [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
+ //SEG20 [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
and #$60
- //SEG20 [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
+ //SEG21 [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
lsr
lsr
- //SEG21 [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
+ //SEG22 [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
ora _2
- //SEG22 [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
+ //SEG23 [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
lsr
- //SEG23 [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
+ //SEG24 [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
lsr
lsr
- //SEG24 [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
+ //SEG25 [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG25 [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
+ //SEG26 [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b2_from_b1
- //SEG26 main::@7
- //SEG27 [14] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
- //SEG28 [14] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
+ //SEG27 main::@7
+ //SEG28 [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+ //SEG29 [15] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
lda #0+1
jmp b2
- //SEG29 [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG30 [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
- //SEG30 [14] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
+ //SEG31 [15] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
lda #0
- //SEG31 main::@2
+ //SEG32 main::@2
b2:
- //SEG32 [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
+ //SEG33 [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
asl
sta bits_gen
- //SEG33 [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
+ //SEG34 [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG34 [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
+ //SEG35 [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
and #$18
sta _15
- //SEG35 [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
+ //SEG36 [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG36 [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
+ //SEG37 [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
and #$18
- //SEG37 [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
+ //SEG38 [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
lsr
lsr
- //SEG38 [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
+ //SEG39 [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
ora _15
- //SEG39 [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
+ //SEG40 [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
lsr
- //SEG40 [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
+ //SEG41 [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG41 [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
+ //SEG42 [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b3
- //SEG42 main::@8
- //SEG43 [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
+ //SEG43 main::@8
+ //SEG44 [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG44 [26] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
- //SEG45 [26] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
- //SEG46 main::@3
+ //SEG45 [27] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
+ //SEG46 [27] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
+ //SEG47 main::@3
b3:
- //SEG47 [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG48 [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
+ //SEG48 [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG49 [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG49 [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
+ //SEG50 [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
and #6
- //SEG50 [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
+ //SEG51 [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
asl
sta _28
- //SEG51 [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
+ //SEG52 [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG52 [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
+ //SEG53 [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
and #6
- //SEG53 [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
+ //SEG54 [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
lsr
- //SEG54 [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
+ //SEG55 [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
ora _28
- //SEG55 [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
+ //SEG56 [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG56 [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
+ //SEG57 [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b4
- //SEG57 main::@9
- //SEG58 [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
+ //SEG58 main::@9
+ //SEG59 [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG59 [38] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
- //SEG60 [38] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
- //SEG61 main::@4
+ //SEG60 [39] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
+ //SEG61 [39] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
+ //SEG62 main::@4
b4:
- //SEG62 [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG63 [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
+ //SEG63 [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG64 [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG64 [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
+ //SEG65 [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
and #1
- //SEG65 [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
+ //SEG66 [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
asl
asl
sta _40
- //SEG66 [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
+ //SEG67 [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG67 [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
+ //SEG68 [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
and #1
- //SEG68 [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
+ //SEG69 [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
ora _40
- //SEG69 [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
+ //SEG70 [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG70 [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
+ //SEG71 [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b5
- //SEG71 main::@10
- //SEG72 [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
+ //SEG72 main::@10
+ //SEG73 [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG73 [49] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
- //SEG74 [49] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
- //SEG75 main::@5
+ //SEG74 [50] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
+ //SEG75 [50] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
+ //SEG76 main::@5
b5:
- //SEG76 [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
+ //SEG77 [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
lda bits_gen
asl
- //SEG77 [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
+ //SEG78 [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
ldy #0
sta (charset4),y
- //SEG78 [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
+ //SEG79 [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
inc charset4
bne !+
inc charset4+1
!:
- //SEG79 [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
+ //SEG80 [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda chargen
clc
adc #2
@@ -5104,7 +5151,7 @@ main: {
bcc !+
inc chargen+1
!:
- //SEG80 [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
+ //SEG81 [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
lda chargen+1
cmp #>CHARGEN+$800
bcc b1
@@ -5113,32 +5160,34 @@ main: {
cmp #main::@6]
- //SEG84 [56] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
+ //SEG84 asm { cli }
+ cli
+ //SEG85 [58] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
+ //SEG86 [58] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
ldx #0
jmp b6
- //SEG85 [56] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
- //SEG86 [56] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
- //SEG87 main::@6
+ //SEG87 [58] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
+ //SEG88 [58] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
+ //SEG89 main::@6
b6:
- //SEG88 [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
+ //SEG90 [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
txa
sta SCREEN,x
- //SEG89 [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
+ //SEG91 [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
inx
- //SEG90 [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
+ //SEG92 [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
cpx #0
bne b6
- //SEG91 main::@12
- //SEG92 [60] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
+ //SEG93 main::@12
+ //SEG94 [62] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
lda #$19
sta D018
- //SEG93 main::@return
- //SEG94 [61] return [ ]
+ //SEG95 main::@return
+ //SEG96 [63] return [ ]
rts
}
@@ -5173,26 +5222,28 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
- //SEG7 [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
lda #$32
sta PROCPORT
- //SEG8 [2] phi from main to main::@1 [phi:main->main::@1]
- //SEG9 [2] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ //SEG10 [3] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
lda #CHARSET4
sta charset4+1
- //SEG10 [2] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
+ //SEG11 [3] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
lda #CHARGEN
sta chargen+1
- //SEG11 [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
- //SEG12 [2] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
- //SEG13 [2] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
- //SEG14 main::@1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
b1:
- //SEG15 [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
+ //SEG16 [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
lda chargen
clc
adc #1
@@ -5200,151 +5251,149 @@ main: {
lda chargen+1
adc #0
sta chargen1+1
- //SEG16 [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
+ //SEG17 [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG17 [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
+ //SEG18 [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
and #$60
sta _2
- //SEG18 [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
+ //SEG19 [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG19 [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
+ //SEG20 [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
and #$60
- //SEG20 [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
+ //SEG21 [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
lsr
lsr
- //SEG21 [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
+ //SEG22 [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
ora _2
- //SEG22 [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
+ //SEG23 [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
lsr
- //SEG23 [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
+ //SEG24 [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
lsr
lsr
- //SEG24 [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
+ //SEG25 [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG25 [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
+ //SEG26 [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b2_from_b1
- //SEG26 main::@7
- //SEG27 [14] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
- //SEG28 [14] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
+ //SEG27 main::@7
+ //SEG28 [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+ //SEG29 [15] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
lda #0+1
jmp b2
- //SEG29 [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG30 [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
- //SEG30 [14] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
+ //SEG31 [15] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
lda #0
- //SEG31 main::@2
+ //SEG32 main::@2
b2:
- //SEG32 [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
+ //SEG33 [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
asl
sta bits_gen
- //SEG33 [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
+ //SEG34 [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG34 [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
+ //SEG35 [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
and #$18
sta _15
- //SEG35 [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
+ //SEG36 [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG36 [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
+ //SEG37 [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
and #$18
- //SEG37 [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
+ //SEG38 [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
lsr
lsr
- //SEG38 [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
+ //SEG39 [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
ora _15
- //SEG39 [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
+ //SEG40 [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
lsr
- //SEG40 [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
+ //SEG41 [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG41 [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
+ //SEG42 [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b3
- //SEG42 main::@8
- //SEG43 [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
+ //SEG43 main::@8
+ //SEG44 [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG44 [26] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
- //SEG45 [26] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
- //SEG46 main::@3
+ //SEG45 [27] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
+ //SEG46 [27] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
+ //SEG47 main::@3
b3:
- //SEG47 [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG48 [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
+ //SEG48 [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG49 [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG49 [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
+ //SEG50 [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
and #6
- //SEG50 [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
+ //SEG51 [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
asl
sta _28
- //SEG51 [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
+ //SEG52 [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG52 [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
+ //SEG53 [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
and #6
- //SEG53 [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
+ //SEG54 [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
lsr
- //SEG54 [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
+ //SEG55 [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
ora _28
- //SEG55 [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
+ //SEG56 [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG56 [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
+ //SEG57 [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b4
- //SEG57 main::@9
- //SEG58 [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
+ //SEG58 main::@9
+ //SEG59 [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG59 [38] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
- //SEG60 [38] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
- //SEG61 main::@4
+ //SEG60 [39] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
+ //SEG61 [39] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
+ //SEG62 main::@4
b4:
- //SEG62 [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG63 [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
+ //SEG63 [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG64 [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG64 [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
+ //SEG65 [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
and #1
- //SEG65 [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
+ //SEG66 [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
asl
asl
sta _40
- //SEG66 [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
+ //SEG67 [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG67 [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
+ //SEG68 [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
and #1
- //SEG68 [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
+ //SEG69 [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
ora _40
- //SEG69 [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
+ //SEG70 [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG70 [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
+ //SEG71 [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b5
- //SEG71 main::@10
- //SEG72 [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
+ //SEG72 main::@10
+ //SEG73 [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG73 [49] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
- //SEG74 [49] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
- //SEG75 main::@5
+ //SEG74 [50] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
+ //SEG75 [50] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
+ //SEG76 main::@5
b5:
- //SEG76 [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
+ //SEG77 [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
lda bits_gen
asl
- //SEG77 [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
+ //SEG78 [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
ldy #0
sta (charset4),y
- //SEG78 [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
+ //SEG79 [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
inc charset4
bne !+
inc charset4+1
!:
- //SEG79 [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
+ //SEG80 [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda chargen
clc
adc #2
@@ -5352,7 +5401,7 @@ main: {
bcc !+
inc chargen+1
!:
- //SEG80 [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
+ //SEG81 [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
lda chargen+1
cmp #>CHARGEN+$800
bcc b1
@@ -5361,31 +5410,33 @@ main: {
cmp #main::@6]
- //SEG84 [56] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
+ //SEG84 asm { cli }
+ cli
+ //SEG85 [58] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
+ //SEG86 [58] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
ldx #0
- //SEG85 [56] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
- //SEG86 [56] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
- //SEG87 main::@6
+ //SEG87 [58] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
+ //SEG88 [58] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
+ //SEG89 main::@6
b6:
- //SEG88 [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
+ //SEG90 [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
txa
sta SCREEN,x
- //SEG89 [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
+ //SEG91 [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
inx
- //SEG90 [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
+ //SEG92 [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
cpx #0
bne b6
- //SEG91 main::@12
- //SEG92 [60] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
+ //SEG93 main::@12
+ //SEG94 [62] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
lda #$19
sta D018
- //SEG93 main::@return
- //SEG94 [61] return [ ]
+ //SEG95 main::@return
+ //SEG96 [63] return [ ]
rts
}
@@ -5543,26 +5594,28 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
- //SEG7 [1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
+ //SEG7 asm { sei }
+ sei
+ //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
lda #$32
sta PROCPORT
- //SEG8 [2] phi from main to main::@1 [phi:main->main::@1]
- //SEG9 [2] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
+ //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
+ //SEG10 [3] phi (byte*) main::charset4#10 = (const byte*) CHARSET4#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
lda #CHARSET4
sta charset4+1
- //SEG10 [2] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
+ //SEG11 [3] phi (byte*) main::chargen#10 = (const byte*) CHARGEN#0 [phi:main->main::@1#1] -- zpptrby1=cowo1
lda #CHARGEN
sta chargen+1
- //SEG11 [2] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
- //SEG12 [2] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
- //SEG13 [2] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
- //SEG14 main::@1
+ //SEG12 [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
+ //SEG13 [3] phi (byte*) main::charset4#10 = (byte*) main::charset4#1 [phi:main::@5->main::@1#0] -- register_copy
+ //SEG14 [3] phi (byte*) main::chargen#10 = (byte*) main::chargen#1 [phi:main::@5->main::@1#1] -- register_copy
+ //SEG15 main::@1
b1:
- //SEG15 [3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
+ //SEG16 [4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- zpptrby1=zpptrby2_plus_1
lda chargen
clc
adc #1
@@ -5570,151 +5623,149 @@ main: {
lda chargen+1
adc #0
sta chargen1+1
- //SEG16 [4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
+ //SEG17 [5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG17 [5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
+ //SEG18 [6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ] -- zpby1=aby_band_coby1
and #$60
sta _2
- //SEG18 [6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
+ //SEG19 [7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG19 [7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
+ //SEG20 [8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ] -- aby=aby_band_coby1
and #$60
- //SEG20 [8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
+ //SEG21 [9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ] -- aby=aby_ror_2
lsr
lsr
- //SEG21 [9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
+ //SEG22 [10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ] -- aby=zpby1_bor_aby
ora _2
- //SEG22 [10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
+ //SEG23 [11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ] -- aby=aby_ror_1
lsr
- //SEG23 [11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
+ //SEG24 [12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ] -- aby=aby_ror_2
lsr
lsr
- //SEG24 [12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
+ //SEG25 [13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG25 [13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
+ //SEG26 [14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b2_from_b1
- //SEG26 main::@7
- //SEG27 [14] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
- //SEG28 [14] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
+ //SEG27 main::@7
+ //SEG28 [15] phi from main::@7 to main::@2 [phi:main::@7->main::@2]
+ //SEG29 [15] phi (byte) main::bits_gen#9 = (byte) 0+(byte) 1 [phi:main::@7->main::@2#0] -- aby=coby1
lda #0+1
jmp b2
- //SEG29 [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
+ //SEG30 [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
- //SEG30 [14] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
+ //SEG31 [15] phi (byte) main::bits_gen#9 = (byte) 0 [phi:main::@1->main::@2#0] -- aby=coby1
lda #0
- //SEG31 main::@2
+ //SEG32 main::@2
b2:
- //SEG32 [15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
+ //SEG33 [16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- zpby1=aby_rol_1
asl
sta bits_gen
- //SEG33 [16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
+ //SEG34 [17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG34 [17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
+ //SEG35 [18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] -- zpby1=aby_band_coby1
and #$18
sta _15
- //SEG35 [18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
+ //SEG36 [19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG36 [19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
+ //SEG37 [20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ] -- aby=aby_band_coby1
and #$18
- //SEG37 [20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
+ //SEG38 [21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ] -- aby=aby_ror_2
lsr
lsr
- //SEG38 [21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
+ //SEG39 [22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ] -- aby=zpby1_bor_aby
ora _15
- //SEG39 [22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
+ //SEG40 [23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ] -- aby=aby_ror_1
lsr
- //SEG40 [23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
+ //SEG41 [24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG41 [24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
+ //SEG42 [25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b3
- //SEG42 main::@8
- //SEG43 [25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
+ //SEG43 main::@8
+ //SEG44 [26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG44 [26] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
- //SEG45 [26] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
- //SEG46 main::@3
+ //SEG45 [27] phi from main::@2 main::@8 to main::@3 [phi:main::@2/main::@8->main::@3]
+ //SEG46 [27] phi (byte) main::bits_gen#11 = (byte) main::bits_gen#1 [phi:main::@2/main::@8->main::@3#0] -- register_copy
+ //SEG47 main::@3
b3:
- //SEG47 [27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG48 [28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
+ //SEG48 [28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG49 [29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG49 [29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
+ //SEG50 [30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ] -- aby=aby_band_coby1
and #6
- //SEG50 [30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
+ //SEG51 [31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ] -- zpby1=aby_rol_1
asl
sta _28
- //SEG51 [31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
+ //SEG52 [32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG52 [32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
+ //SEG53 [33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ] -- aby=aby_band_coby1
and #6
- //SEG53 [33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
+ //SEG54 [34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ] -- aby=aby_ror_1
lsr
- //SEG54 [34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
+ //SEG55 [35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ] -- aby=zpby1_bor_aby
ora _28
- //SEG55 [35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
+ //SEG56 [36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG56 [36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
+ //SEG57 [37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b4
- //SEG57 main::@9
- //SEG58 [37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
+ //SEG58 main::@9
+ //SEG59 [38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG59 [38] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
- //SEG60 [38] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
- //SEG61 main::@4
+ //SEG60 [39] phi from main::@3 main::@9 to main::@4 [phi:main::@3/main::@9->main::@4]
+ //SEG61 [39] phi (byte) main::bits_gen#13 = (byte) main::bits_gen#14 [phi:main::@3/main::@9->main::@4#0] -- register_copy
+ //SEG62 main::@4
b4:
- //SEG62 [39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
- asl
- sta bits_gen
- //SEG63 [40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
+ //SEG63 [40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ] -- zpby1=zpby1_rol_1
+ asl bits_gen
+ //SEG64 [41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ] -- aby=_star_zpptrby1
ldy #0
lda (chargen),y
- //SEG64 [41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
+ //SEG65 [42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ] -- aby=aby_band_coby1
and #1
- //SEG65 [42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
+ //SEG66 [43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ] -- zpby1=aby_rol_2
asl
asl
sta _40
- //SEG66 [43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
+ //SEG67 [44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ] -- aby=_star_zpptrby1
lda (chargen1),y
- //SEG67 [44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
+ //SEG68 [45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ] -- aby=aby_band_coby1
and #1
- //SEG68 [45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
+ //SEG69 [46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ] -- aby=zpby1_bor_aby
ora _40
- //SEG69 [46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
+ //SEG70 [47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] -- aby=cowo1_staridx_aby
tax
lda bits_count,x
- //SEG70 [47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
+ //SEG71 [48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] -- aby_lt_coby1_then_la1
cmp #2
bcc b5
- //SEG71 main::@10
- //SEG72 [48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
+ //SEG72 main::@10
+ //SEG73 [49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ] -- zpby1=zpby1_plus_1
inc bits_gen
- //SEG73 [49] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
- //SEG74 [49] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
- //SEG75 main::@5
+ //SEG74 [50] phi from main::@10 main::@4 to main::@5 [phi:main::@10/main::@4->main::@5]
+ //SEG75 [50] phi (byte) main::bits_gen#15 = (byte) main::bits_gen#8 [phi:main::@10/main::@4->main::@5#0] -- register_copy
+ //SEG76 main::@5
b5:
- //SEG76 [50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
+ //SEG77 [51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ] -- aby=zpby1_rol_1
lda bits_gen
asl
- //SEG77 [51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
+ //SEG78 [52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ] -- _star_zpptrby1=aby
ldy #0
sta (charset4),y
- //SEG78 [52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
+ //SEG79 [53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ] -- zpptrby1=_inc_zpptrby1
inc charset4
bne !+
inc charset4+1
!:
- //SEG79 [53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
+ //SEG80 [54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda chargen
clc
adc #2
@@ -5722,7 +5773,7 @@ main: {
bcc !+
inc chargen+1
!:
- //SEG80 [54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
+ //SEG81 [55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ] -- zpptrby1_lt_cowo1_then_la1
lda chargen+1
cmp #>CHARGEN+$800
bcc b1
@@ -5731,31 +5782,33 @@ main: {
cmp #main::@6]
- //SEG84 [56] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
+ //SEG84 asm { cli }
+ cli
+ //SEG85 [58] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
+ //SEG86 [58] phi (byte) main::i#2 = (byte) 0 [phi:main::@11->main::@6#0] -- xby=coby1
ldx #0
- //SEG85 [56] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
- //SEG86 [56] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
- //SEG87 main::@6
+ //SEG87 [58] phi from main::@6 to main::@6 [phi:main::@6->main::@6]
+ //SEG88 [58] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@6->main::@6#0] -- register_copy
+ //SEG89 main::@6
b6:
- //SEG88 [57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
+ //SEG90 [59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] -- cowo1_staridx_xby=xby
txa
sta SCREEN,x
- //SEG89 [58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
+ //SEG91 [60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
inx
- //SEG90 [59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
+ //SEG92 [61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ] -- xby_neq_0_then_la1
cpx #0
bne b6
- //SEG91 main::@12
- //SEG92 [60] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
+ //SEG93 main::@12
+ //SEG94 [62] *((const byte*) D018#0) ← (byte) 25 [ ] -- _star_cowo1=coby2
lda #$19
sta D018
- //SEG93 main::@return
- //SEG94 [61] return [ ]
+ //SEG95 main::@return
+ //SEG96 [63] return [ ]
rts
}
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log b/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log
index f541fd83d..ca60c7600 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/ifmin.log
@@ -7,7 +7,7 @@ void main() {
if(i<50) {
*SCREEN = i;
}
- } while(++i<100)
+ } while(++i<100);
}
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
PROGRAM
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.asm b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.asm
index e380ddda7..54b806d27 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.asm
+++ b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.asm
@@ -1,64 +1,16 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
- .const PROCPORT = 1
- .const CHARGEN = $d000
- .const SCREEN = $400
jsr main
main: {
- .const CHAR_A = CHARGEN+8
- .label bits = 3
- .label sc = 4
- .label y = 2
- sei
- lda #$32
- sta PROCPORT
- lda #SCREEN
- sta sc+1
- lda #0
- sta y
- b1:
- ldx y
- lda CHAR_A,x
- sta bits
- ldx #0
- b2:
- lda bits
- and #$80
- cmp #0
- beq b3
- ldy #0
- lda #'*'
- sta (sc),y
- b4:
- inc sc
- bne !+
- inc sc+1
+ lda #'a'
+ ldx #$ff
!:
- asl bits
- inx
- cpx #8
- bne b2
- lda sc
- clc
- adc #$20
- sta sc
- bcc !+
- inc sc+1
- !:
- inc y
- lda y
- cmp #8
- bne b1
- lda #$37
- sta PROCPORT
- cli
+ sta $400,x
+ sta $500,x
+ sta $600,x
+ sta $700,x
+ dex
+ bne !-
rts
- b3:
- ldy #0
- lda #'.'
- sta (sc),y
- jmp b4
}
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.cfg b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.cfg
index 057b48da5..17512be29 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.cfg
+++ b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.cfg
@@ -5,42 +5,8 @@
to:@end
@end: scope:[] from @1
main: scope:[main] from @1
- asm { sei }
- [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
- to:main::@1
-main::@1: scope:[main] from main main::@7
- [3] (byte*) main::sc#8 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*) main::sc#2 ) [ main::y#2 main::sc#8 ]
- [3] (byte) main::y#2 ← phi( main/(byte) 0 main::@7/(byte) main::y#1 ) [ main::y#2 main::sc#8 ]
- [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ]
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- [5] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [5] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [5] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
- [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@5
-main::@5: scope:[main] from main::@2
- [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
- [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ]
- [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
- [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
- to:main::@7
-main::@7: scope:[main] from main::@4
- [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
- [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ]
- [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ]
- to:main::@8
-main::@8: scope:[main] from main::@7
- [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
- [18] return [ ]
+main::@return: scope:[main] from main
+ [2] return [ ]
to:@return
-main::@3: scope:[main] from main::@2
- [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@4
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.log b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.log
index 2f825e408..cea5f6f1e 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.log
@@ -1,210 +1,37 @@
-byte* PROCPORT = $01;
-byte* CHARGEN = $d000;
-byte* SCREEN = $0400;
void main() {
- asm { sei };
- byte* CHAR_A = CHARGEN+8;
- *PROCPORT = $32;
- byte* sc = SCREEN;
- for(byte y:0..7) {
- byte bits = CHAR_A[y];
- for(byte x:0..7) {
- if((bits & $80) != 0) {
- *sc = '*';
- } else {
- *sc = '.';
- }
- sc++;
- bits = bits<<1;
- }
- sc = sc+32;
- }
- *PROCPORT = $37;
- asm { cli };
+ asm {
+ lda #'a'
+ ldx #$ff
+ !:
+ sta $0400,x
+ sta $0500,x
+ sta $0600,x
+ sta $0700,x
+ dex
+ bne !-
+ };
}
-Adding pre/post-modifier (byte*) main::sc ← ++ (byte*) main::sc
PROGRAM
- (byte*) PROCPORT ← (byte) 1
- (byte*) CHARGEN ← (word) 53248
- (byte*) SCREEN ← (word) 1024
proc (void()) main()
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN + (byte) 8
- (byte*) main::CHAR_A ← (byte*~) main::$0
- *((byte*) PROCPORT) ← (byte) 50
- (byte*) main::sc ← (byte*) SCREEN
- (byte) main::y ← (byte) 0
-main::@1:
- (byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
- (byte) main::bits ← (byte~) main::$1
- (byte) main::x ← (byte) 0
-main::@2:
- (byte~) main::$2 ← (byte) main::bits & (byte) 128
- (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
- (boolean~) main::$4 ← ! (boolean~) main::$3
- if((boolean~) main::$4) goto main::@3
- *((byte*) main::sc) ← (byte) '*'
- goto main::@4
-main::@3:
- *((byte*) main::sc) ← (byte) '.'
-main::@4:
- (byte*) main::sc ← ++ (byte*) main::sc
- (byte~) main::$5 ← (byte) main::bits << (byte) 1
- (byte) main::bits ← (byte~) main::$5
- (byte) main::x ← ++ (byte) main::x
- (boolean~) main::$6 ← (byte) main::x != (byte) 8
- if((boolean~) main::$6) goto main::@2
- (byte*~) main::$7 ← (byte*) main::sc + (byte) 32
- (byte*) main::sc ← (byte*~) main::$7
- (byte) main::y ← ++ (byte) main::y
- (boolean~) main::$8 ← (byte) main::y != (byte) 8
- if((boolean~) main::$8) goto main::@1
- *((byte*) PROCPORT) ← (byte) 55
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
main::@return:
return
endproc // main()
call main
SYMBOLS
-(byte*) CHARGEN
-(byte*) PROCPORT
-(byte*) SCREEN
(void()) main()
-(byte*~) main::$0
-(byte~) main::$1
-(byte~) main::$2
-(boolean~) main::$3
-(boolean~) main::$4
-(byte~) main::$5
-(boolean~) main::$6
-(byte*~) main::$7
-(boolean~) main::$8
-(label) main::@1
-(label) main::@2
-(label) main::@3
-(label) main::@4
(label) main::@return
-(byte*) main::CHAR_A
-(byte) main::bits
-(byte*) main::sc
-(byte) main::x
-(byte) main::y
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
- (byte*) PROCPORT ← (byte) 1
- (byte*) CHARGEN ← (word) 53248
- (byte*) SCREEN ← (word) 1024
to:@1
main: scope:[main] from
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN + (byte) 8
- (byte*) main::CHAR_A ← (byte*~) main::$0
- *((byte*) PROCPORT) ← (byte) 50
- (byte*) main::sc ← (byte*) SCREEN
- (byte) main::y ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
- (byte) main::bits ← (byte~) main::$1
- (byte) main::x ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte~) main::$2 ← (byte) main::bits & (byte) 128
- (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
- (boolean~) main::$4 ← ! (boolean~) main::$3
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2 main::@6
- *((byte*) main::sc) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc ← ++ (byte*) main::sc
- (byte~) main::$5 ← (byte) main::bits << (byte) 1
- (byte) main::bits ← (byte~) main::$5
- (byte) main::x ← ++ (byte) main::x
- (boolean~) main::$6 ← (byte) main::x != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@6: scope:[main] from
- to:main::@3
-main::@7: scope:[main] from main::@4
- (byte*~) main::$7 ← (byte*) main::sc + (byte) 32
- (byte*) main::sc ← (byte*~) main::$7
- (byte) main::y ← ++ (byte) main::y
- (boolean~) main::$8 ← (byte) main::y != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT) ← (byte) 55
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main
- to:@end
-@end: scope:[] from @1
-
-Removing empty block main::@6
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- (byte*) PROCPORT ← (byte) 1
- (byte*) CHARGEN ← (word) 53248
- (byte*) SCREEN ← (word) 1024
- to:@1
-main: scope:[main] from
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN + (byte) 8
- (byte*) main::CHAR_A ← (byte*~) main::$0
- *((byte*) PROCPORT) ← (byte) 50
- (byte*) main::sc ← (byte*) SCREEN
- (byte) main::y ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
- (byte) main::bits ← (byte~) main::$1
- (byte) main::x ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte~) main::$2 ← (byte) main::bits & (byte) 128
- (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
- (boolean~) main::$4 ← ! (boolean~) main::$3
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc ← ++ (byte*) main::sc
- (byte~) main::$5 ← (byte) main::bits << (byte) 1
- (byte) main::bits ← (byte~) main::$5
- (byte) main::x ← ++ (byte) main::x
- (boolean~) main::$6 ← (byte) main::x != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*~) main::$7 ← (byte*) main::sc + (byte) 32
- (byte*) main::sc ← (byte*~) main::$7
- (byte) main::y ← ++ (byte) main::y
- (boolean~) main::$8 ← (byte) main::y != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
+main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
@@ -216,55 +43,11 @@ PROCEDURE MODIFY VARIABLE ANALYSIS
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
@begin: scope:[] from
- (byte*) PROCPORT ← (byte) 1
- (byte*) CHARGEN ← (word) 53248
- (byte*) SCREEN ← (word) 1024
to:@1
main: scope:[main] from @1
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN + (byte) 8
- (byte*) main::CHAR_A ← (byte*~) main::$0
- *((byte*) PROCPORT) ← (byte) 50
- (byte*) main::sc ← (byte*) SCREEN
- (byte) main::y ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte~) main::$1 ← (byte*) main::CHAR_A *idx (byte) main::y
- (byte) main::bits ← (byte~) main::$1
- (byte) main::x ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte~) main::$2 ← (byte) main::bits & (byte) 128
- (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
- (boolean~) main::$4 ← ! (boolean~) main::$3
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc ← ++ (byte*) main::sc
- (byte~) main::$5 ← (byte) main::bits << (byte) 1
- (byte) main::bits ← (byte~) main::$5
- (byte) main::x ← ++ (byte) main::x
- (boolean~) main::$6 ← (byte) main::x != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*~) main::$7 ← (byte*) main::sc + (byte) 32
- (byte*) main::sc ← (byte*~) main::$7
- (byte) main::y ← ++ (byte) main::y
- (boolean~) main::$8 ← (byte) main::y != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT) ← (byte) 55
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
+main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
@@ -274,105 +57,17 @@ main::@return: scope:[main] from main::@8
to:@end
@end: scope:[] from @2
-Completing Phi functions...
-Completing Phi functions...
-Completing Phi functions...
-Completing Phi functions...
-Completing Phi functions...
Completing Phi functions...
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
to:@1
main: scope:[main] from @1
- (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
- (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
- (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
- (byte*) main::CHAR_A#0 ← (byte*~) main::$0
- *((byte*) PROCPORT#1) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#1
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#1 main::@7/(byte*) PROCPORT#4 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#2 )
- (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::bits#0 ← (byte~) main::$1
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte*) PROCPORT#8 ← phi( main::@1/(byte*) PROCPORT#9 main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#6 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#7 ← phi( main::@1/(byte) main::y#2 main::@4/(byte) main::y#4 )
- (byte) main::x#5 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#7 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
- (boolean~) main::$4 ← ! (boolean~) main::$3
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- (byte*) PROCPORT#6 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#4 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#5 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#3 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#6 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#4 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#5 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#4 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#4) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) PROCPORT#5 ← phi( main::@3/(byte*) PROCPORT#6 main::@5/(byte*) PROCPORT#7 )
- (byte*) main::CHAR_A#3 ← phi( main::@3/(byte*) main::CHAR_A#4 main::@5/(byte*) main::CHAR_A#5 )
- (byte) main::y#4 ← phi( main::@3/(byte) main::y#5 main::@5/(byte) main::y#6 )
- (byte) main::x#2 ← phi( main::@3/(byte) main::x#3 main::@5/(byte) main::x#4 )
- (byte) main::bits#3 ← phi( main::@3/(byte) main::bits#4 main::@5/(byte) main::bits#5 )
- (byte*) main::sc#5 ← phi( main::@3/(byte*) main::sc#3 main::@5/(byte*) main::sc#4 )
- (byte*) main::sc#1 ← ++ (byte*) main::sc#5
- (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
- (byte) main::bits#1 ← (byte~) main::$5
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) PROCPORT#4 ← phi( main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#2 ← phi( main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#3 ← phi( main::@4/(byte) main::y#4 )
- (byte*) main::sc#6 ← phi( main::@4/(byte*) main::sc#1 )
- (byte*~) main::$7 ← (byte*) main::sc#6 + (byte) 32
- (byte*) main::sc#2 ← (byte*~) main::$7
- (byte) main::y#1 ← ++ (byte) main::y#3
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- (byte*) PROCPORT#2 ← phi( main::@7/(byte*) PROCPORT#4 )
- *((byte*) PROCPORT#2) ← (byte) 55
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
+main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
- (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
- (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
- (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
call main param-assignment
to:@2
@2: scope:[] from @1
@@ -381,97 +76,14 @@ main::@return: scope:[main] from main::@8
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
to:@1
main: scope:[main] from @1
- (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
- (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
- (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
- (byte*) main::CHAR_A#0 ← (byte*~) main::$0
- *((byte*) PROCPORT#1) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#1
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#1 main::@7/(byte*) PROCPORT#4 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#2 )
- (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::bits#0 ← (byte~) main::$1
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte*) PROCPORT#8 ← phi( main::@1/(byte*) PROCPORT#9 main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#6 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#7 ← phi( main::@1/(byte) main::y#2 main::@4/(byte) main::y#4 )
- (byte) main::x#5 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#7 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
- (boolean~) main::$4 ← ! (boolean~) main::$3
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- (byte*) PROCPORT#6 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#4 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#5 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#3 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#6 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#4 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#5 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#4 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#4) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) PROCPORT#5 ← phi( main::@3/(byte*) PROCPORT#6 main::@5/(byte*) PROCPORT#7 )
- (byte*) main::CHAR_A#3 ← phi( main::@3/(byte*) main::CHAR_A#4 main::@5/(byte*) main::CHAR_A#5 )
- (byte) main::y#4 ← phi( main::@3/(byte) main::y#5 main::@5/(byte) main::y#6 )
- (byte) main::x#2 ← phi( main::@3/(byte) main::x#3 main::@5/(byte) main::x#4 )
- (byte) main::bits#3 ← phi( main::@3/(byte) main::bits#4 main::@5/(byte) main::bits#5 )
- (byte*) main::sc#5 ← phi( main::@3/(byte*) main::sc#3 main::@5/(byte*) main::sc#4 )
- (byte*) main::sc#1 ← ++ (byte*) main::sc#5
- (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
- (byte) main::bits#1 ← (byte~) main::$5
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) PROCPORT#4 ← phi( main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#2 ← phi( main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#3 ← phi( main::@4/(byte) main::y#4 )
- (byte*) main::sc#6 ← phi( main::@4/(byte*) main::sc#1 )
- (byte*~) main::$7 ← (byte*) main::sc#6 + (byte) 32
- (byte*) main::sc#2 ← (byte*~) main::$7
- (byte) main::y#1 ← ++ (byte) main::y#3
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- (byte*) PROCPORT#2 ← phi( main::@7/(byte*) PROCPORT#4 )
- *((byte*) PROCPORT#2) ← (byte) 55
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
+main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
- (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
- (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
- (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
call main param-assignment
to:@2
@2: scope:[] from @1
@@ -483,907 +95,18 @@ INITIAL SSA SYMBOL TABLE
(label) @2
(label) @begin
(label) @end
-(byte*) CHARGEN
-(byte*) CHARGEN#0
-(byte*) CHARGEN#1
-(byte*) CHARGEN#2
-(byte*) PROCPORT
-(byte*) PROCPORT#0
-(byte*) PROCPORT#1
-(byte*) PROCPORT#2
-(byte*) PROCPORT#3
-(byte*) PROCPORT#4
-(byte*) PROCPORT#5
-(byte*) PROCPORT#6
-(byte*) PROCPORT#7
-(byte*) PROCPORT#8
-(byte*) PROCPORT#9
-(byte*) SCREEN
-(byte*) SCREEN#0
-(byte*) SCREEN#1
-(byte*) SCREEN#2
(void()) main()
-(byte*~) main::$0
-(byte~) main::$1
-(byte~) main::$2
-(boolean~) main::$3
-(boolean~) main::$4
-(byte~) main::$5
-(boolean~) main::$6
-(byte*~) main::$7
-(boolean~) main::$8
-(label) main::@1
-(label) main::@2
-(label) main::@3
-(label) main::@4
-(label) main::@5
-(label) main::@7
-(label) main::@8
(label) main::@return
-(byte*) main::CHAR_A
-(byte*) main::CHAR_A#0
-(byte*) main::CHAR_A#1
-(byte*) main::CHAR_A#2
-(byte*) main::CHAR_A#3
-(byte*) main::CHAR_A#4
-(byte*) main::CHAR_A#5
-(byte*) main::CHAR_A#6
-(byte) main::bits
-(byte) main::bits#0
-(byte) main::bits#1
-(byte) main::bits#2
-(byte) main::bits#3
-(byte) main::bits#4
-(byte) main::bits#5
-(byte*) main::sc
-(byte*) main::sc#0
-(byte*) main::sc#1
-(byte*) main::sc#2
-(byte*) main::sc#3
-(byte*) main::sc#4
-(byte*) main::sc#5
-(byte*) main::sc#6
-(byte*) main::sc#7
-(byte*) main::sc#8
-(byte) main::x
-(byte) main::x#0
-(byte) main::x#1
-(byte) main::x#2
-(byte) main::x#3
-(byte) main::x#4
-(byte) main::x#5
-(byte) main::y
-(byte) main::y#0
-(byte) main::y#1
-(byte) main::y#2
-(byte) main::y#3
-(byte) main::y#4
-(byte) main::y#5
-(byte) main::y#6
-(byte) main::y#7
Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks
CONTROL FLOW GRAPH
@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
to:@1
main: scope:[main] from @1
- (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
- (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
- (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
- (byte*) main::CHAR_A#0 ← (byte*~) main::$0
- *((byte*) PROCPORT#1) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#1
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#1 main::@7/(byte*) PROCPORT#4 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#2 )
- (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::bits#0 ← (byte~) main::$1
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte*) PROCPORT#8 ← phi( main::@1/(byte*) PROCPORT#9 main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#6 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#7 ← phi( main::@1/(byte) main::y#2 main::@4/(byte) main::y#4 )
- (byte) main::x#5 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#7 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
- (boolean~) main::$4 ← ! (boolean~) main::$3
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- (byte*) PROCPORT#6 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#4 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#5 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#3 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#6 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#4 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#5 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#4 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#4) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) PROCPORT#5 ← phi( main::@3/(byte*) PROCPORT#6 main::@5/(byte*) PROCPORT#7 )
- (byte*) main::CHAR_A#3 ← phi( main::@3/(byte*) main::CHAR_A#4 main::@5/(byte*) main::CHAR_A#5 )
- (byte) main::y#4 ← phi( main::@3/(byte) main::y#5 main::@5/(byte) main::y#6 )
- (byte) main::x#2 ← phi( main::@3/(byte) main::x#3 main::@5/(byte) main::x#4 )
- (byte) main::bits#3 ← phi( main::@3/(byte) main::bits#4 main::@5/(byte) main::bits#5 )
- (byte*) main::sc#5 ← phi( main::@3/(byte*) main::sc#3 main::@5/(byte*) main::sc#4 )
- (byte*) main::sc#1 ← ++ (byte*) main::sc#5
- (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
- (byte) main::bits#1 ← (byte~) main::$5
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) PROCPORT#4 ← phi( main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#2 ← phi( main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#3 ← phi( main::@4/(byte) main::y#4 )
- (byte*) main::sc#6 ← phi( main::@4/(byte*) main::sc#1 )
- (byte*~) main::$7 ← (byte*) main::sc#6 + (byte) 32
- (byte*) main::sc#2 ← (byte*~) main::$7
- (byte) main::y#1 ← ++ (byte) main::y#3
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- (byte*) PROCPORT#2 ← phi( main::@7/(byte*) PROCPORT#4 )
- *((byte*) PROCPORT#2) ← (byte) 55
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
- (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
- (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Inversing boolean not (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0 from (boolean~) main::$3 ← (byte~) main::$2 != (byte) 0
-Succesful SSA optimization Pass2UnaryNotSimplification
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
- to:@1
-main: scope:[main] from @1
- (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
- (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
- (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
- asm { sei }
- (byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte) 8
- (byte*) main::CHAR_A#0 ← (byte*~) main::$0
- *((byte*) PROCPORT#1) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#1
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#1 main::@7/(byte*) PROCPORT#4 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#2 )
- (byte~) main::$1 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::bits#0 ← (byte~) main::$1
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte*) PROCPORT#8 ← phi( main::@1/(byte*) PROCPORT#9 main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#6 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#7 ← phi( main::@1/(byte) main::y#2 main::@4/(byte) main::y#4 )
- (byte) main::x#5 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#7 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- (byte*) PROCPORT#6 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#4 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#5 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#3 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#4 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#3 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#8 )
- (byte*) main::CHAR_A#5 ← phi( main::@2/(byte*) main::CHAR_A#6 )
- (byte) main::y#6 ← phi( main::@2/(byte) main::y#7 )
- (byte) main::x#4 ← phi( main::@2/(byte) main::x#5 )
- (byte) main::bits#5 ← phi( main::@2/(byte) main::bits#2 )
- (byte*) main::sc#4 ← phi( main::@2/(byte*) main::sc#7 )
- *((byte*) main::sc#4) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) PROCPORT#5 ← phi( main::@3/(byte*) PROCPORT#6 main::@5/(byte*) PROCPORT#7 )
- (byte*) main::CHAR_A#3 ← phi( main::@3/(byte*) main::CHAR_A#4 main::@5/(byte*) main::CHAR_A#5 )
- (byte) main::y#4 ← phi( main::@3/(byte) main::y#5 main::@5/(byte) main::y#6 )
- (byte) main::x#2 ← phi( main::@3/(byte) main::x#3 main::@5/(byte) main::x#4 )
- (byte) main::bits#3 ← phi( main::@3/(byte) main::bits#4 main::@5/(byte) main::bits#5 )
- (byte*) main::sc#5 ← phi( main::@3/(byte*) main::sc#3 main::@5/(byte*) main::sc#4 )
- (byte*) main::sc#1 ← ++ (byte*) main::sc#5
- (byte~) main::$5 ← (byte) main::bits#3 << (byte) 1
- (byte) main::bits#1 ← (byte~) main::$5
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) PROCPORT#4 ← phi( main::@4/(byte*) PROCPORT#5 )
- (byte*) main::CHAR_A#2 ← phi( main::@4/(byte*) main::CHAR_A#3 )
- (byte) main::y#3 ← phi( main::@4/(byte) main::y#4 )
- (byte*) main::sc#6 ← phi( main::@4/(byte*) main::sc#1 )
- (byte*~) main::$7 ← (byte*) main::sc#6 + (byte) 32
- (byte*) main::sc#2 ← (byte*~) main::$7
- (byte) main::y#1 ← ++ (byte) main::y#3
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- (byte*) PROCPORT#2 ← phi( main::@7/(byte*) PROCPORT#4 )
- *((byte*) PROCPORT#2) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- (byte*) SCREEN#2 ← phi( @begin/(byte*) SCREEN#0 )
- (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 )
- (byte*) CHARGEN#2 ← phi( @begin/(byte*) CHARGEN#0 )
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Not aliassing across scopes: main::sc#0 SCREEN#1
-Alias (byte*) CHARGEN#0 = (byte*) CHARGEN#1 (byte*) CHARGEN#2
-Alias (byte*) PROCPORT#0 = (byte*) PROCPORT#1 (byte*) PROCPORT#3
-Alias (byte*) SCREEN#0 = (byte*) SCREEN#1 (byte*) SCREEN#2
-Alias (byte*) main::CHAR_A#0 = (byte*~) main::$0
-Alias (byte) main::bits#0 = (byte~) main::$1
-Alias (byte*) main::sc#3 = (byte*) main::sc#7 (byte*) main::sc#4
-Alias (byte) main::bits#2 = (byte) main::bits#4 (byte) main::bits#5
-Alias (byte) main::x#3 = (byte) main::x#5 (byte) main::x#4
-Alias (byte) main::y#5 = (byte) main::y#7 (byte) main::y#6
-Alias (byte*) main::CHAR_A#4 = (byte*) main::CHAR_A#6 (byte*) main::CHAR_A#5
-Alias (byte*) PROCPORT#6 = (byte*) PROCPORT#8 (byte*) PROCPORT#7
-Alias (byte) main::bits#1 = (byte~) main::$5
-Alias (byte*) main::sc#1 = (byte*) main::sc#6
-Alias (byte) main::y#3 = (byte) main::y#4
-Alias (byte*) main::CHAR_A#2 = (byte*) main::CHAR_A#3
-Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#4 (byte*) PROCPORT#5
-Alias (byte*) main::sc#2 = (byte*~) main::$7
-Succesful SSA optimization Pass2AliasElimination
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
- to:@1
-main: scope:[main] from @1
- asm { sei }
- (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
- *((byte*) PROCPORT#0) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#0
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#0 main::@7/(byte*) PROCPORT#2 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#2 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte*) PROCPORT#6 ← phi( main::@1/(byte*) PROCPORT#9 main::@4/(byte*) PROCPORT#2 )
- (byte*) main::CHAR_A#4 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@4/(byte*) main::CHAR_A#2 )
- (byte) main::y#5 ← phi( main::@1/(byte) main::y#2 main::@4/(byte) main::y#3 )
- (byte) main::x#3 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) PROCPORT#2 ← phi( main::@3/(byte*) PROCPORT#6 main::@5/(byte*) PROCPORT#6 )
- (byte*) main::CHAR_A#2 ← phi( main::@3/(byte*) main::CHAR_A#4 main::@5/(byte*) main::CHAR_A#4 )
- (byte) main::y#3 ← phi( main::@3/(byte) main::y#5 main::@5/(byte) main::y#5 )
- (byte) main::x#2 ← phi( main::@3/(byte) main::x#3 main::@5/(byte) main::x#3 )
- (byte) main::bits#3 ← phi( main::@3/(byte) main::bits#2 main::@5/(byte) main::bits#2 )
- (byte*) main::sc#5 ← phi( main::@3/(byte*) main::sc#3 main::@5/(byte*) main::sc#3 )
- (byte*) main::sc#1 ← ++ (byte*) main::sc#5
- (byte) main::bits#1 ← (byte) main::bits#3 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#3
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#2) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Not aliassing across scopes: main::sc#0 SCREEN#0
-Alias (byte*) main::sc#3 = (byte*) main::sc#5
-Alias (byte) main::bits#2 = (byte) main::bits#3
-Alias (byte) main::x#2 = (byte) main::x#3
-Alias (byte) main::y#3 = (byte) main::y#5
-Alias (byte*) main::CHAR_A#2 = (byte*) main::CHAR_A#4
-Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#6
-Succesful SSA optimization Pass2AliasElimination
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
- to:@1
-main: scope:[main] from @1
- asm { sei }
- (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
- *((byte*) PROCPORT#0) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#0
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#0 main::@7/(byte*) PROCPORT#2 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#2 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte*) PROCPORT#2 ← phi( main::@1/(byte*) PROCPORT#9 main::@4/(byte*) PROCPORT#2 )
- (byte*) main::CHAR_A#2 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@4/(byte*) main::CHAR_A#2 )
- (byte) main::y#3 ← phi( main::@1/(byte) main::y#2 main::@4/(byte) main::y#3 )
- (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#3
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#2) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Not aliassing across scopes: main::sc#0 SCREEN#0
-Self Phi Eliminated (byte) main::y#3
-Self Phi Eliminated (byte*) main::CHAR_A#2
-Self Phi Eliminated (byte*) PROCPORT#2
-Succesful SSA optimization Pass2SelfPhiElimination
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
- to:@1
-main: scope:[main] from @1
- asm { sei }
- (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
- *((byte*) PROCPORT#0) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#0
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#0 main::@7/(byte*) PROCPORT#2 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#2 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte*) PROCPORT#2 ← phi( main::@1/(byte*) PROCPORT#9 )
- (byte*) main::CHAR_A#2 ← phi( main::@1/(byte*) main::CHAR_A#1 )
- (byte) main::y#3 ← phi( main::@1/(byte) main::y#2 )
- (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#3
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#2) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Redundant Phi (byte) main::y#3 (byte) main::y#2
-Redundant Phi (byte*) main::CHAR_A#2 (byte*) main::CHAR_A#1
-Redundant Phi (byte*) PROCPORT#2 (byte*) PROCPORT#9
-Succesful SSA optimization Pass2RedundantPhiElimination
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
- to:@1
-main: scope:[main] from @1
- asm { sei }
- (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
- *((byte*) PROCPORT#0) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#0
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#0 main::@7/(byte*) PROCPORT#9 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#1 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- (boolean~) main::$4 ← (byte~) main::$2 == (byte) 0
- if((boolean~) main::$4) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- (boolean~) main::$6 ← (byte) main::x#1 != (byte) 8
- if((boolean~) main::$6) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- (boolean~) main::$8 ← (byte) main::y#1 != (byte) 8
- if((boolean~) main::$8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#9) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Simple Condition (boolean~) main::$4 if((byte~) main::$2==(byte) 0) goto main::@3
-Simple Condition (boolean~) main::$6 if((byte) main::x#1!=(byte) 8) goto main::@2
-Simple Condition (boolean~) main::$8 if((byte) main::y#1!=(byte) 8) goto main::@1
-Succesful SSA optimization Pass2ConditionalJumpSimplification
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- (byte*) PROCPORT#0 ← (byte) 1
- (byte*) CHARGEN#0 ← (word) 53248
- (byte*) SCREEN#0 ← (word) 1024
- to:@1
-main: scope:[main] from @1
- asm { sei }
- (byte*) main::CHAR_A#0 ← (byte*) CHARGEN#0 + (byte) 8
- *((byte*) PROCPORT#0) ← (byte) 50
- (byte*) main::sc#0 ← (byte*) SCREEN#0
- (byte) main::y#0 ← (byte) 0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(byte*) PROCPORT#0 main::@7/(byte*) PROCPORT#9 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#1 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- (byte) main::x#0 ← (byte) 0
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte) main::x#2 ← phi( main::@1/(byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- if((byte~) main::$2==(byte) 0) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- if((byte) main::x#1!=(byte) 8) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- if((byte) main::y#1!=(byte) 8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#9) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Constant (const byte*) PROCPORT#0 = 1
-Constant (const byte*) CHARGEN#0 = 53248
-Constant (const byte*) SCREEN#0 = 1024
-Constant (const byte) main::y#0 = 0
-Constant (const byte) main::x#0 = 0
-Succesful SSA optimization Pass2ConstantIdentification
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- to:@1
-main: scope:[main] from @1
- asm { sei }
- (byte*) main::CHAR_A#0 ← (const byte*) CHARGEN#0 + (byte) 8
- *((const byte*) PROCPORT#0) ← (byte) 50
- (byte*) main::sc#0 ← (const byte*) SCREEN#0
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(const byte*) PROCPORT#0 main::@7/(byte*) PROCPORT#9 )
- (byte*) main::sc#8 ← phi( main/(byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#1 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- if((byte~) main::$2==(byte) 0) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- if((byte) main::x#1!=(byte) 8) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- if((byte) main::y#1!=(byte) 8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#9) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Constant (const byte*) main::CHAR_A#0 = CHARGEN#0+8
-Constant (const byte*) main::sc#0 = SCREEN#0
-Succesful SSA optimization Pass2ConstantIdentification
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- to:@1
-main: scope:[main] from @1
- asm { sei }
- *((const byte*) PROCPORT#0) ← (byte) 50
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(const byte*) PROCPORT#0 main::@7/(byte*) PROCPORT#9 )
- (byte*) main::sc#8 ← phi( main/(const byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(const byte*) main::CHAR_A#0 main::@7/(byte*) main::CHAR_A#1 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- if((byte~) main::$2==(byte) 0) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- if((byte) main::x#1!=(byte) 8) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- if((byte) main::y#1!=(byte) 8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#9) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
-Self Phi Eliminated (byte*) main::CHAR_A#1
-Self Phi Eliminated (byte*) PROCPORT#9
-Succesful SSA optimization Pass2SelfPhiElimination
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- to:@1
-main: scope:[main] from @1
- asm { sei }
- *((const byte*) PROCPORT#0) ← (byte) 50
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) PROCPORT#9 ← phi( main/(const byte*) PROCPORT#0 )
- (byte*) main::sc#8 ← phi( main/(const byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte*) main::CHAR_A#1 ← phi( main/(const byte*) main::CHAR_A#0 )
- (byte) main::bits#0 ← (byte*) main::CHAR_A#1 *idx (byte) main::y#2
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- if((byte~) main::$2==(byte) 0) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- if((byte) main::x#1!=(byte) 8) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- if((byte) main::y#1!=(byte) 8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((byte*) PROCPORT#9) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Redundant Phi (byte*) main::CHAR_A#1 (const byte*) main::CHAR_A#0
-Redundant Phi (byte*) PROCPORT#9 (const byte*) PROCPORT#0
-Succesful SSA optimization Pass2RedundantPhiElimination
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- to:@1
-main: scope:[main] from @1
- asm { sei }
- *((const byte*) PROCPORT#0) ← (byte) 50
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) main::sc#8 ← phi( main/(const byte*) main::sc#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(const byte) main::y#0 main::@7/(byte) main::y#1 )
- (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte) main::x#2 ← phi( main::@1/(const byte) main::x#0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- if((byte~) main::$2==(byte) 0) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- if((byte) main::x#1!=(byte) 8) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- if((byte) main::y#1!=(byte) 8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((const byte*) PROCPORT#0) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
- return
- to:@return
-@1: scope:[] from @begin
- call main param-assignment
- to:@end
-@end: scope:[] from @1
-
-Multiple usages for variable. Not optimizing sub-constant (byte) main::y#2
-Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
-Multiple usages for variable. Not optimizing sub-constant (byte) main::y#2
-Multiple usages for variable. Not optimizing sub-constant (byte*) main::sc#1
-Inlining constant with var siblings (const byte) main::y#0
-Inlining constant with var siblings (const byte) main::y#0
-Inlining constant with var siblings (const byte) main::x#0
-Inlining constant with var siblings (const byte) main::x#0
-Inlining constant with var siblings (const byte*) main::sc#0
-Inlining constant with var siblings (const byte*) main::sc#0
-Inlining constant with var siblings (const byte*) main::sc#0
-Inlining constant with var siblings (const byte*) main::sc#0
-Constant inlined main::x#0 = (byte) 0
-Constant inlined main::sc#0 = (const byte*) SCREEN#0
-Constant inlined main::y#0 = (byte) 0
-Succesful SSA optimization Pass2ConstantInlining
-CONTROL FLOW GRAPH
-@begin: scope:[] from
- to:@1
-main: scope:[main] from @1
- asm { sei }
- *((const byte*) PROCPORT#0) ← (byte) 50
- to:main::@1
-main::@1: scope:[main] from main main::@7
- (byte*) main::sc#8 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*) main::sc#2 )
- (byte) main::y#2 ← phi( main/(byte) 0 main::@7/(byte) main::y#1 )
- (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::x#1 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 )
- (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- if((byte~) main::$2==(byte) 0) goto main::@3
- to:main::@5
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- if((byte) main::x#1!=(byte) 8) goto main::@2
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- if((byte) main::y#1!=(byte) 8) goto main::@1
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((const byte*) PROCPORT#0) ← (byte) 55
- asm { cli }
- to:main::@return
-main::@return: scope:[main] from main::@8
+main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
@@ -1395,44 +118,11 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
-(byte*) CHARGEN
-(const byte*) CHARGEN#0 = (word) 53248
-(byte*) PROCPORT
-(const byte*) PROCPORT#0 = (byte) 1
-(byte*) SCREEN
-(const byte*) SCREEN#0 = (word) 1024
(void()) main()
-(byte~) main::$2
-(label) main::@1
-(label) main::@2
-(label) main::@3
-(label) main::@4
-(label) main::@5
-(label) main::@7
-(label) main::@8
(label) main::@return
-(byte*) main::CHAR_A
-(const byte*) main::CHAR_A#0 = (const byte*) CHARGEN#0+(byte) 8
-(byte) main::bits
-(byte) main::bits#0
-(byte) main::bits#1
-(byte) main::bits#2
-(byte*) main::sc
-(byte*) main::sc#1
-(byte*) main::sc#2
-(byte*) main::sc#3
-(byte*) main::sc#8
-(byte) main::x
-(byte) main::x#1
-(byte) main::x#2
-(byte) main::y
-(byte) main::y#1
-(byte) main::y#2
-Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@5 main::@4 main::@7 main::@8 main::@return main::@3
-Added new block during phi lifting main::@9(between main::@7 and main::@1)
-Added new block during phi lifting main::@10(between main::@4 and main::@2)
-Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@5 main::@4 main::@7 main::@8 main::@return main::@9 main::@10 main::@3
+Block Sequence Planned @begin @1 @end main main::@return
+Block Sequence Planned @begin @1 @end main main::@return
CONTROL FLOW GRAPH - PHI LIFTED
@begin: scope:[] from
to:@1
@@ -1441,71 +131,15 @@ CONTROL FLOW GRAPH - PHI LIFTED
to:@end
@end: scope:[] from @1
main: scope:[main] from @1
- asm { sei }
- *((const byte*) PROCPORT#0) ← (byte) 50
- to:main::@1
-main::@1: scope:[main] from main main::@9
- (byte*) main::sc#8 ← phi( main/(const byte*) SCREEN#0 main::@9/(byte*~) main::sc#9 )
- (byte) main::y#2 ← phi( main/(byte) 0 main::@9/(byte~) main::y#8 )
- (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2
- (byte~) main::bits#6 ← (byte) main::bits#0
- (byte*~) main::sc#10 ← (byte*) main::sc#8
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@10
- (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@10/(byte~) main::x#6 )
- (byte*) main::sc#3 ← phi( main::@1/(byte*~) main::sc#10 main::@10/(byte*~) main::sc#11 )
- (byte) main::bits#2 ← phi( main::@1/(byte~) main::bits#6 main::@10/(byte~) main::bits#7 )
- (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128
- if((byte~) main::$2==(byte) 0) goto main::@3
- to:main::@5
-main::@5: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '*'
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- (byte*) main::sc#1 ← ++ (byte*) main::sc#3
- (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1
- (byte) main::x#1 ← ++ (byte) main::x#2
- if((byte) main::x#1!=(byte) 8) goto main::@10
- to:main::@7
-main::@7: scope:[main] from main::@4
- (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32
- (byte) main::y#1 ← ++ (byte) main::y#2
- if((byte) main::y#1!=(byte) 8) goto main::@9
- to:main::@8
-main::@8: scope:[main] from main::@7
- *((const byte*) PROCPORT#0) ← (byte) 55
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
+main::@return: scope:[main] from main
return
to:@return
-main::@9: scope:[main] from main::@7
- (byte~) main::y#8 ← (byte) main::y#1
- (byte*~) main::sc#9 ← (byte*) main::sc#2
- to:main::@1
-main::@10: scope:[main] from main::@4
- (byte~) main::bits#7 ← (byte) main::bits#1
- (byte*~) main::sc#11 ← (byte*) main::sc#1
- (byte~) main::x#6 ← (byte) main::x#1
- to:main::@2
-main::@3: scope:[main] from main::@2
- *((byte*) main::sc#3) ← (byte) '.'
- to:main::@4
CALL GRAPH
Calls in [] to 0:main
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
Propagating live ranges...
CONTROL FLOW GRAPH - LIVE RANGES FOUND
@begin: scope:[] from
@@ -1515,78 +149,15 @@ CONTROL FLOW GRAPH - LIVE RANGES FOUND
to:@end
@end: scope:[] from @1
main: scope:[main] from @1
- asm { sei }
- [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
- to:main::@1
-main::@1: scope:[main] from main main::@9
- [3] (byte*) main::sc#8 ← phi( main/(const byte*) SCREEN#0 main::@9/(byte*~) main::sc#9 ) [ main::y#2 main::sc#8 ]
- [3] (byte) main::y#2 ← phi( main/(byte) 0 main::@9/(byte~) main::y#8 ) [ main::y#2 main::sc#8 ]
- [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ]
- [5] (byte~) main::bits#6 ← (byte) main::bits#0 [ main::y#2 main::sc#8 main::bits#6 ]
- [6] (byte*~) main::sc#10 ← (byte*) main::sc#8 [ main::y#2 main::bits#6 main::sc#10 ]
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@10
- [7] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@10/(byte~) main::x#6 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [7] (byte*) main::sc#3 ← phi( main::@1/(byte*~) main::sc#10 main::@10/(byte*~) main::sc#11 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [7] (byte) main::bits#2 ← phi( main::@1/(byte~) main::bits#6 main::@10/(byte~) main::bits#7 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [8] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
- [9] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@5
-main::@5: scope:[main] from main::@2
- [10] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- [11] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
- [12] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::sc#1 main::bits#1 ]
- [13] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::sc#1 main::bits#1 main::x#1 ]
- [14] if((byte) main::x#1!=(byte) 8) goto main::@10 [ main::y#2 main::sc#1 main::bits#1 main::x#1 ]
- to:main::@7
-main::@7: scope:[main] from main::@4
- [15] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
- [16] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::sc#2 main::y#1 ]
- [17] if((byte) main::y#1!=(byte) 8) goto main::@9 [ main::sc#2 main::y#1 ]
- to:main::@8
-main::@8: scope:[main] from main::@7
- [18] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
- [20] return [ ]
+main::@return: scope:[main] from main
+ [2] return [ ]
to:@return
-main::@9: scope:[main] from main::@7
- [21] (byte~) main::y#8 ← (byte) main::y#1 [ main::y#8 main::sc#2 ]
- [22] (byte*~) main::sc#9 ← (byte*) main::sc#2 [ main::y#8 main::sc#9 ]
- to:main::@1
-main::@10: scope:[main] from main::@4
- [23] (byte~) main::bits#7 ← (byte) main::bits#1 [ main::y#2 main::bits#7 main::sc#1 main::x#1 ]
- [24] (byte*~) main::sc#11 ← (byte*) main::sc#1 [ main::y#2 main::bits#7 main::sc#11 main::x#1 ]
- [25] (byte~) main::x#6 ← (byte) main::x#1 [ main::y#2 main::bits#7 main::sc#11 main::x#6 ]
- to:main::@2
-main::@3: scope:[main] from main::@2
- [26] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@4
-Created 5 initial phi equivalence classes
-Coalesced [5] main::bits#6 ← main::bits#0
-Coalesced [6] main::sc#10 ← main::sc#8
-Coalesced [21] main::y#8 ← main::y#1
-Coalesced [22] main::sc#9 ← main::sc#2
-Coalesced [23] main::bits#7 ← main::bits#1
-Coalesced [24] main::sc#11 ← main::sc#1
-Coalesced [25] main::x#6 ← main::x#1
-Coalesced down to 4 phi equivalence classes
-Culled Empty Block (label) main::@9
-Culled Empty Block (label) main::@10
-Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@5 main::@4 main::@7 main::@8 main::@return main::@3
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
-Propagating live ranges...
+Created 0 initial phi equivalence classes
+Coalesced down to 0 phi equivalence classes
+Block Sequence Planned @begin @1 @end main main::@return
Propagating live ranges...
CONTROL FLOW GRAPH - PHI MEM COALESCED
@begin: scope:[] from
@@ -1596,126 +167,37 @@ CONTROL FLOW GRAPH - PHI MEM COALESCED
to:@end
@end: scope:[] from @1
main: scope:[main] from @1
- asm { sei }
- [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
- to:main::@1
-main::@1: scope:[main] from main main::@7
- [3] (byte*) main::sc#8 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*) main::sc#2 ) [ main::y#2 main::sc#8 ]
- [3] (byte) main::y#2 ← phi( main/(byte) 0 main::@7/(byte) main::y#1 ) [ main::y#2 main::sc#8 ]
- [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ]
- to:main::@2
-main::@2: scope:[main] from main::@1 main::@4
- [5] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [5] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [5] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
- [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@5
-main::@5: scope:[main] from main::@2
- [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@4
-main::@4: scope:[main] from main::@3 main::@5
- [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
- [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ]
- [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
- [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
- to:main::@7
-main::@7: scope:[main] from main::@4
- [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
- [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ]
- [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ]
- to:main::@8
-main::@8: scope:[main] from main::@7
- [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
- asm { cli }
+ asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
to:main::@return
-main::@return: scope:[main] from main::@8
- [18] return [ ]
+main::@return: scope:[main] from main
+ [2] return [ ]
to:@return
-main::@3: scope:[main] from main::@2
- [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
- to:main::@4
DOMINATORS
@begin dominated by @begin
@1 dominated by @1 @begin
@end dominated by @1 @end @begin
main dominated by @1 @begin main
-main::@1 dominated by @1 @begin main::@1 main
-main::@2 dominated by @1 @begin main::@2 main::@1 main
-main::@5 dominated by @1 @begin main::@2 main::@1 main::@5 main
-main::@4 dominated by @1 @begin main::@2 main::@1 main::@4 main
-main::@7 dominated by main::@7 @1 @begin main::@2 main::@1 main::@4 main
-main::@8 dominated by main::@7 main::@8 @1 @begin main::@2 main::@1 main::@4 main
-main::@return dominated by main::@7 main::@8 @1 main::@return @begin main::@2 main::@1 main::@4 main
-main::@3 dominated by @1 @begin main::@2 main::@1 main::@3 main
+main::@return dominated by @1 main::@return @begin main
-Found back edge: Loop head: main::@2 tails: main::@4 blocks: null
-Found back edge: Loop head: main::@1 tails: main::@7 blocks: null
-Populated: Loop head: main::@2 tails: main::@4 blocks: main::@4 main::@3 main::@5 main::@2
-Populated: Loop head: main::@1 tails: main::@7 blocks: main::@7 main::@4 main::@3 main::@5 main::@2 main::@1
NATURAL LOOPS
-Loop head: main::@2 tails: main::@4 blocks: main::@4 main::@3 main::@5 main::@2
-Loop head: main::@1 tails: main::@7 blocks: main::@7 main::@4 main::@3 main::@5 main::@2 main::@1
Found 0 loops in scope []
-Found 2 loops in scope [main]
- Loop head: main::@2 tails: main::@4 blocks: main::@4 main::@3 main::@5 main::@2
- Loop head: main::@1 tails: main::@7 blocks: main::@7 main::@4 main::@3 main::@5 main::@2 main::@1
+Found 0 loops in scope [main]
NATURAL LOOPS WITH DEPTH
-Loop head: main::@2 tails: main::@4 blocks: main::@4 main::@3 main::@5 main::@2 depth: 2
-Loop head: main::@1 tails: main::@7 blocks: main::@7 main::@4 main::@3 main::@5 main::@2 main::@1 depth: 1
VARIABLE REGISTER WEIGHTS
-(byte*) CHARGEN
-(byte*) PROCPORT
-(byte*) SCREEN
(void()) main()
-(byte~) main::$2 202.0
-(byte*) main::CHAR_A
-(byte) main::bits
-(byte) main::bits#0 22.0
-(byte) main::bits#1 67.33333333333333
-(byte) main::bits#2 52.33333333333333
-(byte*) main::sc
-(byte*) main::sc#1 53.25
-(byte*) main::sc#2 7.333333333333333
-(byte*) main::sc#3 83.0
-(byte*) main::sc#8 11.0
-(byte) main::x
-(byte) main::x#1 151.5
-(byte) main::x#2 28.857142857142858
-(byte) main::y
-(byte) main::y#1 16.5
-(byte) main::y#2 2.75
Initial phi equivalence classes
-[ main::y#2 main::y#1 ]
-[ main::bits#2 main::bits#0 main::bits#1 ]
-[ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ]
-[ main::x#2 main::x#1 ]
-Added variable main::$2 to zero page equivalence class [ main::$2 ]
Complete equivalence classes
-[ main::y#2 main::y#1 ]
-[ main::bits#2 main::bits#0 main::bits#1 ]
-[ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ]
-[ main::x#2 main::x#1 ]
-[ main::$2 ]
-Allocated zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
-Allocated zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
-Allocated zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ]
-Allocated zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
-Allocated zp ZP_BYTE:7 [ main::$2 ]
INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
- .const PROCPORT = 1
- .const CHARGEN = $d000
- .const SCREEN = $400
//SEG2 @begin
bbegin:
jmp b1
@@ -1728,168 +210,34 @@ b1:
bend:
//SEG6 main
main: {
- .const CHAR_A = CHARGEN+8
- .label _2 = 7
- .label bits = 3
- .label sc = 4
- .label x = 6
- .label y = 2
- //SEG7 asm { sei }
- sei
- //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
- lda #$32
- sta PROCPORT
- //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
- b1_from_main:
- //SEG10 [3] phi (byte*) main::sc#8 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
- lda #SCREEN
- sta sc+1
- //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
- lda #0
- sta y
- jmp b1
- //SEG12 [3] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
- b1_from_b7:
- //SEG13 [3] phi (byte*) main::sc#8 = (byte*) main::sc#2 [phi:main::@7->main::@1#0] -- register_copy
- //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@7->main::@1#1] -- register_copy
- jmp b1
- //SEG15 main::@1
- b1:
- //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
- ldx y
- lda CHAR_A,x
- sta bits
- //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
- b2_from_b1:
- //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- zpby1=coby1
- lda #0
- sta x
- //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#8 [phi:main::@1->main::@2#1] -- register_copy
- //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
- jmp b2
- //SEG21 [5] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
- b2_from_b4:
- //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@2#0] -- register_copy
- //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@4->main::@2#1] -- register_copy
- //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@4->main::@2#2] -- register_copy
- jmp b2
- //SEG25 main::@2
- b2:
- //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- zpby1=zpby2_band_coby1
- lda bits
- and #$80
- sta _2
- //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- zpby1_eq_0_then_la1
- lda _2
- beq b3
- jmp b5
- //SEG28 main::@5
- b5:
- //SEG29 [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'*'
- sta (sc),y
- jmp b4
- //SEG30 main::@4
- b4:
- //SEG31 [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
- inc sc
- bne !+
- inc sc+1
+ //SEG7 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
+ lda #'a'
+ ldx #$ff
!:
- //SEG32 [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
- asl bits
- //SEG33 [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- zpby1=_inc_zpby1
- inc x
- //SEG34 [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- zpby1_neq_coby1_then_la1
- lda x
- cmp #8
- bne b2_from_b4
- jmp b7
- //SEG35 main::@7
- b7:
- //SEG36 [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
- lda sc
- clc
- adc #$20
- sta sc
- bcc !+
- inc sc+1
- !:
- //SEG37 [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
- inc y
- //SEG38 [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
- lda y
- cmp #8
- bne b1_from_b7
- jmp b8
- //SEG39 main::@8
- b8:
- //SEG40 [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
- lda #$37
- sta PROCPORT
- //SEG41 asm { cli }
- cli
+ sta $400,x
+ sta $500,x
+ sta $600,x
+ sta $700,x
+ dex
+ bne !-
jmp breturn
- //SEG42 main::@return
+ //SEG8 main::@return
breturn:
- //SEG43 [18] return [ ]
+ //SEG9 [2] return [ ]
rts
- //SEG44 main::@3
- b3:
- //SEG45 [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'.'
- sta (sc),y
- jmp b4
}
REGISTER UPLIFT POTENTIAL REGISTERS
-Statement [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
-Statement [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] always clobbers reg byte a
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
-Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
-Statement [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] always clobbers reg byte a reg byte y
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
-Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::x#2 main::x#1 ]
-Statement [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] always clobbers reg byte a
-Statement [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
-Statement [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] always clobbers reg byte a reg byte y
-Statement [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] always clobbers reg byte a
-Statement [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ] always clobbers reg byte a
-Statement [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] always clobbers reg byte a
-Statement [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] always clobbers reg byte a reg byte y
-Statement [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] always clobbers reg byte a
-Statement [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] always clobbers reg byte a
-Statement [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] always clobbers reg byte a reg byte y
-Potential registers zp ZP_BYTE:2 [ main::y#2 main::y#1 ] : zp ZP_BYTE:2 , reg byte x ,
-Potential registers zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] : zp ZP_BYTE:3 , reg byte x ,
-Potential registers zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ] : zp ZP_PTR_BYTE:4 ,
-Potential registers zp ZP_BYTE:6 [ main::x#2 main::x#1 ] : zp ZP_BYTE:6 , reg byte x ,
-Potential registers zp ZP_BYTE:7 [ main::$2 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
+Statement asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- } always clobbers reg byte a reg byte x
REGISTER UPLIFT SCOPES
-Uplift Scope [main] 202: zp ZP_BYTE:7 [ main::$2 ] 180.36: zp ZP_BYTE:6 [ main::x#2 main::x#1 ] 154.58: zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ] 141.67: zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] 19.25: zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Uplift Scope [main]
Uplift Scope []
-Uplifting [main] best 8059 combination reg byte a [ main::$2 ] reg byte x [ main::x#2 main::x#1 ] zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ] zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ] zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
-Uplifting [] best 8059 combination
-Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
-Uplifting [main] best 8059 combination zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
-Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::y#2 main::y#1 ]
-Uplifting [main] best 8059 combination zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
+Uplifting [main] best 76 combination
+Uplifting [] best 76 combination
Removing instruction jmp b1
Removing instruction jmp bend
-Removing instruction jmp b1
-Removing instruction jmp b2
-Removing instruction jmp b5
-Removing instruction jmp b4
-Removing instruction jmp b7
-Removing instruction jmp b8
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
ASSEMBLER
@@ -1898,9 +246,6 @@ ASSEMBLER
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
- .const PROCPORT = 1
- .const CHARGEN = $d000
- .const SCREEN = $400
//SEG2 @begin
bbegin:
//SEG3 @1
@@ -1911,117 +256,23 @@ b1:
bend:
//SEG6 main
main: {
- .const CHAR_A = CHARGEN+8
- .label bits = 3
- .label sc = 4
- .label y = 2
- //SEG7 asm { sei }
- sei
- //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
- lda #$32
- sta PROCPORT
- //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
- b1_from_main:
- //SEG10 [3] phi (byte*) main::sc#8 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
- lda #SCREEN
- sta sc+1
- //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
- lda #0
- sta y
- jmp b1
- //SEG12 [3] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
- b1_from_b7:
- //SEG13 [3] phi (byte*) main::sc#8 = (byte*) main::sc#2 [phi:main::@7->main::@1#0] -- register_copy
- //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@7->main::@1#1] -- register_copy
- //SEG15 main::@1
- b1:
- //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
- ldx y
- lda CHAR_A,x
- sta bits
- //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
- b2_from_b1:
- //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
- ldx #0
- //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#8 [phi:main::@1->main::@2#1] -- register_copy
- //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
- jmp b2
- //SEG21 [5] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
- b2_from_b4:
- //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@2#0] -- register_copy
- //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@4->main::@2#1] -- register_copy
- //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@4->main::@2#2] -- register_copy
- //SEG25 main::@2
- b2:
- //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
- lda bits
- and #$80
- //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
- cmp #0
- beq b3
- //SEG28 main::@5
- b5:
- //SEG29 [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'*'
- sta (sc),y
- //SEG30 main::@4
- b4:
- //SEG31 [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
- inc sc
- bne !+
- inc sc+1
+ //SEG7 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
+ lda #'a'
+ ldx #$ff
!:
- //SEG32 [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
- asl bits
- //SEG33 [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
- inx
- //SEG34 [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
- cpx #8
- bne b2_from_b4
- //SEG35 main::@7
- b7:
- //SEG36 [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
- lda sc
- clc
- adc #$20
- sta sc
- bcc !+
- inc sc+1
- !:
- //SEG37 [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
- inc y
- //SEG38 [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
- lda y
- cmp #8
- bne b1_from_b7
- //SEG39 main::@8
- b8:
- //SEG40 [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
- lda #$37
- sta PROCPORT
- //SEG41 asm { cli }
- cli
- //SEG42 main::@return
+ sta $400,x
+ sta $500,x
+ sta $600,x
+ sta $700,x
+ dex
+ bne !-
+ //SEG8 main::@return
breturn:
- //SEG43 [18] return [ ]
+ //SEG9 [2] return [ ]
rts
- //SEG44 main::@3
- b3:
- //SEG45 [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'.'
- sta (sc),y
- jmp b4
}
-Replacing label b2_from_b4 with b2
-Replacing label b1_from_b7 with b1
Removing instruction bbegin:
-Removing instruction b1_from_b7:
-Removing instruction b2_from_b4:
Succesful ASM optimization Pass5RedundantLabelElimination
ASSEMBLER
//SEG0 Basic Upstart
@@ -2029,9 +280,6 @@ ASSEMBLER
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
- .const PROCPORT = 1
- .const CHARGEN = $d000
- .const SCREEN = $400
//SEG2 @begin
//SEG3 @1
b1:
@@ -2041,117 +289,24 @@ b1:
bend:
//SEG6 main
main: {
- .const CHAR_A = CHARGEN+8
- .label bits = 3
- .label sc = 4
- .label y = 2
- //SEG7 asm { sei }
- sei
- //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
- lda #$32
- sta PROCPORT
- //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
- b1_from_main:
- //SEG10 [3] phi (byte*) main::sc#8 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
- lda #SCREEN
- sta sc+1
- //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
- lda #0
- sta y
- jmp b1
- //SEG12 [3] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
- //SEG13 [3] phi (byte*) main::sc#8 = (byte*) main::sc#2 [phi:main::@7->main::@1#0] -- register_copy
- //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@7->main::@1#1] -- register_copy
- //SEG15 main::@1
- b1:
- //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
- ldx y
- lda CHAR_A,x
- sta bits
- //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
- b2_from_b1:
- //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
- ldx #0
- //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#8 [phi:main::@1->main::@2#1] -- register_copy
- //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
- jmp b2
- //SEG21 [5] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
- //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@2#0] -- register_copy
- //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@4->main::@2#1] -- register_copy
- //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@4->main::@2#2] -- register_copy
- //SEG25 main::@2
- b2:
- //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
- lda bits
- and #$80
- //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
- cmp #0
- beq b3
- //SEG28 main::@5
- b5:
- //SEG29 [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'*'
- sta (sc),y
- //SEG30 main::@4
- b4:
- //SEG31 [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
- inc sc
- bne !+
- inc sc+1
+ //SEG7 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
+ lda #'a'
+ ldx #$ff
!:
- //SEG32 [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
- asl bits
- //SEG33 [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
- inx
- //SEG34 [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
- cpx #8
- bne b2
- //SEG35 main::@7
- b7:
- //SEG36 [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
- lda sc
- clc
- adc #$20
- sta sc
- bcc !+
- inc sc+1
- !:
- //SEG37 [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
- inc y
- //SEG38 [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
- lda y
- cmp #8
- bne b1
- //SEG39 main::@8
- b8:
- //SEG40 [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
- lda #$37
- sta PROCPORT
- //SEG41 asm { cli }
- cli
- //SEG42 main::@return
+ sta $400,x
+ sta $500,x
+ sta $600,x
+ sta $700,x
+ dex
+ bne !-
+ //SEG8 main::@return
breturn:
- //SEG43 [18] return [ ]
+ //SEG9 [2] return [ ]
rts
- //SEG44 main::@3
- b3:
- //SEG45 [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'.'
- sta (sc),y
- jmp b4
}
Removing instruction b1:
Removing instruction bend:
-Removing instruction b1_from_main:
-Removing instruction b2_from_b1:
-Removing instruction b5:
-Removing instruction b7:
-Removing instruction b8:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
ASSEMBLER
@@ -2160,9 +315,6 @@ ASSEMBLER
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
- .const PROCPORT = 1
- .const CHARGEN = $d000
- .const SCREEN = $400
//SEG2 @begin
//SEG3 @1
//SEG4 [0] call main param-assignment [ ]
@@ -2170,262 +322,28 @@ ASSEMBLER
//SEG5 @end
//SEG6 main
main: {
- .const CHAR_A = CHARGEN+8
- .label bits = 3
- .label sc = 4
- .label y = 2
- //SEG7 asm { sei }
- sei
- //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
- lda #$32
- sta PROCPORT
- //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
- //SEG10 [3] phi (byte*) main::sc#8 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
- lda #SCREEN
- sta sc+1
- //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
- lda #0
- sta y
- jmp b1
- //SEG12 [3] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
- //SEG13 [3] phi (byte*) main::sc#8 = (byte*) main::sc#2 [phi:main::@7->main::@1#0] -- register_copy
- //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@7->main::@1#1] -- register_copy
- //SEG15 main::@1
- b1:
- //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
- ldx y
- lda CHAR_A,x
- sta bits
- //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
- //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
- ldx #0
- //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#8 [phi:main::@1->main::@2#1] -- register_copy
- //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
- jmp b2
- //SEG21 [5] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
- //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@2#0] -- register_copy
- //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@4->main::@2#1] -- register_copy
- //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@4->main::@2#2] -- register_copy
- //SEG25 main::@2
- b2:
- //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
- lda bits
- and #$80
- //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
- cmp #0
- beq b3
- //SEG28 main::@5
- //SEG29 [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'*'
- sta (sc),y
- //SEG30 main::@4
- b4:
- //SEG31 [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
- inc sc
- bne !+
- inc sc+1
+ //SEG7 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
+ lda #'a'
+ ldx #$ff
!:
- //SEG32 [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
- asl bits
- //SEG33 [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
- inx
- //SEG34 [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
- cpx #8
- bne b2
- //SEG35 main::@7
- //SEG36 [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
- lda sc
- clc
- adc #$20
- sta sc
- bcc !+
- inc sc+1
- !:
- //SEG37 [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
- inc y
- //SEG38 [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
- lda y
- cmp #8
- bne b1
- //SEG39 main::@8
- //SEG40 [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
- lda #$37
- sta PROCPORT
- //SEG41 asm { cli }
- cli
- //SEG42 main::@return
- //SEG43 [18] return [ ]
+ sta $400,x
+ sta $500,x
+ sta $600,x
+ sta $700,x
+ dex
+ bne !-
+ //SEG8 main::@return
+ //SEG9 [2] return [ ]
rts
- //SEG44 main::@3
- b3:
- //SEG45 [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'.'
- sta (sc),y
- jmp b4
-}
-
-Removing instruction jmp b1
-Removing instruction jmp b2
-Succesful ASM optimization Pass5NextJumpElimination
-ASSEMBLER
-//SEG0 Basic Upstart
-.pc = $801 "Basic"
-:BasicUpstart(main)
-.pc = $80d "Program"
-//SEG1 Global Constants & labels
- .const PROCPORT = 1
- .const CHARGEN = $d000
- .const SCREEN = $400
-//SEG2 @begin
-//SEG3 @1
-//SEG4 [0] call main param-assignment [ ]
- jsr main
-//SEG5 @end
-//SEG6 main
-main: {
- .const CHAR_A = CHARGEN+8
- .label bits = 3
- .label sc = 4
- .label y = 2
- //SEG7 asm { sei }
- sei
- //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
- lda #$32
- sta PROCPORT
- //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
- //SEG10 [3] phi (byte*) main::sc#8 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
- lda #SCREEN
- sta sc+1
- //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
- lda #0
- sta y
- //SEG12 [3] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
- //SEG13 [3] phi (byte*) main::sc#8 = (byte*) main::sc#2 [phi:main::@7->main::@1#0] -- register_copy
- //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@7->main::@1#1] -- register_copy
- //SEG15 main::@1
- b1:
- //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
- ldx y
- lda CHAR_A,x
- sta bits
- //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
- //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
- ldx #0
- //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#8 [phi:main::@1->main::@2#1] -- register_copy
- //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
- //SEG21 [5] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
- //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@2#0] -- register_copy
- //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@4->main::@2#1] -- register_copy
- //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@4->main::@2#2] -- register_copy
- //SEG25 main::@2
- b2:
- //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
- lda bits
- and #$80
- //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
- cmp #0
- beq b3
- //SEG28 main::@5
- //SEG29 [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'*'
- sta (sc),y
- //SEG30 main::@4
- b4:
- //SEG31 [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
- inc sc
- bne !+
- inc sc+1
- !:
- //SEG32 [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
- asl bits
- //SEG33 [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
- inx
- //SEG34 [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
- cpx #8
- bne b2
- //SEG35 main::@7
- //SEG36 [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
- lda sc
- clc
- adc #$20
- sta sc
- bcc !+
- inc sc+1
- !:
- //SEG37 [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
- inc y
- //SEG38 [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
- lda y
- cmp #8
- bne b1
- //SEG39 main::@8
- //SEG40 [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
- lda #$37
- sta PROCPORT
- //SEG41 asm { cli }
- cli
- //SEG42 main::@return
- //SEG43 [18] return [ ]
- rts
- //SEG44 main::@3
- b3:
- //SEG45 [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'.'
- sta (sc),y
- jmp b4
}
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
-(byte*) CHARGEN
-(const byte*) CHARGEN#0 CHARGEN = (word) 53248
-(byte*) PROCPORT
-(const byte*) PROCPORT#0 PROCPORT = (byte) 1
-(byte*) SCREEN
-(const byte*) SCREEN#0 SCREEN = (word) 1024
(void()) main()
-(byte~) main::$2 reg byte a 202.0
-(label) main::@1
-(label) main::@2
-(label) main::@3
-(label) main::@4
-(label) main::@5
-(label) main::@7
-(label) main::@8
(label) main::@return
-(byte*) main::CHAR_A
-(const byte*) main::CHAR_A#0 CHAR_A = (const byte*) CHARGEN#0+(byte) 8
-(byte) main::bits
-(byte) main::bits#0 bits zp ZP_BYTE:3 22.0
-(byte) main::bits#1 bits zp ZP_BYTE:3 67.33333333333333
-(byte) main::bits#2 bits zp ZP_BYTE:3 52.33333333333333
-(byte*) main::sc
-(byte*) main::sc#1 sc zp ZP_PTR_BYTE:4 53.25
-(byte*) main::sc#2 sc zp ZP_PTR_BYTE:4 7.333333333333333
-(byte*) main::sc#3 sc zp ZP_PTR_BYTE:4 83.0
-(byte*) main::sc#8 sc zp ZP_PTR_BYTE:4 11.0
-(byte) main::x
-(byte) main::x#1 reg byte x 151.5
-(byte) main::x#2 reg byte x 28.857142857142858
-(byte) main::y
-(byte) main::y#1 y zp ZP_BYTE:2 16.5
-(byte) main::y#2 y zp ZP_BYTE:2 2.75
-zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
-zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
-zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ]
-reg byte x [ main::x#2 main::x#1 ]
-reg byte a [ main::$2 ]
FINAL CODE
//SEG0 Basic Upstart
@@ -2433,9 +351,6 @@ FINAL CODE
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
- .const PROCPORT = 1
- .const CHARGEN = $d000
- .const SCREEN = $400
//SEG2 @begin
//SEG3 @1
//SEG4 [0] call main param-assignment [ ]
@@ -2443,99 +358,18 @@ FINAL CODE
//SEG5 @end
//SEG6 main
main: {
- .const CHAR_A = CHARGEN+8
- .label bits = 3
- .label sc = 4
- .label y = 2
- //SEG7 asm { sei }
- sei
- //SEG8 [2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ] -- _star_cowo1=coby2
- lda #$32
- sta PROCPORT
- //SEG9 [3] phi from main to main::@1 [phi:main->main::@1]
- //SEG10 [3] phi (byte*) main::sc#8 = (const byte*) SCREEN#0 [phi:main->main::@1#0] -- zpptrby1=cowo1
- lda #SCREEN
- sta sc+1
- //SEG11 [3] phi (byte) main::y#2 = (byte) 0 [phi:main->main::@1#1] -- zpby1=coby1
- lda #0
- sta y
- //SEG12 [3] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
- //SEG13 [3] phi (byte*) main::sc#8 = (byte*) main::sc#2 [phi:main::@7->main::@1#0] -- register_copy
- //SEG14 [3] phi (byte) main::y#2 = (byte) main::y#1 [phi:main::@7->main::@1#1] -- register_copy
- //SEG15 main::@1
- b1:
- //SEG16 [4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ] -- zpby1=cowo1_staridx_zpby2
- ldx y
- lda CHAR_A,x
- sta bits
- //SEG17 [5] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
- //SEG18 [5] phi (byte) main::x#2 = (byte) 0 [phi:main::@1->main::@2#0] -- xby=coby1
- ldx #0
- //SEG19 [5] phi (byte*) main::sc#3 = (byte*) main::sc#8 [phi:main::@1->main::@2#1] -- register_copy
- //SEG20 [5] phi (byte) main::bits#2 = (byte) main::bits#0 [phi:main::@1->main::@2#2] -- register_copy
- //SEG21 [5] phi from main::@4 to main::@2 [phi:main::@4->main::@2]
- //SEG22 [5] phi (byte) main::x#2 = (byte) main::x#1 [phi:main::@4->main::@2#0] -- register_copy
- //SEG23 [5] phi (byte*) main::sc#3 = (byte*) main::sc#1 [phi:main::@4->main::@2#1] -- register_copy
- //SEG24 [5] phi (byte) main::bits#2 = (byte) main::bits#1 [phi:main::@4->main::@2#2] -- register_copy
- //SEG25 main::@2
- b2:
- //SEG26 [6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ] -- aby=zpby1_band_coby1
- lda bits
- and #$80
- //SEG27 [7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- aby_eq_0_then_la1
- cmp #0
- beq b3
- //SEG28 main::@5
- //SEG29 [8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'*'
- sta (sc),y
- //SEG30 main::@4
- b4:
- //SEG31 [9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ] -- zpptrby1=_inc_zpptrby1
- inc sc
- bne !+
- inc sc+1
+ //SEG7 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
+ lda #'a'
+ ldx #$ff
!:
- //SEG32 [10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ] -- zpby1=zpby1_rol_1
- asl bits
- //SEG33 [11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby=_inc_xby
- inx
- //SEG34 [12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ] -- xby_neq_coby1_then_la1
- cpx #8
- bne b2
- //SEG35 main::@7
- //SEG36 [13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ] -- zpptrby1=zpptrby1_plus_coby1
- lda sc
- clc
- adc #$20
- sta sc
- bcc !+
- inc sc+1
- !:
- //SEG37 [14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ] -- zpby1=_inc_zpby1
- inc y
- //SEG38 [15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ] -- zpby1_neq_coby1_then_la1
- lda y
- cmp #8
- bne b1
- //SEG39 main::@8
- //SEG40 [16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ] -- _star_cowo1=coby2
- lda #$37
- sta PROCPORT
- //SEG41 asm { cli }
- cli
- //SEG42 main::@return
- //SEG43 [18] return [ ]
+ sta $400,x
+ sta $500,x
+ sta $600,x
+ sta $700,x
+ dex
+ bne !-
+ //SEG8 main::@return
+ //SEG9 [2] return [ ]
rts
- //SEG44 main::@3
- b3:
- //SEG45 [19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] -- _star_zpptrby1=coby1
- ldy #0
- lda #'.'
- sta (sc),y
- jmp b4
}
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.sym b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.sym
index 501c9bbab..5b1ee8133 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.sym
+++ b/src/main/java/dk/camelot64/kickc/test/ref/inline-asm.sym
@@ -1,42 +1,6 @@
(label) @1
(label) @begin
(label) @end
-(byte*) CHARGEN
-(const byte*) CHARGEN#0 CHARGEN = (word) 53248
-(byte*) PROCPORT
-(const byte*) PROCPORT#0 PROCPORT = (byte) 1
-(byte*) SCREEN
-(const byte*) SCREEN#0 SCREEN = (word) 1024
(void()) main()
-(byte~) main::$2 reg byte a 202.0
-(label) main::@1
-(label) main::@2
-(label) main::@3
-(label) main::@4
-(label) main::@5
-(label) main::@7
-(label) main::@8
(label) main::@return
-(byte*) main::CHAR_A
-(const byte*) main::CHAR_A#0 CHAR_A = (const byte*) CHARGEN#0+(byte) 8
-(byte) main::bits
-(byte) main::bits#0 bits zp ZP_BYTE:3 22.0
-(byte) main::bits#1 bits zp ZP_BYTE:3 67.33333333333333
-(byte) main::bits#2 bits zp ZP_BYTE:3 52.33333333333333
-(byte*) main::sc
-(byte*) main::sc#1 sc zp ZP_PTR_BYTE:4 53.25
-(byte*) main::sc#2 sc zp ZP_PTR_BYTE:4 7.333333333333333
-(byte*) main::sc#3 sc zp ZP_PTR_BYTE:4 83.0
-(byte*) main::sc#8 sc zp ZP_PTR_BYTE:4 11.0
-(byte) main::x
-(byte) main::x#1 reg byte x 151.5
-(byte) main::x#2 reg byte x 28.857142857142858
-(byte) main::y
-(byte) main::y#1 y zp ZP_BYTE:2 16.5
-(byte) main::y#2 y zp ZP_BYTE:2 2.75
-zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
-zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
-zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ]
-reg byte x [ main::x#2 main::x#1 ]
-reg byte a [ main::$2 ]
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log b/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log
index bb108e2cd..dd9514fa6 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log
@@ -10,7 +10,7 @@ void main() {
if(++i==8) {
i = 0;
}
- } while(++cursor0)
+ } while (i>0);
}
Adding pre/post-modifier (byte) main::i ← -- (byte) main::i
PROGRAM
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log b/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log
index 0a2eccff4..392d4d5c0 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/loopnest.log
@@ -4,14 +4,14 @@ void main() {
byte i=100;
do {
nest();
- } while (--i>0)
+ } while (--i>0);
}
void nest() {
byte j=100;
do {
*SCREEN = j;
- } while (--j>0)
+ } while (--j>0);
}
Adding pre/post-modifier (byte) main::i ← -- (byte) main::i
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log b/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log
index 6c65ef9f4..ff85afeb4 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/loopnest2.log
@@ -6,8 +6,8 @@ void main() {
byte j=100;
do {
nest1();
- } while (--j>0)
- } while (--i>0)
+ } while (--j>0);
+ } while (--i>0);
}
void nest1() {
@@ -16,8 +16,8 @@ void nest1() {
byte j=100;
do {
nest2();
- } while (--j>0)
- } while (--i>0)
+ } while (--j>0);
+ } while (--i>0);
}
void nest2() {
@@ -26,8 +26,8 @@ void nest2() {
byte j=100;
do {
*SCREEN = j;
- } while (--j>0)
- } while (--i>0)
+ } while (--j>0);
+ } while (--i>0);
}
Adding pre/post-modifier (byte) main::j ← -- (byte) main::j
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log b/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log
index 4de3d74cb..deaf4cc3e 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log
@@ -13,7 +13,7 @@ void main() {
}
SCREEN[++i] = c;
nxt++;
- } while (true)
+ } while (true);
}
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/scroll.log b/src/main/java/dk/camelot64/kickc/test/ref/scroll.log
index 31ad05cf5..a4ceb6311 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/scroll.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/scroll.log
@@ -11,8 +11,8 @@ void main() {
byte[] line = SCREEN+40;
do {
// Wait for raster
- do {} while(*RASTER!=$fe)
- do {} while(*RASTER!=$ff)
+ do {} while(*RASTER!=$fe);
+ do {} while(*RASTER!=$ff);
*BGCOL = *BGCOL+1;
// Soft scroll
if(--scroll==$ff) {
@@ -32,7 +32,7 @@ void main() {
}
*SCROLL = scroll;
*BGCOL = *BGCOL-1;
- } while(true)
+ } while(true);
}
void fillscreen(byte* screen, byte fill) {
diff --git a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log
index 158172a82..588faadbc 100644
--- a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log
+++ b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log
@@ -17,7 +17,7 @@ void main() {
do {
render();
animate();
- } while(true)
+ } while(true);
}
void animate() {
diff --git a/src/main/java/dk/camelot64/kickc/test/scroll-clobber.kc b/src/main/java/dk/camelot64/kickc/test/scroll-clobber.kc
index 80ff790a5..2cfeb4d1c 100644
--- a/src/main/java/dk/camelot64/kickc/test/scroll-clobber.kc
+++ b/src/main/java/dk/camelot64/kickc/test/scroll-clobber.kc
@@ -13,5 +13,5 @@ void main() {
}
SCREEN[++i] = c;
nxt++;
- } while (true)
+ } while (true);
}
diff --git a/src/main/java/dk/camelot64/kickc/test/scroll.kc b/src/main/java/dk/camelot64/kickc/test/scroll.kc
index 13db8c7c3..e7774df29 100644
--- a/src/main/java/dk/camelot64/kickc/test/scroll.kc
+++ b/src/main/java/dk/camelot64/kickc/test/scroll.kc
@@ -11,8 +11,8 @@ void main() {
byte[] line = SCREEN+40;
do {
// Wait for raster
- do {} while(*RASTER!=$fe)
- do {} while(*RASTER!=$ff)
+ do {} while(*RASTER!=$fe);
+ do {} while(*RASTER!=$ff);
*BGCOL = *BGCOL+1;
// Soft scroll
if(--scroll==$ff) {
@@ -32,7 +32,7 @@ void main() {
}
*SCROLL = scroll;
*BGCOL = *BGCOL-1;
- } while(true)
+ } while(true);
}
void fillscreen(byte* screen, byte fill) {
diff --git a/src/main/java/dk/camelot64/kickc/test/voronoi.kc b/src/main/java/dk/camelot64/kickc/test/voronoi.kc
index fb73ace48..c3d117dda 100644
--- a/src/main/java/dk/camelot64/kickc/test/voronoi.kc
+++ b/src/main/java/dk/camelot64/kickc/test/voronoi.kc
@@ -17,7 +17,7 @@ void main() {
do {
render();
animate();
- } while(true)
+ } while(true);
}
void animate() {