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 visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)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() {