mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-12-26 18:29:54 +00:00
Added support for character escape sequence '\\'. Closes #504
This commit is contained in:
parent
66b73ddd56
commit
8c83c21a0f
@ -144,7 +144,7 @@ fragment NAME_CHAR : [a-zA-Z0-9_];
|
||||
|
||||
// Strings and chars
|
||||
STRING : '"' ('\\"' | ~'"')* '"' [z]?([aps][tsmua]?)?[z]? ;
|
||||
CHAR : '\'' ('\\'(['"rfn]|'x'[0-9a-f][0-9a-f]) | ~'\'' ) '\'';
|
||||
CHAR : '\'' ('\\'(['"rfn\\]|'x'[0-9a-f][0-9a-f]) | ~'\'' ) '\'';
|
||||
|
||||
// White space on hidden channel 1
|
||||
WS : [ \t\r\n\u00a0]+ -> channel(1);
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 by ANTLR 4.9
|
||||
// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 by ANTLR 4.9.1
|
||||
package dk.camelot64.kickc.parser;
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ import org.antlr.v4.runtime.misc.*;
|
||||
|
||||
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
|
||||
public class KickCLexer extends Lexer {
|
||||
static { RuntimeMetaData.checkVersion("4.9", RuntimeMetaData.VERSION); }
|
||||
static { RuntimeMetaData.checkVersion("4.9.1", RuntimeMetaData.VERSION); }
|
||||
|
||||
protected static final DFA[] _decisionToDFA;
|
||||
protected static final PredictionContextCache _sharedContextCache =
|
||||
@ -446,101 +446,101 @@ public class KickCLexer extends Lexer {
|
||||
"\u008a\u011d\u008b\u011f\u008c\u0121\u008d\u0123\u008e\u0125\u008f\u0127"+
|
||||
"\2\u0129\2\u012b\2\u012d\u0090\u012f\u0091\u0131\u0092\u0133\u0093\u0135"+
|
||||
"\2\u0137\2\u0139\u0094\u013b\u0095\u013d\u0096\u013f\u0097\u0141\u0098"+
|
||||
"\u0143\u0099\u0145\u009a\u0147\u009b\u0149\u009c\5\2\3\4\26\6\2UUWWuu"+
|
||||
"\u0143\u0099\u0145\u009a\u0147\u009b\u0149\u009c\5\2\3\4\27\6\2UUWWuu"+
|
||||
"ww\f\2DFKKNNUUYYdfkknnuuyy\6\2NNWWnnww\4\2DDdd\3\2\62\63\3\2\62;\5\2\62"+
|
||||
";CHch\5\2C\\aac|\6\2\62;C\\aac|\3\2$$\3\2||\5\2ccrruu\5\2ccoouw\7\2$$"+
|
||||
"))hhpptt\4\2\62;ch\3\2))\6\2\13\f\17\17\"\"\u00a2\u00a2\4\2\f\f\17\17"+
|
||||
"\4\2--//\7\2/;C\\^^aac|\2\u087e\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2"+
|
||||
"\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3"+
|
||||
"\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2"+
|
||||
"\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2"+
|
||||
"\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2"+
|
||||
"\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2"+
|
||||
"\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q"+
|
||||
"\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2"+
|
||||
"\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2"+
|
||||
"\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w"+
|
||||
"\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2"+
|
||||
"\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b"+
|
||||
"\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2"+
|
||||
"\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d"+
|
||||
"\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2"+
|
||||
"\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af"+
|
||||
"\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2"+
|
||||
"\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1"+
|
||||
"\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2"+
|
||||
"\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3"+
|
||||
"\3\2\2\2\2\u00d5\3\2\2\2\2\u00dd\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2"+
|
||||
"\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\3\u00ed\3\2\2\2\3\u00ef"+
|
||||
"\3\2\2\2\3\u00f1\3\2\2\2\3\u00f3\3\2\2\2\3\u00f5\3\2\2\2\3\u00f7\3\2\2"+
|
||||
"\2\3\u00f9\3\2\2\2\3\u00fb\3\2\2\2\3\u00fd\3\2\2\2\3\u00ff\3\2\2\2\3\u0101"+
|
||||
"\3\2\2\2\3\u0103\3\2\2\2\3\u0105\3\2\2\2\3\u0107\3\2\2\2\3\u0109\3\2\2"+
|
||||
"\2\3\u010b\3\2\2\2\3\u010d\3\2\2\2\3\u010f\3\2\2\2\3\u0111\3\2\2\2\3\u0113"+
|
||||
"\3\2\2\2\3\u0115\3\2\2\2\3\u0117\3\2\2\2\3\u0119\3\2\2\2\3\u011b\3\2\2"+
|
||||
"\2\3\u011d\3\2\2\2\3\u011f\3\2\2\2\3\u0121\3\2\2\2\3\u0123\3\2\2\2\3\u0125"+
|
||||
"\3\2\2\2\3\u012d\3\2\2\2\3\u012f\3\2\2\2\3\u0131\3\2\2\2\3\u0133\3\2\2"+
|
||||
"\2\3\u0139\3\2\2\2\3\u013b\3\2\2\2\3\u013d\3\2\2\2\3\u013f\3\2\2\2\4\u0141"+
|
||||
"\3\2\2\2\4\u0143\3\2\2\2\4\u0145\3\2\2\2\4\u0147\3\2\2\2\4\u0149\3\2\2"+
|
||||
"\2\5\u014b\3\2\2\2\7\u014e\3\2\2\2\t\u0150\3\2\2\2\13\u0152\3\2\2\2\r"+
|
||||
"\u0154\3\2\2\2\17\u0156\3\2\2\2\21\u0158\3\2\2\2\23\u015a\3\2\2\2\25\u015c"+
|
||||
"\3\2\2\2\27\u015e\3\2\2\2\31\u0161\3\2\2\2\33\u0165\3\2\2\2\35\u0167\3"+
|
||||
"\2\2\2\37\u0169\3\2\2\2!\u016c\3\2\2\2#\u016e\3\2\2\2%\u0170\3\2\2\2\'"+
|
||||
"\u0172\3\2\2\2)\u0174\3\2\2\2+\u0176\3\2\2\2-\u0179\3\2\2\2/\u017c\3\2"+
|
||||
"\2\2\61\u017e\3\2\2\2\63\u0180\3\2\2\2\65\u0182\3\2\2\2\67\u0184\3\2\2"+
|
||||
"\29\u0187\3\2\2\2;\u018a\3\2\2\2=\u018d\3\2\2\2?\u0190\3\2\2\2A\u0192"+
|
||||
"\3\2\2\2C\u0195\3\2\2\2E\u0198\3\2\2\2G\u019a\3\2\2\2I\u019d\3\2\2\2K"+
|
||||
"\u01a0\3\2\2\2M\u01b8\3\2\2\2O\u01ba\3\2\2\2Q\u01c2\3\2\2\2S\u01c8\3\2"+
|
||||
"\2\2U\u01cf\3\2\2\2W\u01d8\3\2\2\2Y\u01e0\3\2\2\2[\u01e7\3\2\2\2]\u01f0"+
|
||||
"\3\2\2\2_\u01f7\3\2\2\2a\u0203\3\2\2\2c\u020c\3\2\2\2e\u0219\3\2\2\2g"+
|
||||
"\u0223\3\2\2\2i\u0228\3\2\2\2k\u022e\3\2\2\2m\u0234\3\2\2\2o\u0239\3\2"+
|
||||
"\2\2q\u0271\3\2\2\2s\u0273\3\2\2\2u\u0276\3\2\2\2w\u027b\3\2\2\2y\u0281"+
|
||||
"\3\2\2\2{\u0284\3\2\2\2}\u0288\3\2\2\2\177\u028f\3\2\2\2\u0081\u0296\3"+
|
||||
"\2\2\2\u0083\u029c\3\2\2\2\u0085\u02a5\3\2\2\2\u0087\u02ab\3\2\2\2\u0089"+
|
||||
"\u02b3\3\2\2\2\u008b\u02b8\3\2\2\2\u008d\u02bf\3\2\2\2\u008f\u02c5\3\2"+
|
||||
"\2\2\u0091\u02ca\3\2\2\2\u0093\u02d1\3\2\2\2\u0095\u02d8\3\2\2\2\u0097"+
|
||||
"\u02e0\3\2\2\2\u0099\u02e8\3\2\2\2\u009b\u02f1\3\2\2\2\u009d\u02f6\3\2"+
|
||||
"\2\2\u009f\u02ff\3\2\2\2\u00a1\u0305\3\2\2\2\u00a3\u030c\3\2\2\2\u00a5"+
|
||||
"\u0341\3\2\2\2\u00a7\u034c\3\2\2\2\u00a9\u034e\3\2\2\2\u00ab\u035a\3\2"+
|
||||
"\2\2\u00ad\u0364\3\2\2\2\u00af\u036f\3\2\2\2\u00b1\u0377\3\2\2\2\u00b3"+
|
||||
"\u0384\3\2\2\2\u00b5\u0386\3\2\2\2\u00b7\u038d\3\2\2\2\u00b9\u0394\3\2"+
|
||||
"\2\2\u00bb\u039c\3\2\2\2\u00bd\u03a0\3\2\2\2\u00bf\u03a6\3\2\2\2\u00c1"+
|
||||
"\u03ac\3\2\2\2\u00c3\u03b3\3\2\2\2\u00c5\u03bc\3\2\2\2\u00c7\u03c1\3\2"+
|
||||
"\2\2\u00c9\u03c8\3\2\2\2\u00cb\u03d9\3\2\2\2\u00cd\u03e7\3\2\2\2\u00cf"+
|
||||
"\u03f8\3\2\2\2\u00d1\u040c\3\2\2\2\u00d3\u040f\3\2\2\2\u00d5\u0418\3\2"+
|
||||
"\2\2\u00d7\u041f\3\2\2\2\u00d9\u0421\3\2\2\2\u00db\u0423\3\2\2\2\u00dd"+
|
||||
"\u0425\3\2\2\2\u00df\u042e\3\2\2\2\u00e1\u0430\3\2\2\2\u00e3\u0432\3\2"+
|
||||
"\2\2\u00e5\u0448\3\2\2\2\u00e7\u0456\3\2\2\2\u00e9\u045c\3\2\2\2\u00eb"+
|
||||
"\u0467\3\2\2\2\u00ed\u0475\3\2\2\2\u00ef\u06a1\3\2\2\2\u00f1\u06a3\3\2"+
|
||||
"\2\2\u00f3\u06a5\3\2\2\2\u00f5\u06a7\3\2\2\2\u00f7\u06a9\3\2\2\2\u00f9"+
|
||||
"\u06ab\3\2\2\2\u00fb\u06ad\3\2\2\2\u00fd\u06af\3\2\2\2\u00ff\u06b1\3\2"+
|
||||
"\2\2\u0101\u06b3\3\2\2\2\u0103\u06b6\3\2\2\2\u0105\u06b9\3\2\2\2\u0107"+
|
||||
"\u06bb\3\2\2\2\u0109\u06bd\3\2\2\2\u010b\u06bf\3\2\2\2\u010d\u06c1\3\2"+
|
||||
"\2\2\u010f\u06c3\3\2\2\2\u0111\u06c5\3\2\2\2\u0113\u06c8\3\2\2\2\u0115"+
|
||||
"\u06cd\3\2\2\2\u0117\u06d2\3\2\2\2\u0119\u06d4\3\2\2\2\u011b\u06e4\3\2"+
|
||||
"\2\2\u011d\u06ed\3\2\2\2\u011f\u06fd\3\2\2\2\u0121\u06ff\3\2\2\2\u0123"+
|
||||
"\u0706\3\2\2\2\u0125\u070a\3\2\2\2\u0127\u0710\3\2\2\2\u0129\u0712\3\2"+
|
||||
"\2\2\u012b\u0714\3\2\2\2\u012d\u0716\3\2\2\2\u012f\u071e\3\2\2\2\u0131"+
|
||||
"\u0724\3\2\2\2\u0133\u072b\3\2\2\2\u0135\u0732\3\2\2\2\u0137\u0734\3\2"+
|
||||
"\2\2\u0139\u0736\3\2\2\2\u013b\u073a\3\2\2\2\u013d\u0740\3\2\2\2\u013f"+
|
||||
"\u074b\3\2\2\2\u0141\u0759\3\2\2\2\u0143\u0762\3\2\2\2\u0145\u076f\3\2"+
|
||||
"\2\2\u0147\u0775\3\2\2\2\u0149\u0780\3\2\2\2\u014b\u014c\7}\2\2\u014c"+
|
||||
"\u014d\b\2\2\2\u014d\6\3\2\2\2\u014e\u014f\7\177\2\2\u014f\b\3\2\2\2\u0150"+
|
||||
"\u0151\7]\2\2\u0151\n\3\2\2\2\u0152\u0153\7_\2\2\u0153\f\3\2\2\2\u0154"+
|
||||
"\u0155\7*\2\2\u0155\16\3\2\2\2\u0156\u0157\7+\2\2\u0157\20\3\2\2\2\u0158"+
|
||||
"\u0159\7=\2\2\u0159\22\3\2\2\2\u015a\u015b\7<\2\2\u015b\24\3\2\2\2\u015c"+
|
||||
"\u015d\7.\2\2\u015d\26\3\2\2\2\u015e\u015f\7\60\2\2\u015f\u0160\7\60\2"+
|
||||
"\2\u0160\30\3\2\2\2\u0161\u0162\7\60\2\2\u0162\u0163\7\60\2\2\u0163\u0164"+
|
||||
"\7\60\2\2\u0164\32\3\2\2\2\u0165\u0166\7A\2\2\u0166\34\3\2\2\2\u0167\u0168"+
|
||||
"\7\60\2\2\u0168\36\3\2\2\2\u0169\u016a\7/\2\2\u016a\u016b\7@\2\2\u016b"+
|
||||
" \3\2\2\2\u016c\u016d\7-\2\2\u016d\"\3\2\2\2\u016e\u016f\7/\2\2\u016f"+
|
||||
"$\3\2\2\2\u0170\u0171\7,\2\2\u0171&\3\2\2\2\u0172\u0173\7\61\2\2\u0173"+
|
||||
"(\3\2\2\2\u0174\u0175\7\'\2\2\u0175*\3\2\2\2\u0176\u0177\7-\2\2\u0177"+
|
||||
"\u0178\7-\2\2\u0178,\3\2\2\2\u0179\u017a\7/\2\2\u017a\u017b\7/\2\2\u017b"+
|
||||
".\3\2\2\2\u017c\u017d\7(\2\2\u017d\60\3\2\2\2\u017e\u017f\7\u0080\2\2"+
|
||||
"\u017f\62\3\2\2\2\u0180\u0181\7`\2\2\u0181\64\3\2\2\2\u0182\u0183\7~\2"+
|
||||
"\2\u0183\66\3\2\2\2\u0184\u0185\7>\2\2\u0185\u0186\7>\2\2\u01868\3\2\2"+
|
||||
"\2\u0187\u0188\7@\2\2\u0188\u0189\7@\2\2\u0189:\3\2\2\2\u018a\u018b\7"+
|
||||
"?\2\2\u018b\u018c\7?\2\2\u018c<\3\2\2\2\u018d\u018e\7#\2\2\u018e\u018f"+
|
||||
";CHch\5\2C\\aac|\6\2\62;C\\aac|\3\2$$\3\2||\5\2ccrruu\5\2ccoouw\b\2$$"+
|
||||
"))^^hhpptt\4\2\62;ch\3\2))\6\2\13\f\17\17\"\"\u00a2\u00a2\4\2\f\f\17\17"+
|
||||
"\7\2$$))hhpptt\4\2--//\7\2/;C\\^^aac|\2\u087e\2\5\3\2\2\2\2\7\3\2\2\2"+
|
||||
"\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3"+
|
||||
"\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2"+
|
||||
"\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2"+
|
||||
"\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2"+
|
||||
"\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2"+
|
||||
"\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2"+
|
||||
"O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3"+
|
||||
"\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2"+
|
||||
"\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2"+
|
||||
"u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2"+
|
||||
"\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089"+
|
||||
"\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2"+
|
||||
"\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b"+
|
||||
"\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2"+
|
||||
"\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad"+
|
||||
"\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2"+
|
||||
"\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf"+
|
||||
"\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2"+
|
||||
"\2\2\u00c9\3\2\2\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1"+
|
||||
"\3\2\2\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2\2\2\u00dd\3\2\2\2\2\u00e3\3\2\2"+
|
||||
"\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\3\u00ed"+
|
||||
"\3\2\2\2\3\u00ef\3\2\2\2\3\u00f1\3\2\2\2\3\u00f3\3\2\2\2\3\u00f5\3\2\2"+
|
||||
"\2\3\u00f7\3\2\2\2\3\u00f9\3\2\2\2\3\u00fb\3\2\2\2\3\u00fd\3\2\2\2\3\u00ff"+
|
||||
"\3\2\2\2\3\u0101\3\2\2\2\3\u0103\3\2\2\2\3\u0105\3\2\2\2\3\u0107\3\2\2"+
|
||||
"\2\3\u0109\3\2\2\2\3\u010b\3\2\2\2\3\u010d\3\2\2\2\3\u010f\3\2\2\2\3\u0111"+
|
||||
"\3\2\2\2\3\u0113\3\2\2\2\3\u0115\3\2\2\2\3\u0117\3\2\2\2\3\u0119\3\2\2"+
|
||||
"\2\3\u011b\3\2\2\2\3\u011d\3\2\2\2\3\u011f\3\2\2\2\3\u0121\3\2\2\2\3\u0123"+
|
||||
"\3\2\2\2\3\u0125\3\2\2\2\3\u012d\3\2\2\2\3\u012f\3\2\2\2\3\u0131\3\2\2"+
|
||||
"\2\3\u0133\3\2\2\2\3\u0139\3\2\2\2\3\u013b\3\2\2\2\3\u013d\3\2\2\2\3\u013f"+
|
||||
"\3\2\2\2\4\u0141\3\2\2\2\4\u0143\3\2\2\2\4\u0145\3\2\2\2\4\u0147\3\2\2"+
|
||||
"\2\4\u0149\3\2\2\2\5\u014b\3\2\2\2\7\u014e\3\2\2\2\t\u0150\3\2\2\2\13"+
|
||||
"\u0152\3\2\2\2\r\u0154\3\2\2\2\17\u0156\3\2\2\2\21\u0158\3\2\2\2\23\u015a"+
|
||||
"\3\2\2\2\25\u015c\3\2\2\2\27\u015e\3\2\2\2\31\u0161\3\2\2\2\33\u0165\3"+
|
||||
"\2\2\2\35\u0167\3\2\2\2\37\u0169\3\2\2\2!\u016c\3\2\2\2#\u016e\3\2\2\2"+
|
||||
"%\u0170\3\2\2\2\'\u0172\3\2\2\2)\u0174\3\2\2\2+\u0176\3\2\2\2-\u0179\3"+
|
||||
"\2\2\2/\u017c\3\2\2\2\61\u017e\3\2\2\2\63\u0180\3\2\2\2\65\u0182\3\2\2"+
|
||||
"\2\67\u0184\3\2\2\29\u0187\3\2\2\2;\u018a\3\2\2\2=\u018d\3\2\2\2?\u0190"+
|
||||
"\3\2\2\2A\u0192\3\2\2\2C\u0195\3\2\2\2E\u0198\3\2\2\2G\u019a\3\2\2\2I"+
|
||||
"\u019d\3\2\2\2K\u01a0\3\2\2\2M\u01b8\3\2\2\2O\u01ba\3\2\2\2Q\u01c2\3\2"+
|
||||
"\2\2S\u01c8\3\2\2\2U\u01cf\3\2\2\2W\u01d8\3\2\2\2Y\u01e0\3\2\2\2[\u01e7"+
|
||||
"\3\2\2\2]\u01f0\3\2\2\2_\u01f7\3\2\2\2a\u0203\3\2\2\2c\u020c\3\2\2\2e"+
|
||||
"\u0219\3\2\2\2g\u0223\3\2\2\2i\u0228\3\2\2\2k\u022e\3\2\2\2m\u0234\3\2"+
|
||||
"\2\2o\u0239\3\2\2\2q\u0271\3\2\2\2s\u0273\3\2\2\2u\u0276\3\2\2\2w\u027b"+
|
||||
"\3\2\2\2y\u0281\3\2\2\2{\u0284\3\2\2\2}\u0288\3\2\2\2\177\u028f\3\2\2"+
|
||||
"\2\u0081\u0296\3\2\2\2\u0083\u029c\3\2\2\2\u0085\u02a5\3\2\2\2\u0087\u02ab"+
|
||||
"\3\2\2\2\u0089\u02b3\3\2\2\2\u008b\u02b8\3\2\2\2\u008d\u02bf\3\2\2\2\u008f"+
|
||||
"\u02c5\3\2\2\2\u0091\u02ca\3\2\2\2\u0093\u02d1\3\2\2\2\u0095\u02d8\3\2"+
|
||||
"\2\2\u0097\u02e0\3\2\2\2\u0099\u02e8\3\2\2\2\u009b\u02f1\3\2\2\2\u009d"+
|
||||
"\u02f6\3\2\2\2\u009f\u02ff\3\2\2\2\u00a1\u0305\3\2\2\2\u00a3\u030c\3\2"+
|
||||
"\2\2\u00a5\u0341\3\2\2\2\u00a7\u034c\3\2\2\2\u00a9\u034e\3\2\2\2\u00ab"+
|
||||
"\u035a\3\2\2\2\u00ad\u0364\3\2\2\2\u00af\u036f\3\2\2\2\u00b1\u0377\3\2"+
|
||||
"\2\2\u00b3\u0384\3\2\2\2\u00b5\u0386\3\2\2\2\u00b7\u038d\3\2\2\2\u00b9"+
|
||||
"\u0394\3\2\2\2\u00bb\u039c\3\2\2\2\u00bd\u03a0\3\2\2\2\u00bf\u03a6\3\2"+
|
||||
"\2\2\u00c1\u03ac\3\2\2\2\u00c3\u03b3\3\2\2\2\u00c5\u03bc\3\2\2\2\u00c7"+
|
||||
"\u03c1\3\2\2\2\u00c9\u03c8\3\2\2\2\u00cb\u03d9\3\2\2\2\u00cd\u03e7\3\2"+
|
||||
"\2\2\u00cf\u03f8\3\2\2\2\u00d1\u040c\3\2\2\2\u00d3\u040f\3\2\2\2\u00d5"+
|
||||
"\u0418\3\2\2\2\u00d7\u041f\3\2\2\2\u00d9\u0421\3\2\2\2\u00db\u0423\3\2"+
|
||||
"\2\2\u00dd\u0425\3\2\2\2\u00df\u042e\3\2\2\2\u00e1\u0430\3\2\2\2\u00e3"+
|
||||
"\u0432\3\2\2\2\u00e5\u0448\3\2\2\2\u00e7\u0456\3\2\2\2\u00e9\u045c\3\2"+
|
||||
"\2\2\u00eb\u0467\3\2\2\2\u00ed\u0475\3\2\2\2\u00ef\u06a1\3\2\2\2\u00f1"+
|
||||
"\u06a3\3\2\2\2\u00f3\u06a5\3\2\2\2\u00f5\u06a7\3\2\2\2\u00f7\u06a9\3\2"+
|
||||
"\2\2\u00f9\u06ab\3\2\2\2\u00fb\u06ad\3\2\2\2\u00fd\u06af\3\2\2\2\u00ff"+
|
||||
"\u06b1\3\2\2\2\u0101\u06b3\3\2\2\2\u0103\u06b6\3\2\2\2\u0105\u06b9\3\2"+
|
||||
"\2\2\u0107\u06bb\3\2\2\2\u0109\u06bd\3\2\2\2\u010b\u06bf\3\2\2\2\u010d"+
|
||||
"\u06c1\3\2\2\2\u010f\u06c3\3\2\2\2\u0111\u06c5\3\2\2\2\u0113\u06c8\3\2"+
|
||||
"\2\2\u0115\u06cd\3\2\2\2\u0117\u06d2\3\2\2\2\u0119\u06d4\3\2\2\2\u011b"+
|
||||
"\u06e4\3\2\2\2\u011d\u06ed\3\2\2\2\u011f\u06fd\3\2\2\2\u0121\u06ff\3\2"+
|
||||
"\2\2\u0123\u0706\3\2\2\2\u0125\u070a\3\2\2\2\u0127\u0710\3\2\2\2\u0129"+
|
||||
"\u0712\3\2\2\2\u012b\u0714\3\2\2\2\u012d\u0716\3\2\2\2\u012f\u071e\3\2"+
|
||||
"\2\2\u0131\u0724\3\2\2\2\u0133\u072b\3\2\2\2\u0135\u0732\3\2\2\2\u0137"+
|
||||
"\u0734\3\2\2\2\u0139\u0736\3\2\2\2\u013b\u073a\3\2\2\2\u013d\u0740\3\2"+
|
||||
"\2\2\u013f\u074b\3\2\2\2\u0141\u0759\3\2\2\2\u0143\u0762\3\2\2\2\u0145"+
|
||||
"\u076f\3\2\2\2\u0147\u0775\3\2\2\2\u0149\u0780\3\2\2\2\u014b\u014c\7}"+
|
||||
"\2\2\u014c\u014d\b\2\2\2\u014d\6\3\2\2\2\u014e\u014f\7\177\2\2\u014f\b"+
|
||||
"\3\2\2\2\u0150\u0151\7]\2\2\u0151\n\3\2\2\2\u0152\u0153\7_\2\2\u0153\f"+
|
||||
"\3\2\2\2\u0154\u0155\7*\2\2\u0155\16\3\2\2\2\u0156\u0157\7+\2\2\u0157"+
|
||||
"\20\3\2\2\2\u0158\u0159\7=\2\2\u0159\22\3\2\2\2\u015a\u015b\7<\2\2\u015b"+
|
||||
"\24\3\2\2\2\u015c\u015d\7.\2\2\u015d\26\3\2\2\2\u015e\u015f\7\60\2\2\u015f"+
|
||||
"\u0160\7\60\2\2\u0160\30\3\2\2\2\u0161\u0162\7\60\2\2\u0162\u0163\7\60"+
|
||||
"\2\2\u0163\u0164\7\60\2\2\u0164\32\3\2\2\2\u0165\u0166\7A\2\2\u0166\34"+
|
||||
"\3\2\2\2\u0167\u0168\7\60\2\2\u0168\36\3\2\2\2\u0169\u016a\7/\2\2\u016a"+
|
||||
"\u016b\7@\2\2\u016b \3\2\2\2\u016c\u016d\7-\2\2\u016d\"\3\2\2\2\u016e"+
|
||||
"\u016f\7/\2\2\u016f$\3\2\2\2\u0170\u0171\7,\2\2\u0171&\3\2\2\2\u0172\u0173"+
|
||||
"\7\61\2\2\u0173(\3\2\2\2\u0174\u0175\7\'\2\2\u0175*\3\2\2\2\u0176\u0177"+
|
||||
"\7-\2\2\u0177\u0178\7-\2\2\u0178,\3\2\2\2\u0179\u017a\7/\2\2\u017a\u017b"+
|
||||
"\7/\2\2\u017b.\3\2\2\2\u017c\u017d\7(\2\2\u017d\60\3\2\2\2\u017e\u017f"+
|
||||
"\7\u0080\2\2\u017f\62\3\2\2\2\u0180\u0181\7`\2\2\u0181\64\3\2\2\2\u0182"+
|
||||
"\u0183\7~\2\2\u0183\66\3\2\2\2\u0184\u0185\7>\2\2\u0185\u0186\7>\2\2\u0186"+
|
||||
"8\3\2\2\2\u0187\u0188\7@\2\2\u0188\u0189\7@\2\2\u0189:\3\2\2\2\u018a\u018b"+
|
||||
"\7?\2\2\u018b\u018c\7?\2\2\u018c<\3\2\2\2\u018d\u018e\7#\2\2\u018e\u018f"+
|
||||
"\7?\2\2\u018f>\3\2\2\2\u0190\u0191\7>\2\2\u0191@\3\2\2\2\u0192\u0193\7"+
|
||||
">\2\2\u0193\u0194\7?\2\2\u0194B\3\2\2\2\u0195\u0196\7@\2\2\u0196\u0197"+
|
||||
"\7?\2\2\u0197D\3\2\2\2\u0198\u0199\7@\2\2\u0199F\3\2\2\2\u019a\u019b\7"+
|
||||
@ -998,9 +998,9 @@ public class KickCLexer extends Lexer {
|
||||
"\3\2\2\2\u070e\u070c\3\2\2\2\u070e\u070f\3\2\2\2\u070f\u0126\3\2\2\2\u0710"+
|
||||
"\u0711\t\6\2\2\u0711\u0128\3\2\2\2\u0712\u0713\t\7\2\2\u0713\u012a\3\2"+
|
||||
"\2\2\u0714\u0715\t\b\2\2\u0715\u012c\3\2\2\2\u0716\u071a\7)\2\2\u0717"+
|
||||
"\u0718\7^\2\2\u0718\u071b\t\17\2\2\u0719\u071b\n\21\2\2\u071a\u0717\3"+
|
||||
"\u0718\7^\2\2\u0718\u071b\t\24\2\2\u0719\u071b\n\21\2\2\u071a\u0717\3"+
|
||||
"\2\2\2\u071a\u0719\3\2\2\2\u071b\u071c\3\2\2\2\u071c\u071d\7)\2\2\u071d"+
|
||||
"\u012e\3\2\2\2\u071e\u0720\5\u0131\u0098\2\u071f\u0721\t\24\2\2\u0720"+
|
||||
"\u012e\3\2\2\2\u071e\u0720\5\u0131\u0098\2\u071f\u0721\t\25\2\2\u0720"+
|
||||
"\u071f\3\2\2\2\u0721\u0722\3\2\2\2\u0722\u0720\3\2\2\2\u0722\u0723\3\2"+
|
||||
"\2\2\u0723\u0130\3\2\2\2\u0724\u0728\7#\2\2\u0725\u0727\5\u0137\u009b"+
|
||||
"\2\u0726\u0725\3\2\2\2\u0727\u072a\3\2\2\2\u0728\u0726\3\2\2\2\u0728\u0729"+
|
||||
@ -1019,7 +1019,7 @@ public class KickCLexer extends Lexer {
|
||||
"\2\2\2\u074f\u074e\3\2\2\2\u0750\u0753\3\2\2\2\u0751\u0752\3\2\2\2\u0751"+
|
||||
"\u074f\3\2\2\2\u0752\u0754\3\2\2\2\u0753\u0751\3\2\2\2\u0754\u0755\7,"+
|
||||
"\2\2\u0755\u0756\7\61\2\2\u0756\u0757\3\2\2\2\u0757\u0758\b\u009f\b\2"+
|
||||
"\u0758\u0140\3\2\2\2\u0759\u075b\7>\2\2\u075a\u075c\t\25\2\2\u075b\u075a"+
|
||||
"\u0758\u0140\3\2\2\2\u0759\u075b\7>\2\2\u075a\u075c\t\26\2\2\u075b\u075a"+
|
||||
"\3\2\2\2\u075c\u075d\3\2\2\2\u075d\u075b\3\2\2\2\u075d\u075e\3\2\2\2\u075e"+
|
||||
"\u075f\3\2\2\2\u075f\u0760\7@\2\2\u0760\u0761\b\u00a0\13\2\u0761\u0142"+
|
||||
"\3\2\2\2\u0762\u0768\7$\2\2\u0763\u0764\7^\2\2\u0764\u0767\7$\2\2\u0765"+
|
||||
|
@ -7,7 +7,7 @@ char MESSAGE[] = "hello\nworld\\";
|
||||
char* const memA = (char*)0xff;
|
||||
|
||||
void main() {
|
||||
byte i=0;
|
||||
char i=0;
|
||||
while(MESSAGE[i])
|
||||
chrout(MESSAGE[i++]);
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#pragma encoding(petscii_mixed)
|
||||
|
||||
char MESSAGE[] = "hello\nworld";
|
||||
char MESSAGE[] = "hello\nworld\\again";
|
||||
char CH = '\n';
|
||||
|
||||
char* SCREEN = (char*)0x0400;
|
||||
@ -19,12 +19,16 @@ void main() {
|
||||
line += 0x28;
|
||||
cursor = line;
|
||||
break;
|
||||
case '\\':
|
||||
line += 0x50;
|
||||
cursor = line;
|
||||
break;
|
||||
default:
|
||||
*cursor++ = *msg & 0x3f;
|
||||
}
|
||||
msg++;
|
||||
}
|
||||
|
||||
SCREEN[0x50] = CH;
|
||||
|
||||
SCREEN[0xa0] = CH;
|
||||
|
||||
}
|
@ -34,9 +34,9 @@ main: {
|
||||
lda (msg),y
|
||||
cmp #0
|
||||
bne __b2
|
||||
// SCREEN[0x50] = CH
|
||||
// SCREEN[0xa0] = CH
|
||||
lda #CH
|
||||
sta SCREEN+$50
|
||||
sta SCREEN+$a0
|
||||
// }
|
||||
rts
|
||||
__b2:
|
||||
@ -48,6 +48,13 @@ main: {
|
||||
ldy #0
|
||||
cmp (msg),y
|
||||
beq __b4
|
||||
// case '\\':
|
||||
// line += 0x50;
|
||||
// cursor = line;
|
||||
// break;
|
||||
lda #'\\'
|
||||
cmp (msg),y
|
||||
beq __b5
|
||||
// *msg & 0x3f
|
||||
lda #$3f
|
||||
and (msg),y
|
||||
@ -58,13 +65,27 @@ main: {
|
||||
bne !+
|
||||
inc.z cursor+1
|
||||
!:
|
||||
__b6:
|
||||
__b7:
|
||||
// msg++;
|
||||
inc.z msg
|
||||
bne !+
|
||||
inc.z msg+1
|
||||
!:
|
||||
jmp __b1
|
||||
__b5:
|
||||
// line += 0x50
|
||||
lda #$50
|
||||
clc
|
||||
adc.z line
|
||||
sta.z cursor
|
||||
lda #0
|
||||
adc.z line+1
|
||||
sta.z cursor+1
|
||||
lda.z cursor
|
||||
sta.z line
|
||||
lda.z cursor+1
|
||||
sta.z line+1
|
||||
jmp __b7
|
||||
__b4:
|
||||
// line += 0x28
|
||||
lda #$28
|
||||
@ -78,8 +99,8 @@ main: {
|
||||
sta.z line
|
||||
lda.z cursor+1
|
||||
sta.z line+1
|
||||
jmp __b6
|
||||
jmp __b7
|
||||
}
|
||||
.segment Data
|
||||
MESSAGE: .text @"hello\nworld"
|
||||
MESSAGE: .text @"hello\nworld\\again"
|
||||
.byte 0
|
||||
|
@ -3,14 +3,14 @@ void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@6
|
||||
[1] main::cursor#3 = phi( main/(byte*) 1024, main::@6/main::cursor#6 )
|
||||
[1] main::line#2 = phi( main/(byte*) 1024, main::@6/main::line#5 )
|
||||
[1] main::msg#2 = phi( main/MESSAGE, main::@6/main::msg#1 )
|
||||
main::@1: scope:[main] from main main::@7
|
||||
[1] main::cursor#4 = phi( main/(byte*) 1024, main::@7/main::cursor#8 )
|
||||
[1] main::line#3 = phi( main/(byte*) 1024, main::@7/main::line#8 )
|
||||
[1] main::msg#2 = phi( main/MESSAGE, main::@7/main::msg#1 )
|
||||
[2] if(0!=*main::msg#2) goto main::@2
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
[3] *(SCREEN+$50) = CH
|
||||
[3] *(SCREEN+$a0) = CH
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[4] return
|
||||
@ -18,18 +18,25 @@ main::@return: scope:[main] from main::@3
|
||||
main::@2: scope:[main] from main::@1
|
||||
[5] if(*main::msg#2=='
|
||||
'pm) goto main::@4
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@2
|
||||
[6] main::$0 = *main::msg#2 & $3f
|
||||
[7] *main::cursor#3 = main::$0
|
||||
[8] main::cursor#2 = ++ main::cursor#3
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@2
|
||||
[6] if(*main::msg#2=='\'pm) goto main::@5
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@4 main::@5
|
||||
[9] main::cursor#6 = phi( main::@4/main::cursor#1, main::@5/main::cursor#2 )
|
||||
[9] main::line#5 = phi( main::@4/main::line#8, main::@5/main::line#2 )
|
||||
[10] main::msg#1 = ++ main::msg#2
|
||||
main::@6: scope:[main] from main::@8
|
||||
[7] main::$0 = *main::msg#2 & $3f
|
||||
[8] *main::cursor#4 = main::$0
|
||||
[9] main::cursor#3 = ++ main::cursor#4
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@4 main::@5 main::@6
|
||||
[10] main::cursor#8 = phi( main::@4/main::cursor#1, main::@5/main::cursor#2, main::@6/main::cursor#3 )
|
||||
[10] main::line#8 = phi( main::@4/main::line#11, main::@5/main::line#12, main::@6/main::line#3 )
|
||||
[11] main::msg#1 = ++ main::msg#2
|
||||
to:main::@1
|
||||
main::@5: scope:[main] from main::@8
|
||||
[12] main::cursor#2 = main::line#3 + $50
|
||||
[13] main::line#12 = main::cursor#2
|
||||
to:main::@7
|
||||
main::@4: scope:[main] from main::@2
|
||||
[11] main::cursor#1 = main::line#2 + $28
|
||||
[12] main::line#8 = main::cursor#1
|
||||
to:main::@6
|
||||
[14] main::cursor#1 = main::line#3 + $28
|
||||
[15] main::line#11 = main::cursor#1
|
||||
to:main::@7
|
||||
|
@ -8,41 +8,53 @@ main: scope:[main] from __start::@1
|
||||
main::cursor#0 = main::line#0
|
||||
main::msg#0 = MESSAGE
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@6
|
||||
main::cursor#5 = phi( main/main::cursor#0, main::@6/main::cursor#6 )
|
||||
main::line#4 = phi( main/main::line#0, main::@6/main::line#5 )
|
||||
main::msg#2 = phi( main/main::msg#0, main::@6/main::msg#1 )
|
||||
main::@1: scope:[main] from main main::@7
|
||||
main::cursor#7 = phi( main/main::cursor#0, main::@7/main::cursor#8 )
|
||||
main::line#7 = phi( main/main::line#0, main::@7/main::line#8 )
|
||||
main::msg#2 = phi( main/main::msg#0, main::@7/main::msg#1 )
|
||||
main::$1 = 0 != *main::msg#2
|
||||
if(main::$1) goto main::@2
|
||||
to:main::@3
|
||||
main::@2: scope:[main] from main::@1
|
||||
main::cursor#4 = phi( main::@1/main::cursor#5 )
|
||||
main::line#3 = phi( main::@1/main::line#4 )
|
||||
main::cursor#6 = phi( main::@1/main::cursor#7 )
|
||||
main::line#5 = phi( main::@1/main::line#7 )
|
||||
main::msg#3 = phi( main::@1/main::msg#2 )
|
||||
if(*main::msg#3=='
|
||||
'pm) goto main::@4
|
||||
to:main::@5
|
||||
to:main::@8
|
||||
main::@3: scope:[main] from main::@1
|
||||
SCREEN[$50] = CH
|
||||
SCREEN[$a0] = CH
|
||||
to:main::@return
|
||||
main::@4: scope:[main] from main::@2
|
||||
main::msg#6 = phi( main::@2/main::msg#3 )
|
||||
main::line#2 = phi( main::@2/main::line#3 )
|
||||
main::line#1 = main::line#2 + $28
|
||||
main::msg#7 = phi( main::@2/main::msg#3 )
|
||||
main::line#3 = phi( main::@2/main::line#5 )
|
||||
main::line#1 = main::line#3 + $28
|
||||
main::cursor#1 = main::line#1
|
||||
to:main::@7
|
||||
main::@8: scope:[main] from main::@2
|
||||
main::cursor#5 = phi( main::@2/main::cursor#6 )
|
||||
main::msg#6 = phi( main::@2/main::msg#3 )
|
||||
main::line#6 = phi( main::@2/main::line#5 )
|
||||
if(*main::msg#3=='\'pm) goto main::@5
|
||||
to:main::@6
|
||||
main::@5: scope:[main] from main::@2
|
||||
main::line#6 = phi( main::@2/main::line#3 )
|
||||
main::cursor#3 = phi( main::@2/main::cursor#4 )
|
||||
main::msg#4 = phi( main::@2/main::msg#3 )
|
||||
main::@5: scope:[main] from main::@8
|
||||
main::msg#8 = phi( main::@8/main::msg#6 )
|
||||
main::line#4 = phi( main::@8/main::line#6 )
|
||||
main::line#2 = main::line#4 + $50
|
||||
main::cursor#2 = main::line#2
|
||||
to:main::@7
|
||||
main::@6: scope:[main] from main::@8
|
||||
main::line#9 = phi( main::@8/main::line#6 )
|
||||
main::cursor#4 = phi( main::@8/main::cursor#5 )
|
||||
main::msg#4 = phi( main::@8/main::msg#6 )
|
||||
main::$0 = *main::msg#4 & $3f
|
||||
*main::cursor#3 = main::$0
|
||||
main::cursor#2 = ++ main::cursor#3
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@4 main::@5
|
||||
main::cursor#6 = phi( main::@4/main::cursor#1, main::@5/main::cursor#2 )
|
||||
main::line#5 = phi( main::@4/main::line#1, main::@5/main::line#6 )
|
||||
main::msg#5 = phi( main::@4/main::msg#6, main::@5/main::msg#4 )
|
||||
*main::cursor#4 = main::$0
|
||||
main::cursor#3 = ++ main::cursor#4
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@4 main::@5 main::@6
|
||||
main::cursor#8 = phi( main::@4/main::cursor#1, main::@5/main::cursor#2, main::@6/main::cursor#3 )
|
||||
main::line#8 = phi( main::@4/main::line#1, main::@5/main::line#2, main::@6/main::line#9 )
|
||||
main::msg#5 = phi( main::@4/main::msg#7, main::@5/main::msg#8, main::@6/main::msg#4 )
|
||||
main::msg#1 = ++ main::msg#5
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@3
|
||||
@ -67,7 +79,7 @@ SYMBOL TABLE SSA
|
||||
constant byte CH = '
|
||||
'pm
|
||||
constant byte* MESSAGE[] = "hello
|
||||
world"pm
|
||||
world\again"pm
|
||||
constant byte* SCREEN = (byte*)$400
|
||||
void __start()
|
||||
void main()
|
||||
@ -81,6 +93,8 @@ byte* main::cursor#3
|
||||
byte* main::cursor#4
|
||||
byte* main::cursor#5
|
||||
byte* main::cursor#6
|
||||
byte* main::cursor#7
|
||||
byte* main::cursor#8
|
||||
byte* main::line
|
||||
byte* main::line#0
|
||||
byte* main::line#1
|
||||
@ -89,6 +103,9 @@ byte* main::line#3
|
||||
byte* main::line#4
|
||||
byte* main::line#5
|
||||
byte* main::line#6
|
||||
byte* main::line#7
|
||||
byte* main::line#8
|
||||
byte* main::line#9
|
||||
byte* main::msg
|
||||
byte* main::msg#0
|
||||
byte* main::msg#1
|
||||
@ -97,31 +114,37 @@ byte* main::msg#3
|
||||
byte* main::msg#4
|
||||
byte* main::msg#5
|
||||
byte* main::msg#6
|
||||
byte* main::msg#7
|
||||
byte* main::msg#8
|
||||
|
||||
Adding number conversion cast (unumber) 0 in main::$1 = 0 != *main::msg#2
|
||||
Adding number conversion cast (unumber) $50 in SCREEN[$50] = CH
|
||||
Adding number conversion cast (unumber) $28 in main::line#1 = main::line#2 + $28
|
||||
Adding number conversion cast (unumber) $a0 in SCREEN[$a0] = CH
|
||||
Adding number conversion cast (unumber) $28 in main::line#1 = main::line#3 + $28
|
||||
Adding number conversion cast (unumber) $50 in main::line#2 = main::line#4 + $50
|
||||
Adding number conversion cast (unumber) $3f in main::$0 = *main::msg#4 & $3f
|
||||
Adding number conversion cast (unumber) main::$0 in main::$0 = *main::msg#4 & (unumber)$3f
|
||||
Successful SSA optimization PassNAddNumberTypeConversions
|
||||
Simplifying constant pointer cast (byte*) 1024
|
||||
Simplifying constant pointer cast (byte*) 1024
|
||||
Simplifying constant integer cast 0
|
||||
Simplifying constant integer cast $50
|
||||
Simplifying constant integer cast $a0
|
||||
Simplifying constant integer cast $28
|
||||
Simplifying constant integer cast $50
|
||||
Simplifying constant integer cast $3f
|
||||
Successful SSA optimization PassNCastSimplification
|
||||
Finalized unsigned number type (byte) 0
|
||||
Finalized unsigned number type (byte) $50
|
||||
Finalized unsigned number type (byte) $a0
|
||||
Finalized unsigned number type (byte) $28
|
||||
Finalized unsigned number type (byte) $50
|
||||
Finalized unsigned number type (byte) $3f
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Inferred type updated to byte in main::$0 = *main::msg#4 & $3f
|
||||
Alias main::cursor#0 = main::line#0
|
||||
Alias main::msg#2 = main::msg#3 main::msg#6 main::msg#4
|
||||
Alias main::line#2 = main::line#3 main::line#4 main::line#6
|
||||
Alias main::cursor#3 = main::cursor#4 main::cursor#5
|
||||
Alias main::msg#2 = main::msg#3 main::msg#7 main::msg#6 main::msg#8 main::msg#4
|
||||
Alias main::line#3 = main::line#5 main::line#7 main::line#6 main::line#4 main::line#9
|
||||
Alias main::cursor#4 = main::cursor#6 main::cursor#7 main::cursor#5
|
||||
Alias main::cursor#1 = main::line#1
|
||||
Alias main::cursor#2 = main::line#2
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Alias main::msg#2 = main::msg#5
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
@ -142,19 +165,21 @@ Inlining constant with var siblings main::msg#0
|
||||
Constant inlined main::cursor#0 = (byte*) 1024
|
||||
Constant inlined main::msg#0 = MESSAGE
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Consolidated array index constant in *(SCREEN+$50)
|
||||
Consolidated array index constant in *(SCREEN+$a0)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Adding NOP phi() at start of main
|
||||
CALL GRAPH
|
||||
|
||||
Created 5 initial phi equivalence classes
|
||||
Coalesced [9] main::line#9 = main::line#2
|
||||
Coalesced [10] main::cursor#9 = main::cursor#2
|
||||
Coalesced [13] main::msg#7 = main::msg#1
|
||||
Coalesced (already) [14] main::line#7 = main::line#5
|
||||
Coalesced [15] main::cursor#7 = main::cursor#6
|
||||
Not coalescing [17] main::line#8 = main::cursor#1
|
||||
Coalesced [18] main::cursor#8 = main::cursor#1
|
||||
Coalesced [10] main::line#13 = main::line#3
|
||||
Coalesced [11] main::cursor#12 = main::cursor#3
|
||||
Coalesced [14] main::msg#9 = main::msg#1
|
||||
Coalesced (already) [15] main::line#10 = main::line#8
|
||||
Coalesced [16] main::cursor#9 = main::cursor#8
|
||||
Not coalescing [18] main::line#12 = main::cursor#2
|
||||
Coalesced [19] main::cursor#11 = main::cursor#2
|
||||
Not coalescing [21] main::line#11 = main::cursor#1
|
||||
Coalesced [22] main::cursor#10 = main::cursor#1
|
||||
Coalesced down to 3 phi equivalence classes
|
||||
Adding NOP phi() at start of main
|
||||
|
||||
@ -164,14 +189,14 @@ void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@6
|
||||
[1] main::cursor#3 = phi( main/(byte*) 1024, main::@6/main::cursor#6 )
|
||||
[1] main::line#2 = phi( main/(byte*) 1024, main::@6/main::line#5 )
|
||||
[1] main::msg#2 = phi( main/MESSAGE, main::@6/main::msg#1 )
|
||||
main::@1: scope:[main] from main main::@7
|
||||
[1] main::cursor#4 = phi( main/(byte*) 1024, main::@7/main::cursor#8 )
|
||||
[1] main::line#3 = phi( main/(byte*) 1024, main::@7/main::line#8 )
|
||||
[1] main::msg#2 = phi( main/MESSAGE, main::@7/main::msg#1 )
|
||||
[2] if(0!=*main::msg#2) goto main::@2
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
[3] *(SCREEN+$50) = CH
|
||||
[3] *(SCREEN+$a0) = CH
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[4] return
|
||||
@ -179,21 +204,28 @@ main::@return: scope:[main] from main::@3
|
||||
main::@2: scope:[main] from main::@1
|
||||
[5] if(*main::msg#2=='
|
||||
'pm) goto main::@4
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@2
|
||||
[6] main::$0 = *main::msg#2 & $3f
|
||||
[7] *main::cursor#3 = main::$0
|
||||
[8] main::cursor#2 = ++ main::cursor#3
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@2
|
||||
[6] if(*main::msg#2=='\'pm) goto main::@5
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@4 main::@5
|
||||
[9] main::cursor#6 = phi( main::@4/main::cursor#1, main::@5/main::cursor#2 )
|
||||
[9] main::line#5 = phi( main::@4/main::line#8, main::@5/main::line#2 )
|
||||
[10] main::msg#1 = ++ main::msg#2
|
||||
main::@6: scope:[main] from main::@8
|
||||
[7] main::$0 = *main::msg#2 & $3f
|
||||
[8] *main::cursor#4 = main::$0
|
||||
[9] main::cursor#3 = ++ main::cursor#4
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@4 main::@5 main::@6
|
||||
[10] main::cursor#8 = phi( main::@4/main::cursor#1, main::@5/main::cursor#2, main::@6/main::cursor#3 )
|
||||
[10] main::line#8 = phi( main::@4/main::line#11, main::@5/main::line#12, main::@6/main::line#3 )
|
||||
[11] main::msg#1 = ++ main::msg#2
|
||||
to:main::@1
|
||||
main::@5: scope:[main] from main::@8
|
||||
[12] main::cursor#2 = main::line#3 + $50
|
||||
[13] main::line#12 = main::cursor#2
|
||||
to:main::@7
|
||||
main::@4: scope:[main] from main::@2
|
||||
[11] main::cursor#1 = main::line#2 + $28
|
||||
[12] main::line#8 = main::cursor#1
|
||||
to:main::@6
|
||||
[14] main::cursor#1 = main::line#3 + $28
|
||||
[15] main::line#11 = main::cursor#1
|
||||
to:main::@7
|
||||
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
@ -201,51 +233,56 @@ void main()
|
||||
byte~ main::$0 22.0
|
||||
byte* main::cursor
|
||||
byte* main::cursor#1 16.5
|
||||
byte* main::cursor#2 22.0
|
||||
byte* main::cursor#3 6.6000000000000005
|
||||
byte* main::cursor#6 16.5
|
||||
byte* main::cursor#2 16.5
|
||||
byte* main::cursor#3 22.0
|
||||
byte* main::cursor#4 5.5
|
||||
byte* main::cursor#8 22.0
|
||||
byte* main::line
|
||||
byte* main::line#2 5.5
|
||||
byte* main::line#5 16.5
|
||||
byte* main::line#11 22.0
|
||||
byte* main::line#12 22.0
|
||||
byte* main::line#3 6.285714285714286
|
||||
byte* main::line#8 22.0
|
||||
byte* main::msg
|
||||
byte* main::msg#1 22.0
|
||||
byte* main::msg#2 6.111111111111112
|
||||
byte* main::msg#2 5.5
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::msg#2 main::msg#1 ]
|
||||
[ main::line#2 main::line#5 main::line#8 ]
|
||||
[ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ]
|
||||
[ main::line#3 main::line#8 main::line#11 main::line#12 ]
|
||||
[ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ]
|
||||
Added variable main::$0 to live range equivalence class [ main::$0 ]
|
||||
Complete equivalence classes
|
||||
[ main::msg#2 main::msg#1 ]
|
||||
[ main::line#2 main::line#5 main::line#8 ]
|
||||
[ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ]
|
||||
[ main::line#3 main::line#8 main::line#11 main::line#12 ]
|
||||
[ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ]
|
||||
[ main::$0 ]
|
||||
Allocated zp[2]:2 [ main::msg#2 main::msg#1 ]
|
||||
Allocated zp[2]:4 [ main::line#2 main::line#5 main::line#8 ]
|
||||
Allocated zp[2]:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ]
|
||||
Allocated zp[2]:4 [ main::line#3 main::line#8 main::line#11 main::line#12 ]
|
||||
Allocated zp[2]:6 [ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ]
|
||||
Allocated zp[1]:8 [ main::$0 ]
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [2] if(0!=*main::msg#2) goto main::@2 [ main::msg#2 main::line#2 main::cursor#3 ] ( [ main::msg#2 main::line#2 main::cursor#3 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [3] *(SCREEN+$50) = CH [ ] ( [ ] { } ) always clobbers reg byte a
|
||||
Statement [2] if(0!=*main::msg#2) goto main::@2 [ main::msg#2 main::line#3 main::cursor#4 ] ( [ main::msg#2 main::line#3 main::cursor#4 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [3] *(SCREEN+$a0) = CH [ ] ( [ ] { } ) always clobbers reg byte a
|
||||
Statement [5] if(*main::msg#2=='
|
||||
'pm) goto main::@4 [ main::msg#2 main::line#2 main::cursor#3 ] ( [ main::msg#2 main::line#2 main::cursor#3 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [6] main::$0 = *main::msg#2 & $3f [ main::msg#2 main::line#2 main::cursor#3 main::$0 ] ( [ main::msg#2 main::line#2 main::cursor#3 main::$0 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [7] *main::cursor#3 = main::$0 [ main::msg#2 main::line#2 main::cursor#3 ] ( [ main::msg#2 main::line#2 main::cursor#3 ] { } ) always clobbers reg byte y
|
||||
Statement [11] main::cursor#1 = main::line#2 + $28 [ main::msg#2 main::cursor#1 ] ( [ main::msg#2 main::cursor#1 ] { } ) always clobbers reg byte a
|
||||
Statement [12] main::line#8 = main::cursor#1 [ main::msg#2 main::line#8 main::cursor#1 ] ( [ main::msg#2 main::line#8 main::cursor#1 ] { } ) always clobbers reg byte a
|
||||
'pm) goto main::@4 [ main::msg#2 main::line#3 main::cursor#4 ] ( [ main::msg#2 main::line#3 main::cursor#4 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [6] if(*main::msg#2=='\'pm) goto main::@5 [ main::msg#2 main::line#3 main::cursor#4 ] ( [ main::msg#2 main::line#3 main::cursor#4 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [7] main::$0 = *main::msg#2 & $3f [ main::msg#2 main::line#3 main::cursor#4 main::$0 ] ( [ main::msg#2 main::line#3 main::cursor#4 main::$0 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [8] *main::cursor#4 = main::$0 [ main::msg#2 main::line#3 main::cursor#4 ] ( [ main::msg#2 main::line#3 main::cursor#4 ] { } ) always clobbers reg byte y
|
||||
Statement [12] main::cursor#2 = main::line#3 + $50 [ main::msg#2 main::cursor#2 ] ( [ main::msg#2 main::cursor#2 ] { } ) always clobbers reg byte a
|
||||
Statement [13] main::line#12 = main::cursor#2 [ main::msg#2 main::line#12 main::cursor#2 ] ( [ main::msg#2 main::line#12 main::cursor#2 ] { } ) always clobbers reg byte a
|
||||
Statement [14] main::cursor#1 = main::line#3 + $28 [ main::msg#2 main::cursor#1 ] ( [ main::msg#2 main::cursor#1 ] { } ) always clobbers reg byte a
|
||||
Statement [15] main::line#11 = main::cursor#1 [ main::msg#2 main::line#11 main::cursor#1 ] ( [ main::msg#2 main::line#11 main::cursor#1 ] { } ) always clobbers reg byte a
|
||||
Potential registers zp[2]:2 [ main::msg#2 main::msg#1 ] : zp[2]:2 ,
|
||||
Potential registers zp[2]:4 [ main::line#2 main::line#5 main::line#8 ] : zp[2]:4 ,
|
||||
Potential registers zp[2]:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ] : zp[2]:6 ,
|
||||
Potential registers zp[2]:4 [ main::line#3 main::line#8 main::line#11 main::line#12 ] : zp[2]:4 ,
|
||||
Potential registers zp[2]:6 [ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ] : zp[2]:6 ,
|
||||
Potential registers zp[1]:8 [ main::$0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 61.6: zp[2]:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ] 44: zp[2]:4 [ main::line#2 main::line#5 main::line#8 ] 28.11: zp[2]:2 [ main::msg#2 main::msg#1 ] 22: zp[1]:8 [ main::$0 ]
|
||||
Uplift Scope [main] 82.5: zp[2]:6 [ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ] 72.29: zp[2]:4 [ main::line#3 main::line#8 main::line#11 main::line#12 ] 27.5: zp[2]:2 [ main::msg#2 main::msg#1 ] 22: zp[1]:8 [ main::$0 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 1460 combination zp[2]:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ] zp[2]:4 [ main::line#2 main::line#5 main::line#8 ] zp[2]:2 [ main::msg#2 main::msg#1 ] reg byte a [ main::$0 ]
|
||||
Uplifting [] best 1460 combination
|
||||
Uplifting [main] best 1940 combination zp[2]:6 [ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ] zp[2]:4 [ main::line#3 main::line#8 main::line#11 main::line#12 ] zp[2]:2 [ main::msg#2 main::msg#1 ] reg byte a [ main::$0 ]
|
||||
Uplifting [] best 1940 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
// File Comments
|
||||
@ -272,12 +309,12 @@ main: {
|
||||
.label line = 4
|
||||
// [1] phi from main to main::@1 [phi:main->main::@1]
|
||||
__b1_from_main:
|
||||
// [1] phi main::cursor#3 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1
|
||||
// [1] phi main::cursor#4 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1
|
||||
lda #<$400
|
||||
sta.z cursor
|
||||
lda #>$400
|
||||
sta.z cursor+1
|
||||
// [1] phi main::line#2 = (byte*) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1
|
||||
// [1] phi main::line#3 = (byte*) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1
|
||||
lda #<$400
|
||||
sta.z line
|
||||
lda #>$400
|
||||
@ -298,9 +335,9 @@ main: {
|
||||
jmp __b3
|
||||
// main::@3
|
||||
__b3:
|
||||
// [3] *(SCREEN+$50) = CH -- _deref_pbuc1=vbuc2
|
||||
// [3] *(SCREEN+$a0) = CH -- _deref_pbuc1=vbuc2
|
||||
lda #CH
|
||||
sta SCREEN+$50
|
||||
sta SCREEN+$a0
|
||||
jmp __breturn
|
||||
// main::@return
|
||||
__breturn:
|
||||
@ -313,43 +350,68 @@ main: {
|
||||
ldy #0
|
||||
cmp (msg),y
|
||||
beq __b4
|
||||
jmp __b5
|
||||
// main::@5
|
||||
__b5:
|
||||
// [6] main::$0 = *main::msg#2 & $3f -- vbuaa=_deref_pbuz1_band_vbuc1
|
||||
jmp __b8
|
||||
// main::@8
|
||||
__b8:
|
||||
// [6] if(*main::msg#2=='\'pm) goto main::@5 -- _deref_pbuz1_eq_vbuc1_then_la1
|
||||
lda #'\\'
|
||||
ldy #0
|
||||
cmp (msg),y
|
||||
beq __b5
|
||||
jmp __b6
|
||||
// main::@6
|
||||
__b6:
|
||||
// [7] main::$0 = *main::msg#2 & $3f -- vbuaa=_deref_pbuz1_band_vbuc1
|
||||
lda #$3f
|
||||
ldy #0
|
||||
and (msg),y
|
||||
// [7] *main::cursor#3 = main::$0 -- _deref_pbuz1=vbuaa
|
||||
// [8] *main::cursor#4 = main::$0 -- _deref_pbuz1=vbuaa
|
||||
ldy #0
|
||||
sta (cursor),y
|
||||
// [8] main::cursor#2 = ++ main::cursor#3 -- pbuz1=_inc_pbuz1
|
||||
// [9] main::cursor#3 = ++ main::cursor#4 -- pbuz1=_inc_pbuz1
|
||||
inc.z cursor
|
||||
bne !+
|
||||
inc.z cursor+1
|
||||
!:
|
||||
// [9] phi from main::@4 main::@5 to main::@6 [phi:main::@4/main::@5->main::@6]
|
||||
__b6_from___b4:
|
||||
__b6_from___b5:
|
||||
// [9] phi main::cursor#6 = main::cursor#1 [phi:main::@4/main::@5->main::@6#0] -- register_copy
|
||||
// [9] phi main::line#5 = main::line#8 [phi:main::@4/main::@5->main::@6#1] -- register_copy
|
||||
jmp __b6
|
||||
// main::@6
|
||||
__b6:
|
||||
// [10] main::msg#1 = ++ main::msg#2 -- pbuz1=_inc_pbuz1
|
||||
// [10] phi from main::@4 main::@5 main::@6 to main::@7 [phi:main::@4/main::@5/main::@6->main::@7]
|
||||
__b7_from___b4:
|
||||
__b7_from___b5:
|
||||
__b7_from___b6:
|
||||
// [10] phi main::cursor#8 = main::cursor#1 [phi:main::@4/main::@5/main::@6->main::@7#0] -- register_copy
|
||||
// [10] phi main::line#8 = main::line#11 [phi:main::@4/main::@5/main::@6->main::@7#1] -- register_copy
|
||||
jmp __b7
|
||||
// main::@7
|
||||
__b7:
|
||||
// [11] main::msg#1 = ++ main::msg#2 -- pbuz1=_inc_pbuz1
|
||||
inc.z msg
|
||||
bne !+
|
||||
inc.z msg+1
|
||||
!:
|
||||
// [1] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
|
||||
__b1_from___b6:
|
||||
// [1] phi main::cursor#3 = main::cursor#6 [phi:main::@6->main::@1#0] -- register_copy
|
||||
// [1] phi main::line#2 = main::line#5 [phi:main::@6->main::@1#1] -- register_copy
|
||||
// [1] phi main::msg#2 = main::msg#1 [phi:main::@6->main::@1#2] -- register_copy
|
||||
// [1] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
|
||||
__b1_from___b7:
|
||||
// [1] phi main::cursor#4 = main::cursor#8 [phi:main::@7->main::@1#0] -- register_copy
|
||||
// [1] phi main::line#3 = main::line#8 [phi:main::@7->main::@1#1] -- register_copy
|
||||
// [1] phi main::msg#2 = main::msg#1 [phi:main::@7->main::@1#2] -- register_copy
|
||||
jmp __b1
|
||||
// main::@5
|
||||
__b5:
|
||||
// [12] main::cursor#2 = main::line#3 + $50 -- pbuz1=pbuz2_plus_vbuc1
|
||||
lda #$50
|
||||
clc
|
||||
adc.z line
|
||||
sta.z cursor
|
||||
lda #0
|
||||
adc.z line+1
|
||||
sta.z cursor+1
|
||||
// [13] main::line#12 = main::cursor#2 -- pbuz1=pbuz2
|
||||
lda.z cursor
|
||||
sta.z line
|
||||
lda.z cursor+1
|
||||
sta.z line+1
|
||||
jmp __b7_from___b5
|
||||
// main::@4
|
||||
__b4:
|
||||
// [11] main::cursor#1 = main::line#2 + $28 -- pbuz1=pbuz2_plus_vbuc1
|
||||
// [14] main::cursor#1 = main::line#3 + $28 -- pbuz1=pbuz2_plus_vbuc1
|
||||
lda #$28
|
||||
clc
|
||||
adc.z line
|
||||
@ -357,69 +419,76 @@ main: {
|
||||
lda #0
|
||||
adc.z line+1
|
||||
sta.z cursor+1
|
||||
// [12] main::line#8 = main::cursor#1 -- pbuz1=pbuz2
|
||||
// [15] main::line#11 = main::cursor#1 -- pbuz1=pbuz2
|
||||
lda.z cursor
|
||||
sta.z line
|
||||
lda.z cursor+1
|
||||
sta.z line+1
|
||||
jmp __b6_from___b4
|
||||
jmp __b7_from___b4
|
||||
}
|
||||
// File Data
|
||||
.segment Data
|
||||
MESSAGE: .text @"hello\nworld"
|
||||
MESSAGE: .text @"hello\nworld\\again"
|
||||
.byte 0
|
||||
|
||||
ASSEMBLER OPTIMIZATIONS
|
||||
Removing instruction jmp __b1
|
||||
Removing instruction jmp __b3
|
||||
Removing instruction jmp __breturn
|
||||
Removing instruction jmp __b5
|
||||
Removing instruction jmp __b8
|
||||
Removing instruction jmp __b6
|
||||
Removing instruction jmp __b7
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Removing instruction ldy #0
|
||||
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
||||
Replacing label __b6_from___b4 with __b6
|
||||
Removing instruction __b6_from___b4:
|
||||
Removing instruction __b6_from___b5:
|
||||
Replacing label __b7_from___b5 with __b7
|
||||
Replacing label __b7_from___b4 with __b7
|
||||
Removing instruction __b7_from___b4:
|
||||
Removing instruction __b7_from___b5:
|
||||
Removing instruction __b7_from___b6:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction __b1_from_main:
|
||||
Removing instruction __b3:
|
||||
Removing instruction __breturn:
|
||||
Removing instruction __b5:
|
||||
Removing instruction __b1_from___b6:
|
||||
Removing instruction __b8:
|
||||
Removing instruction __b6:
|
||||
Removing instruction __b1_from___b7:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Removing instruction ldy #0
|
||||
Removing instruction ldy #0
|
||||
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
constant byte CH = '
|
||||
'pm
|
||||
constant byte* MESSAGE[] = "hello
|
||||
world"pm
|
||||
world\again"pm
|
||||
constant byte* SCREEN = (byte*) 1024
|
||||
void main()
|
||||
byte~ main::$0 reg byte a 22.0
|
||||
byte* main::cursor
|
||||
byte* main::cursor#1 cursor zp[2]:6 16.5
|
||||
byte* main::cursor#2 cursor zp[2]:6 22.0
|
||||
byte* main::cursor#3 cursor zp[2]:6 6.6000000000000005
|
||||
byte* main::cursor#6 cursor zp[2]:6 16.5
|
||||
byte* main::cursor#2 cursor zp[2]:6 16.5
|
||||
byte* main::cursor#3 cursor zp[2]:6 22.0
|
||||
byte* main::cursor#4 cursor zp[2]:6 5.5
|
||||
byte* main::cursor#8 cursor zp[2]:6 22.0
|
||||
byte* main::line
|
||||
byte* main::line#2 line zp[2]:4 5.5
|
||||
byte* main::line#5 line zp[2]:4 16.5
|
||||
byte* main::line#11 line zp[2]:4 22.0
|
||||
byte* main::line#12 line zp[2]:4 22.0
|
||||
byte* main::line#3 line zp[2]:4 6.285714285714286
|
||||
byte* main::line#8 line zp[2]:4 22.0
|
||||
byte* main::msg
|
||||
byte* main::msg#1 msg zp[2]:2 22.0
|
||||
byte* main::msg#2 msg zp[2]:2 6.111111111111112
|
||||
byte* main::msg#2 msg zp[2]:2 5.5
|
||||
|
||||
zp[2]:2 [ main::msg#2 main::msg#1 ]
|
||||
zp[2]:4 [ main::line#2 main::line#5 main::line#8 ]
|
||||
zp[2]:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ]
|
||||
zp[2]:4 [ main::line#3 main::line#8 main::line#11 main::line#12 ]
|
||||
zp[2]:6 [ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
Score: 1297
|
||||
Score: 1727
|
||||
|
||||
// File Comments
|
||||
// Test using some simple supported string escape \n in both string and char
|
||||
@ -444,12 +513,12 @@ main: {
|
||||
.label msg = 2
|
||||
.label line = 4
|
||||
// [1] phi from main to main::@1 [phi:main->main::@1]
|
||||
// [1] phi main::cursor#3 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1
|
||||
// [1] phi main::cursor#4 = (byte*) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1
|
||||
lda #<$400
|
||||
sta.z cursor
|
||||
lda #>$400
|
||||
sta.z cursor+1
|
||||
// [1] phi main::line#2 = (byte*) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1
|
||||
// [1] phi main::line#3 = (byte*) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1
|
||||
lda #<$400
|
||||
sta.z line
|
||||
lda #>$400
|
||||
@ -468,10 +537,10 @@ main: {
|
||||
cmp #0
|
||||
bne __b2
|
||||
// main::@3
|
||||
// SCREEN[0x50] = CH
|
||||
// [3] *(SCREEN+$50) = CH -- _deref_pbuc1=vbuc2
|
||||
// SCREEN[0xa0] = CH
|
||||
// [3] *(SCREEN+$a0) = CH -- _deref_pbuc1=vbuc2
|
||||
lda #CH
|
||||
sta SCREEN+$50
|
||||
sta SCREEN+$a0
|
||||
// main::@return
|
||||
// }
|
||||
// [4] return
|
||||
@ -487,40 +556,66 @@ main: {
|
||||
ldy #0
|
||||
cmp (msg),y
|
||||
beq __b4
|
||||
// main::@5
|
||||
// main::@8
|
||||
// case '\\':
|
||||
// line += 0x50;
|
||||
// cursor = line;
|
||||
// break;
|
||||
// [6] if(*main::msg#2=='\'pm) goto main::@5 -- _deref_pbuz1_eq_vbuc1_then_la1
|
||||
lda #'\\'
|
||||
cmp (msg),y
|
||||
beq __b5
|
||||
// main::@6
|
||||
// *msg & 0x3f
|
||||
// [6] main::$0 = *main::msg#2 & $3f -- vbuaa=_deref_pbuz1_band_vbuc1
|
||||
// [7] main::$0 = *main::msg#2 & $3f -- vbuaa=_deref_pbuz1_band_vbuc1
|
||||
lda #$3f
|
||||
and (msg),y
|
||||
// *cursor++ = *msg & 0x3f
|
||||
// [7] *main::cursor#3 = main::$0 -- _deref_pbuz1=vbuaa
|
||||
// [8] *main::cursor#4 = main::$0 -- _deref_pbuz1=vbuaa
|
||||
sta (cursor),y
|
||||
// *cursor++ = *msg & 0x3f;
|
||||
// [8] main::cursor#2 = ++ main::cursor#3 -- pbuz1=_inc_pbuz1
|
||||
// [9] main::cursor#3 = ++ main::cursor#4 -- pbuz1=_inc_pbuz1
|
||||
inc.z cursor
|
||||
bne !+
|
||||
inc.z cursor+1
|
||||
!:
|
||||
// [9] phi from main::@4 main::@5 to main::@6 [phi:main::@4/main::@5->main::@6]
|
||||
// [9] phi main::cursor#6 = main::cursor#1 [phi:main::@4/main::@5->main::@6#0] -- register_copy
|
||||
// [9] phi main::line#5 = main::line#8 [phi:main::@4/main::@5->main::@6#1] -- register_copy
|
||||
// main::@6
|
||||
__b6:
|
||||
// [10] phi from main::@4 main::@5 main::@6 to main::@7 [phi:main::@4/main::@5/main::@6->main::@7]
|
||||
// [10] phi main::cursor#8 = main::cursor#1 [phi:main::@4/main::@5/main::@6->main::@7#0] -- register_copy
|
||||
// [10] phi main::line#8 = main::line#11 [phi:main::@4/main::@5/main::@6->main::@7#1] -- register_copy
|
||||
// main::@7
|
||||
__b7:
|
||||
// msg++;
|
||||
// [10] main::msg#1 = ++ main::msg#2 -- pbuz1=_inc_pbuz1
|
||||
// [11] main::msg#1 = ++ main::msg#2 -- pbuz1=_inc_pbuz1
|
||||
inc.z msg
|
||||
bne !+
|
||||
inc.z msg+1
|
||||
!:
|
||||
// [1] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
|
||||
// [1] phi main::cursor#3 = main::cursor#6 [phi:main::@6->main::@1#0] -- register_copy
|
||||
// [1] phi main::line#2 = main::line#5 [phi:main::@6->main::@1#1] -- register_copy
|
||||
// [1] phi main::msg#2 = main::msg#1 [phi:main::@6->main::@1#2] -- register_copy
|
||||
// [1] phi from main::@7 to main::@1 [phi:main::@7->main::@1]
|
||||
// [1] phi main::cursor#4 = main::cursor#8 [phi:main::@7->main::@1#0] -- register_copy
|
||||
// [1] phi main::line#3 = main::line#8 [phi:main::@7->main::@1#1] -- register_copy
|
||||
// [1] phi main::msg#2 = main::msg#1 [phi:main::@7->main::@1#2] -- register_copy
|
||||
jmp __b1
|
||||
// main::@5
|
||||
__b5:
|
||||
// line += 0x50
|
||||
// [12] main::cursor#2 = main::line#3 + $50 -- pbuz1=pbuz2_plus_vbuc1
|
||||
lda #$50
|
||||
clc
|
||||
adc.z line
|
||||
sta.z cursor
|
||||
lda #0
|
||||
adc.z line+1
|
||||
sta.z cursor+1
|
||||
// [13] main::line#12 = main::cursor#2 -- pbuz1=pbuz2
|
||||
lda.z cursor
|
||||
sta.z line
|
||||
lda.z cursor+1
|
||||
sta.z line+1
|
||||
jmp __b7
|
||||
// main::@4
|
||||
__b4:
|
||||
// line += 0x28
|
||||
// [11] main::cursor#1 = main::line#2 + $28 -- pbuz1=pbuz2_plus_vbuc1
|
||||
// [14] main::cursor#1 = main::line#3 + $28 -- pbuz1=pbuz2_plus_vbuc1
|
||||
lda #$28
|
||||
clc
|
||||
adc.z line
|
||||
@ -528,15 +623,15 @@ main: {
|
||||
lda #0
|
||||
adc.z line+1
|
||||
sta.z cursor+1
|
||||
// [12] main::line#8 = main::cursor#1 -- pbuz1=pbuz2
|
||||
// [15] main::line#11 = main::cursor#1 -- pbuz1=pbuz2
|
||||
lda.z cursor
|
||||
sta.z line
|
||||
lda.z cursor+1
|
||||
sta.z line+1
|
||||
jmp __b6
|
||||
jmp __b7
|
||||
}
|
||||
// File Data
|
||||
.segment Data
|
||||
MESSAGE: .text @"hello\nworld"
|
||||
MESSAGE: .text @"hello\nworld\\again"
|
||||
.byte 0
|
||||
|
||||
|
@ -1,24 +1,26 @@
|
||||
constant byte CH = '
|
||||
'pm
|
||||
constant byte* MESSAGE[] = "hello
|
||||
world"pm
|
||||
world\again"pm
|
||||
constant byte* SCREEN = (byte*) 1024
|
||||
void main()
|
||||
byte~ main::$0 reg byte a 22.0
|
||||
byte* main::cursor
|
||||
byte* main::cursor#1 cursor zp[2]:6 16.5
|
||||
byte* main::cursor#2 cursor zp[2]:6 22.0
|
||||
byte* main::cursor#3 cursor zp[2]:6 6.6000000000000005
|
||||
byte* main::cursor#6 cursor zp[2]:6 16.5
|
||||
byte* main::cursor#2 cursor zp[2]:6 16.5
|
||||
byte* main::cursor#3 cursor zp[2]:6 22.0
|
||||
byte* main::cursor#4 cursor zp[2]:6 5.5
|
||||
byte* main::cursor#8 cursor zp[2]:6 22.0
|
||||
byte* main::line
|
||||
byte* main::line#2 line zp[2]:4 5.5
|
||||
byte* main::line#5 line zp[2]:4 16.5
|
||||
byte* main::line#11 line zp[2]:4 22.0
|
||||
byte* main::line#12 line zp[2]:4 22.0
|
||||
byte* main::line#3 line zp[2]:4 6.285714285714286
|
||||
byte* main::line#8 line zp[2]:4 22.0
|
||||
byte* main::msg
|
||||
byte* main::msg#1 msg zp[2]:2 22.0
|
||||
byte* main::msg#2 msg zp[2]:2 6.111111111111112
|
||||
byte* main::msg#2 msg zp[2]:2 5.5
|
||||
|
||||
zp[2]:2 [ main::msg#2 main::msg#1 ]
|
||||
zp[2]:4 [ main::line#2 main::line#5 main::line#8 ]
|
||||
zp[2]:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ]
|
||||
zp[2]:4 [ main::line#3 main::line#8 main::line#11 main::line#12 ]
|
||||
zp[2]:6 [ main::cursor#4 main::cursor#8 main::cursor#1 main::cursor#2 main::cursor#3 ]
|
||||
reg byte a [ main::$0 ]
|
||||
|
Loading…
Reference in New Issue
Block a user