From 63f10a28deeacad4eda45b58edacce12d069eae4 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 8 Apr 2019 16:26:39 +0200 Subject: [PATCH] Added support for standard C types (char, short, int, long). Closes #108 --- .../kickc/model/types/SymbolType.java | 30 + .../java/dk/camelot64/kickc/parser/KickC.g4 | 4 +- .../dk/camelot64/kickc/parser/KickC.tokens | 132 +- .../dk/camelot64/kickc/parser/KickCLexer.java | 690 +-- .../camelot64/kickc/parser/KickCLexer.tokens | 132 +- .../camelot64/kickc/parser/KickCParser.java | 473 +- .../Pass0GenerateStatementSequence.java | 13 +- .../dk/camelot64/kickc/test/TestPrograms.java | 5 + src/test/kc/c-types.kc | 71 + src/test/ref/c-types.asm | 359 ++ src/test/ref/c-types.cfg | 307 + src/test/ref/c-types.log | 5098 +++++++++++++++++ src/test/ref/c-types.sym | 173 + 13 files changed, 6777 insertions(+), 710 deletions(-) create mode 100644 src/test/kc/c-types.kc create mode 100644 src/test/ref/c-types.asm create mode 100644 src/test/ref/c-types.cfg create mode 100644 src/test/ref/c-types.log create mode 100644 src/test/ref/c-types.sym diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java index 781ef4245..839f82a35 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolType.java @@ -43,16 +43,46 @@ public interface SymbolType { switch(name) { case "byte": return BYTE; + case "unsigned byte": + return BYTE; case "signed byte": return SBYTE; + case "char": + return SBYTE; + case "unsigned char": + return BYTE; + case "signed char": + return SBYTE; case "word": return WORD; + case "unsigned word": + return WORD; case "signed word": return SWORD; + case "short": + return SWORD; + case "unsigned short": + return WORD; + case "signed short": + return SWORD; + case "int": + return SWORD; + case "unsigned int": + return WORD; + case "signed int": + return SWORD; case "dword": return DWORD; + case "unsigned dword": + return DWORD; case "signed dword": return SDWORD; + case "long": + return SDWORD; + case "unsigned long": + return DWORD; + case "signed long": + return SDWORD; case "string": return STRING; case "bool": diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 index a802144b8..8af494f94 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 @@ -82,7 +82,7 @@ forIteration typeDecl : '(' typeDecl ')' #typePar | SIMPLETYPE #typeSimple - | 'signed' SIMPLETYPE #typeSignedSimple + | ('signed'|'unsigned') SIMPLETYPE #typeSignedSimple | typeDecl '*' #typePtr | typeDecl '[' (expr)? ']' #typeArray | typeDecl '(' ')' #typeProcedure @@ -194,7 +194,7 @@ MNEMONIC: KICKASM: '{{' .*? '}}'; -SIMPLETYPE: 'byte' | 'word' | 'dword' | 'bool' | 'void' ; +SIMPLETYPE: 'byte' | 'word' | 'dword' | 'bool' | 'char' | 'short' | 'int' | 'long' | 'void' ; STRING : '"' ('\\"' | ~'"')* '"'; CHAR : '\'' ('\\\'' | ~'\'' ) '\''; BOOLEAN : 'true' | 'false'; diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens index 60625c5cc..d173ca275 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens @@ -70,26 +70,27 @@ T__68=69 T__69=70 T__70=71 T__71=72 -MNEMONIC=73 -KICKASM=74 -SIMPLETYPE=75 -STRING=76 -CHAR=77 -BOOLEAN=78 -NUMBER=79 -NUMFLOAT=80 -BINFLOAT=81 -DECFLOAT=82 -HEXFLOAT=83 -NUMINT=84 -BININTEGER=85 -DECINTEGER=86 -HEXINTEGER=87 -NAME=88 -ASMREL=89 -WS=90 -COMMENT_LINE=91 -COMMENT_BLOCK=92 +T__72=73 +MNEMONIC=74 +KICKASM=75 +SIMPLETYPE=76 +STRING=77 +CHAR=78 +BOOLEAN=79 +NUMBER=80 +NUMFLOAT=81 +BINFLOAT=82 +DECFLOAT=83 +HEXFLOAT=84 +NUMINT=85 +BININTEGER=86 +DECINTEGER=87 +HEXINTEGER=88 +NAME=89 +ASMREL=90 +WS=91 +COMMENT_LINE=92 +COMMENT_BLOCK=93 'import'=1 '='=2 ';'=3 @@ -117,48 +118,49 @@ COMMENT_BLOCK=92 ':'=25 '..'=26 'signed'=27 -'*'=28 -'['=29 -']'=30 -'--'=31 -'++'=32 -'+'=33 -'-'=34 -'!'=35 -'&'=36 -'~'=37 -'>>'=38 -'<<'=39 -'/'=40 -'%'=41 -'<'=42 -'>'=43 -'=='=44 -'!='=45 -'<='=46 -'>='=47 -'^'=48 -'|'=49 -'&&'=50 -'||'=51 -'?'=52 -'+='=53 -'-='=54 -'*='=55 -'/='=56 -'%='=57 -'<<='=58 -'>>='=59 -'&='=60 -'|='=61 -'^='=62 -'kickasm'=63 -'resource'=64 -'uses'=65 -'clobbers'=66 -'bytes'=67 -'cycles'=68 -'pc'=69 -'.byte'=70 -'#'=71 -'.'=72 +'unsigned'=28 +'*'=29 +'['=30 +']'=31 +'--'=32 +'++'=33 +'+'=34 +'-'=35 +'!'=36 +'&'=37 +'~'=38 +'>>'=39 +'<<'=40 +'/'=41 +'%'=42 +'<'=43 +'>'=44 +'=='=45 +'!='=46 +'<='=47 +'>='=48 +'^'=49 +'|'=50 +'&&'=51 +'||'=52 +'?'=53 +'+='=54 +'-='=55 +'*='=56 +'/='=57 +'%='=58 +'<<='=59 +'>>='=60 +'&='=61 +'|='=62 +'^='=63 +'kickasm'=64 +'resource'=65 +'uses'=66 +'clobbers'=67 +'bytes'=68 +'cycles'=69 +'pc'=70 +'.byte'=71 +'#'=72 +'.'=73 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index 17a9413b0..eb453a233 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -26,11 +26,11 @@ public class KickCLexer extends Lexer { T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52, T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59, T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66, - T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, MNEMONIC=73, - KICKASM=74, SIMPLETYPE=75, STRING=76, CHAR=77, BOOLEAN=78, NUMBER=79, - NUMFLOAT=80, BINFLOAT=81, DECFLOAT=82, HEXFLOAT=83, NUMINT=84, BININTEGER=85, - DECINTEGER=86, HEXINTEGER=87, NAME=88, ASMREL=89, WS=90, COMMENT_LINE=91, - COMMENT_BLOCK=92; + T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, T__72=73, + MNEMONIC=74, KICKASM=75, SIMPLETYPE=76, STRING=77, CHAR=78, BOOLEAN=79, + NUMBER=80, NUMFLOAT=81, BINFLOAT=82, DECFLOAT=83, HEXFLOAT=84, NUMINT=85, + BININTEGER=86, DECINTEGER=87, HEXINTEGER=88, NAME=89, ASMREL=90, WS=91, + COMMENT_LINE=92, COMMENT_BLOCK=93; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -48,23 +48,23 @@ public class KickCLexer extends Lexer { "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", - "T__65", "T__66", "T__67", "T__68", "T__69", "T__70", "T__71", "MNEMONIC", - "KICKASM", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", - "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", - "HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", - "NAME_CHAR", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + "T__65", "T__66", "T__67", "T__68", "T__69", "T__70", "T__71", "T__72", + "MNEMONIC", "KICKASM", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", + "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", + "DECINTEGER", "HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", + "NAME_START", "NAME_CHAR", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; private static final String[] _LITERAL_NAMES = { null, "'import'", "'='", "';'", "'('", "')'", "'{'", "'}'", "','", "'const'", "'extern'", "'align'", "'register'", "'inline'", "'volatile'", "'interrupt'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'break'", "'continue'", - "'asm'", "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", - "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", - "'>'", "'=='", "'!='", "'<='", "'>='", "'^'", "'|'", "'&&'", "'||'", "'?'", - "'+='", "'-='", "'*='", "'/='", "'%='", "'<<='", "'>>='", "'&='", "'|='", - "'^='", "'kickasm'", "'resource'", "'uses'", "'clobbers'", "'bytes'", - "'cycles'", "'pc'", "'.byte'", "'#'", "'.'" + "'asm'", "':'", "'..'", "'signed'", "'unsigned'", "'*'", "'['", "']'", + "'--'", "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", + "'%'", "'<'", "'>'", "'=='", "'!='", "'<='", "'>='", "'^'", "'|'", "'&&'", + "'||'", "'?'", "'+='", "'-='", "'*='", "'/='", "'%='", "'<<='", "'>>='", + "'&='", "'|='", "'^='", "'kickasm'", "'resource'", "'uses'", "'clobbers'", + "'bytes'", "'cycles'", "'pc'", "'.byte'", "'#'", "'.'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, null, null, null, null, null, null, null, @@ -73,7 +73,7 @@ public class KickCLexer extends Lexer { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, "MNEMONIC", "KICKASM", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", + null, null, "MNEMONIC", "KICKASM", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; @@ -135,7 +135,7 @@ public class KickCLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2^\u039e\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2_\u03b9\b\1\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\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -146,328 +146,338 @@ public class KickCLexer extends Lexer { "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ - "`\t`\4a\ta\4b\tb\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3"+ - "\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13"+ - "\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3"+ - "\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17"+ - "\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ - "\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23"+ - "\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26"+ - "\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ - "\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34"+ - "\3\34\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3"+ - "\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3*\3*\3+\3+\3,\3"+ - ",\3-\3-\3-\3.\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3"+ - "\63\3\63\3\64\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\67\3\67\3\67\38\38"+ - "\38\39\39\39\3:\3:\3:\3;\3;\3;\3;\3<\3<\3<\3<\3=\3=\3=\3>\3>\3>\3?\3?"+ - "\3?\3@\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B"+ - "\3C\3C\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3F"+ - "\3F\3F\3G\3G\3G\3G\3G\3G\3H\3H\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J\3J"+ - "\3J\3J\3J\3J\5J\u02bf\nJ\3K\3K\3K\3K\7K\u02c5\nK\fK\16K\u02c8\13K\3K\3"+ - "K\3K\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\3L\5"+ - "L\u02e2\nL\3M\3M\3M\3M\7M\u02e8\nM\fM\16M\u02eb\13M\3M\3M\3N\3N\3N\3N"+ - "\5N\u02f3\nN\3N\3N\3O\3O\3O\3O\3O\3O\3O\3O\3O\5O\u0300\nO\3P\3P\5P\u0304"+ - "\nP\3Q\3Q\3Q\5Q\u0309\nQ\3R\3R\3R\3R\3R\5R\u0310\nR\3R\7R\u0313\nR\fR"+ - "\16R\u0316\13R\3R\3R\6R\u031a\nR\rR\16R\u031b\3S\7S\u031f\nS\fS\16S\u0322"+ - "\13S\3S\3S\6S\u0326\nS\rS\16S\u0327\3T\3T\3T\3T\3T\5T\u032f\nT\3T\7T\u0332"+ - "\nT\fT\16T\u0335\13T\3T\3T\6T\u0339\nT\rT\16T\u033a\3U\3U\3U\5U\u0340"+ - "\nU\3V\3V\3V\6V\u0345\nV\rV\16V\u0346\3V\3V\6V\u034b\nV\rV\16V\u034c\5"+ - "V\u034f\nV\3W\6W\u0352\nW\rW\16W\u0353\3X\3X\3X\3X\3X\5X\u035b\nX\3X\6"+ - "X\u035e\nX\rX\16X\u035f\3Y\3Y\3Z\3Z\3[\3[\3\\\3\\\7\\\u036a\n\\\f\\\16"+ - "\\\u036d\13\\\3]\3]\3^\3^\3_\3_\7_\u0375\n_\f_\16_\u0378\13_\3_\6_\u037b"+ - "\n_\r_\16_\u037c\3`\6`\u0380\n`\r`\16`\u0381\3`\3`\3a\3a\3a\3a\7a\u038a"+ - "\na\fa\16a\u038d\13a\3a\3a\3b\3b\3b\3b\7b\u0395\nb\fb\16b\u0398\13b\3"+ - "b\3b\3b\3b\3b\4\u02c6\u0396\2c\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13"+ - "\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61"+ - "\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61"+ - "a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087"+ - "E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009b"+ - "O\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00af"+ - "Y\u00b1\2\u00b3\2\u00b5\2\u00b7Z\u00b9\2\u00bb\2\u00bd[\u00bf\\\u00c1"+ - "]\u00c3^\3\2\r\3\2$$\3\2))\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C"+ - "\\aac|\6\2\62;C\\aac|\4\2--//\6\2\13\f\17\17\"\"\u00a2\u00a2\4\2\f\f\17"+ - "\17\2\u0406\2\3\3\2\2\2\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\u00b7\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\3\u00c5\3\2\2\2\5\u00cc\3\2\2\2\7\u00ce\3\2\2\2\t\u00d0\3\2\2"+ - "\2\13\u00d2\3\2\2\2\r\u00d4\3\2\2\2\17\u00d6\3\2\2\2\21\u00d8\3\2\2\2"+ - "\23\u00da\3\2\2\2\25\u00e0\3\2\2\2\27\u00e7\3\2\2\2\31\u00ed\3\2\2\2\33"+ - "\u00f6\3\2\2\2\35\u00fd\3\2\2\2\37\u0106\3\2\2\2!\u0110\3\2\2\2#\u0113"+ - "\3\2\2\2%\u0118\3\2\2\2\'\u011e\3\2\2\2)\u0121\3\2\2\2+\u0125\3\2\2\2"+ - "-\u012c\3\2\2\2/\u0132\3\2\2\2\61\u013b\3\2\2\2\63\u013f\3\2\2\2\65\u0141"+ - "\3\2\2\2\67\u0144\3\2\2\29\u014b\3\2\2\2;\u014d\3\2\2\2=\u014f\3\2\2\2"+ - "?\u0151\3\2\2\2A\u0154\3\2\2\2C\u0157\3\2\2\2E\u0159\3\2\2\2G\u015b\3"+ - "\2\2\2I\u015d\3\2\2\2K\u015f\3\2\2\2M\u0161\3\2\2\2O\u0164\3\2\2\2Q\u0167"+ - "\3\2\2\2S\u0169\3\2\2\2U\u016b\3\2\2\2W\u016d\3\2\2\2Y\u016f\3\2\2\2["+ - "\u0172\3\2\2\2]\u0175\3\2\2\2_\u0178\3\2\2\2a\u017b\3\2\2\2c\u017d\3\2"+ - "\2\2e\u017f\3\2\2\2g\u0182\3\2\2\2i\u0185\3\2\2\2k\u0187\3\2\2\2m\u018a"+ - "\3\2\2\2o\u018d\3\2\2\2q\u0190\3\2\2\2s\u0193\3\2\2\2u\u0196\3\2\2\2w"+ - "\u019a\3\2\2\2y\u019e\3\2\2\2{\u01a1\3\2\2\2}\u01a4\3\2\2\2\177\u01a7"+ - "\3\2\2\2\u0081\u01af\3\2\2\2\u0083\u01b8\3\2\2\2\u0085\u01bd\3\2\2\2\u0087"+ - "\u01c6\3\2\2\2\u0089\u01cc\3\2\2\2\u008b\u01d3\3\2\2\2\u008d\u01d6\3\2"+ - "\2\2\u008f\u01dc\3\2\2\2\u0091\u01de\3\2\2\2\u0093\u02be\3\2\2\2\u0095"+ - "\u02c0\3\2\2\2\u0097\u02e1\3\2\2\2\u0099\u02e3\3\2\2\2\u009b\u02ee\3\2"+ - "\2\2\u009d\u02ff\3\2\2\2\u009f\u0303\3\2\2\2\u00a1\u0308\3\2\2\2\u00a3"+ - "\u030f\3\2\2\2\u00a5\u0320\3\2\2\2\u00a7\u032e\3\2\2\2\u00a9\u033f\3\2"+ - "\2\2\u00ab\u034e\3\2\2\2\u00ad\u0351\3\2\2\2\u00af\u035a\3\2\2\2\u00b1"+ - "\u0361\3\2\2\2\u00b3\u0363\3\2\2\2\u00b5\u0365\3\2\2\2\u00b7\u0367\3\2"+ - "\2\2\u00b9\u036e\3\2\2\2\u00bb\u0370\3\2\2\2\u00bd\u0372\3\2\2\2\u00bf"+ - "\u037f\3\2\2\2\u00c1\u0385\3\2\2\2\u00c3\u0390\3\2\2\2\u00c5\u00c6\7k"+ - "\2\2\u00c6\u00c7\7o\2\2\u00c7\u00c8\7r\2\2\u00c8\u00c9\7q\2\2\u00c9\u00ca"+ - "\7t\2\2\u00ca\u00cb\7v\2\2\u00cb\4\3\2\2\2\u00cc\u00cd\7?\2\2\u00cd\6"+ - "\3\2\2\2\u00ce\u00cf\7=\2\2\u00cf\b\3\2\2\2\u00d0\u00d1\7*\2\2\u00d1\n"+ - "\3\2\2\2\u00d2\u00d3\7+\2\2\u00d3\f\3\2\2\2\u00d4\u00d5\7}\2\2\u00d5\16"+ - "\3\2\2\2\u00d6\u00d7\7\177\2\2\u00d7\20\3\2\2\2\u00d8\u00d9\7.\2\2\u00d9"+ - "\22\3\2\2\2\u00da\u00db\7e\2\2\u00db\u00dc\7q\2\2\u00dc\u00dd\7p\2\2\u00dd"+ - "\u00de\7u\2\2\u00de\u00df\7v\2\2\u00df\24\3\2\2\2\u00e0\u00e1\7g\2\2\u00e1"+ - "\u00e2\7z\2\2\u00e2\u00e3\7v\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5\7t\2\2"+ - "\u00e5\u00e6\7p\2\2\u00e6\26\3\2\2\2\u00e7\u00e8\7c\2\2\u00e8\u00e9\7"+ - "n\2\2\u00e9\u00ea\7k\2\2\u00ea\u00eb\7i\2\2\u00eb\u00ec\7p\2\2\u00ec\30"+ - "\3\2\2\2\u00ed\u00ee\7t\2\2\u00ee\u00ef\7g\2\2\u00ef\u00f0\7i\2\2\u00f0"+ - "\u00f1\7k\2\2\u00f1\u00f2\7u\2\2\u00f2\u00f3\7v\2\2\u00f3\u00f4\7g\2\2"+ - "\u00f4\u00f5\7t\2\2\u00f5\32\3\2\2\2\u00f6\u00f7\7k\2\2\u00f7\u00f8\7"+ - "p\2\2\u00f8\u00f9\7n\2\2\u00f9\u00fa\7k\2\2\u00fa\u00fb\7p\2\2\u00fb\u00fc"+ - "\7g\2\2\u00fc\34\3\2\2\2\u00fd\u00fe\7x\2\2\u00fe\u00ff\7q\2\2\u00ff\u0100"+ - "\7n\2\2\u0100\u0101\7c\2\2\u0101\u0102\7v\2\2\u0102\u0103\7k\2\2\u0103"+ - "\u0104\7n\2\2\u0104\u0105\7g\2\2\u0105\36\3\2\2\2\u0106\u0107\7k\2\2\u0107"+ - "\u0108\7p\2\2\u0108\u0109\7v\2\2\u0109\u010a\7g\2\2\u010a\u010b\7t\2\2"+ - "\u010b\u010c\7t\2\2\u010c\u010d\7w\2\2\u010d\u010e\7r\2\2\u010e\u010f"+ - "\7v\2\2\u010f \3\2\2\2\u0110\u0111\7k\2\2\u0111\u0112\7h\2\2\u0112\"\3"+ - "\2\2\2\u0113\u0114\7g\2\2\u0114\u0115\7n\2\2\u0115\u0116\7u\2\2\u0116"+ - "\u0117\7g\2\2\u0117$\3\2\2\2\u0118\u0119\7y\2\2\u0119\u011a\7j\2\2\u011a"+ - "\u011b\7k\2\2\u011b\u011c\7n\2\2\u011c\u011d\7g\2\2\u011d&\3\2\2\2\u011e"+ - "\u011f\7f\2\2\u011f\u0120\7q\2\2\u0120(\3\2\2\2\u0121\u0122\7h\2\2\u0122"+ - "\u0123\7q\2\2\u0123\u0124\7t\2\2\u0124*\3\2\2\2\u0125\u0126\7t\2\2\u0126"+ - "\u0127\7g\2\2\u0127\u0128\7v\2\2\u0128\u0129\7w\2\2\u0129\u012a\7t\2\2"+ - "\u012a\u012b\7p\2\2\u012b,\3\2\2\2\u012c\u012d\7d\2\2\u012d\u012e\7t\2"+ - "\2\u012e\u012f\7g\2\2\u012f\u0130\7c\2\2\u0130\u0131\7m\2\2\u0131.\3\2"+ - "\2\2\u0132\u0133\7e\2\2\u0133\u0134\7q\2\2\u0134\u0135\7p\2\2\u0135\u0136"+ - "\7v\2\2\u0136\u0137\7k\2\2\u0137\u0138\7p\2\2\u0138\u0139\7w\2\2\u0139"+ - "\u013a\7g\2\2\u013a\60\3\2\2\2\u013b\u013c\7c\2\2\u013c\u013d\7u\2\2\u013d"+ - "\u013e\7o\2\2\u013e\62\3\2\2\2\u013f\u0140\7<\2\2\u0140\64\3\2\2\2\u0141"+ - "\u0142\7\60\2\2\u0142\u0143\7\60\2\2\u0143\66\3\2\2\2\u0144\u0145\7u\2"+ - "\2\u0145\u0146\7k\2\2\u0146\u0147\7i\2\2\u0147\u0148\7p\2\2\u0148\u0149"+ - "\7g\2\2\u0149\u014a\7f\2\2\u014a8\3\2\2\2\u014b\u014c\7,\2\2\u014c:\3"+ - "\2\2\2\u014d\u014e\7]\2\2\u014e<\3\2\2\2\u014f\u0150\7_\2\2\u0150>\3\2"+ - "\2\2\u0151\u0152\7/\2\2\u0152\u0153\7/\2\2\u0153@\3\2\2\2\u0154\u0155"+ - "\7-\2\2\u0155\u0156\7-\2\2\u0156B\3\2\2\2\u0157\u0158\7-\2\2\u0158D\3"+ - "\2\2\2\u0159\u015a\7/\2\2\u015aF\3\2\2\2\u015b\u015c\7#\2\2\u015cH\3\2"+ - "\2\2\u015d\u015e\7(\2\2\u015eJ\3\2\2\2\u015f\u0160\7\u0080\2\2\u0160L"+ - "\3\2\2\2\u0161\u0162\7@\2\2\u0162\u0163\7@\2\2\u0163N\3\2\2\2\u0164\u0165"+ - "\7>\2\2\u0165\u0166\7>\2\2\u0166P\3\2\2\2\u0167\u0168\7\61\2\2\u0168R"+ - "\3\2\2\2\u0169\u016a\7\'\2\2\u016aT\3\2\2\2\u016b\u016c\7>\2\2\u016cV"+ - "\3\2\2\2\u016d\u016e\7@\2\2\u016eX\3\2\2\2\u016f\u0170\7?\2\2\u0170\u0171"+ - "\7?\2\2\u0171Z\3\2\2\2\u0172\u0173\7#\2\2\u0173\u0174\7?\2\2\u0174\\\3"+ - "\2\2\2\u0175\u0176\7>\2\2\u0176\u0177\7?\2\2\u0177^\3\2\2\2\u0178\u0179"+ - "\7@\2\2\u0179\u017a\7?\2\2\u017a`\3\2\2\2\u017b\u017c\7`\2\2\u017cb\3"+ - "\2\2\2\u017d\u017e\7~\2\2\u017ed\3\2\2\2\u017f\u0180\7(\2\2\u0180\u0181"+ - "\7(\2\2\u0181f\3\2\2\2\u0182\u0183\7~\2\2\u0183\u0184\7~\2\2\u0184h\3"+ - "\2\2\2\u0185\u0186\7A\2\2\u0186j\3\2\2\2\u0187\u0188\7-\2\2\u0188\u0189"+ - "\7?\2\2\u0189l\3\2\2\2\u018a\u018b\7/\2\2\u018b\u018c\7?\2\2\u018cn\3"+ - "\2\2\2\u018d\u018e\7,\2\2\u018e\u018f\7?\2\2\u018fp\3\2\2\2\u0190\u0191"+ - "\7\61\2\2\u0191\u0192\7?\2\2\u0192r\3\2\2\2\u0193\u0194\7\'\2\2\u0194"+ - "\u0195\7?\2\2\u0195t\3\2\2\2\u0196\u0197\7>\2\2\u0197\u0198\7>\2\2\u0198"+ - "\u0199\7?\2\2\u0199v\3\2\2\2\u019a\u019b\7@\2\2\u019b\u019c\7@\2\2\u019c"+ - "\u019d\7?\2\2\u019dx\3\2\2\2\u019e\u019f\7(\2\2\u019f\u01a0\7?\2\2\u01a0"+ - "z\3\2\2\2\u01a1\u01a2\7~\2\2\u01a2\u01a3\7?\2\2\u01a3|\3\2\2\2\u01a4\u01a5"+ - "\7`\2\2\u01a5\u01a6\7?\2\2\u01a6~\3\2\2\2\u01a7\u01a8\7m\2\2\u01a8\u01a9"+ - "\7k\2\2\u01a9\u01aa\7e\2\2\u01aa\u01ab\7m\2\2\u01ab\u01ac\7c\2\2\u01ac"+ - "\u01ad\7u\2\2\u01ad\u01ae\7o\2\2\u01ae\u0080\3\2\2\2\u01af\u01b0\7t\2"+ - "\2\u01b0\u01b1\7g\2\2\u01b1\u01b2\7u\2\2\u01b2\u01b3\7q\2\2\u01b3\u01b4"+ - "\7w\2\2\u01b4\u01b5\7t\2\2\u01b5\u01b6\7e\2\2\u01b6\u01b7\7g\2\2\u01b7"+ - "\u0082\3\2\2\2\u01b8\u01b9\7w\2\2\u01b9\u01ba\7u\2\2\u01ba\u01bb\7g\2"+ - "\2\u01bb\u01bc\7u\2\2\u01bc\u0084\3\2\2\2\u01bd\u01be\7e\2\2\u01be\u01bf"+ - "\7n\2\2\u01bf\u01c0\7q\2\2\u01c0\u01c1\7d\2\2\u01c1\u01c2\7d\2\2\u01c2"+ - "\u01c3\7g\2\2\u01c3\u01c4\7t\2\2\u01c4\u01c5\7u\2\2\u01c5\u0086\3\2\2"+ - "\2\u01c6\u01c7\7d\2\2\u01c7\u01c8\7{\2\2\u01c8\u01c9\7v\2\2\u01c9\u01ca"+ - "\7g\2\2\u01ca\u01cb\7u\2\2\u01cb\u0088\3\2\2\2\u01cc\u01cd\7e\2\2\u01cd"+ - "\u01ce\7{\2\2\u01ce\u01cf\7e\2\2\u01cf\u01d0\7n\2\2\u01d0\u01d1\7g\2\2"+ - "\u01d1\u01d2\7u\2\2\u01d2\u008a\3\2\2\2\u01d3\u01d4\7r\2\2\u01d4\u01d5"+ - "\7e\2\2\u01d5\u008c\3\2\2\2\u01d6\u01d7\7\60\2\2\u01d7\u01d8\7d\2\2\u01d8"+ - "\u01d9\7{\2\2\u01d9\u01da\7v\2\2\u01da\u01db\7g\2\2\u01db\u008e\3\2\2"+ - "\2\u01dc\u01dd\7%\2\2\u01dd\u0090\3\2\2\2\u01de\u01df\7\60\2\2\u01df\u0092"+ - "\3\2\2\2\u01e0\u01e1\7d\2\2\u01e1\u01e2\7t\2\2\u01e2\u02bf\7m\2\2\u01e3"+ - "\u01e4\7q\2\2\u01e4\u01e5\7t\2\2\u01e5\u02bf\7c\2\2\u01e6\u01e7\7m\2\2"+ - "\u01e7\u01e8\7k\2\2\u01e8\u02bf\7n\2\2\u01e9\u01ea\7u\2\2\u01ea\u01eb"+ - "\7n\2\2\u01eb\u02bf\7q\2\2\u01ec\u01ed\7p\2\2\u01ed\u01ee\7q\2\2\u01ee"+ - "\u02bf\7r\2\2\u01ef\u01f0\7c\2\2\u01f0\u01f1\7u\2\2\u01f1\u02bf\7n\2\2"+ - "\u01f2\u01f3\7r\2\2\u01f3\u01f4\7j\2\2\u01f4\u02bf\7r\2\2\u01f5\u01f6"+ - "\7c\2\2\u01f6\u01f7\7p\2\2\u01f7\u02bf\7e\2\2\u01f8\u01f9\7d\2\2\u01f9"+ - "\u01fa\7r\2\2\u01fa\u02bf\7n\2\2\u01fb\u01fc\7e\2\2\u01fc\u01fd\7n\2\2"+ - "\u01fd\u02bf\7e\2\2\u01fe\u01ff\7l\2\2\u01ff\u0200\7u\2\2\u0200\u02bf"+ - "\7t\2\2\u0201\u0202\7c\2\2\u0202\u0203\7p\2\2\u0203\u02bf\7f\2\2\u0204"+ - "\u0205\7t\2\2\u0205\u0206\7n\2\2\u0206\u02bf\7c\2\2\u0207\u0208\7d\2\2"+ - "\u0208\u0209\7k\2\2\u0209\u02bf\7v\2\2\u020a\u020b\7t\2\2\u020b\u020c"+ - "\7q\2\2\u020c\u02bf\7n\2\2\u020d\u020e\7r\2\2\u020e\u020f\7n\2\2\u020f"+ - "\u02bf\7c\2\2\u0210\u0211\7r\2\2\u0211\u0212\7n\2\2\u0212\u02bf\7r\2\2"+ - "\u0213\u0214\7d\2\2\u0214\u0215\7o\2\2\u0215\u02bf\7k\2\2\u0216\u0217"+ - "\7u\2\2\u0217\u0218\7g\2\2\u0218\u02bf\7e\2\2\u0219\u021a\7t\2\2\u021a"+ - "\u021b\7v\2\2\u021b\u02bf\7k\2\2\u021c\u021d\7g\2\2\u021d\u021e\7q\2\2"+ - "\u021e\u02bf\7t\2\2\u021f\u0220\7u\2\2\u0220\u0221\7t\2\2\u0221\u02bf"+ - "\7g\2\2\u0222\u0223\7n\2\2\u0223\u0224\7u\2\2\u0224\u02bf\7t\2\2\u0225"+ - "\u0226\7r\2\2\u0226\u0227\7j\2\2\u0227\u02bf\7c\2\2\u0228\u0229\7c\2\2"+ - "\u0229\u022a\7n\2\2\u022a\u02bf\7t\2\2\u022b\u022c\7l\2\2\u022c\u022d"+ - "\7o\2\2\u022d\u02bf\7r\2\2\u022e\u022f\7d\2\2\u022f\u0230\7x\2\2\u0230"+ - "\u02bf\7e\2\2\u0231\u0232\7e\2\2\u0232\u0233\7n\2\2\u0233\u02bf\7k\2\2"+ - "\u0234\u0235\7t\2\2\u0235\u0236\7v\2\2\u0236\u02bf\7u\2\2\u0237\u0238"+ - "\7c\2\2\u0238\u0239\7f\2\2\u0239\u02bf\7e\2\2\u023a\u023b\7t\2\2\u023b"+ - "\u023c\7t\2\2\u023c\u02bf\7c\2\2\u023d\u023e\7d\2\2\u023e\u023f\7x\2\2"+ - "\u023f\u02bf\7u\2\2\u0240\u0241\7u\2\2\u0241\u0242\7g\2\2\u0242\u02bf"+ - "\7k\2\2\u0243\u0244\7u\2\2\u0244\u0245\7c\2\2\u0245\u02bf\7z\2\2\u0246"+ - "\u0247\7u\2\2\u0247\u0248\7v\2\2\u0248\u02bf\7{\2\2\u0249\u024a\7u\2\2"+ - "\u024a\u024b\7v\2\2\u024b\u02bf\7c\2\2\u024c\u024d\7u\2\2\u024d\u024e"+ - "\7v\2\2\u024e\u02bf\7z\2\2\u024f\u0250\7f\2\2\u0250\u0251\7g\2\2\u0251"+ - "\u02bf\7{\2\2\u0252\u0253\7v\2\2\u0253\u0254\7z\2\2\u0254\u02bf\7c\2\2"+ - "\u0255\u0256\7z\2\2\u0256\u0257\7c\2\2\u0257\u02bf\7c\2\2\u0258\u0259"+ - "\7d\2\2\u0259\u025a\7e\2\2\u025a\u02bf\7e\2\2\u025b\u025c\7c\2\2\u025c"+ - "\u025d\7j\2\2\u025d\u02bf\7z\2\2\u025e\u025f\7v\2\2\u025f\u0260\7{\2\2"+ - "\u0260\u02bf\7c\2\2\u0261\u0262\7v\2\2\u0262\u0263\7z\2\2\u0263\u02bf"+ - "\7u\2\2\u0264\u0265\7v\2\2\u0265\u0266\7c\2\2\u0266\u02bf\7u\2\2\u0267"+ - "\u0268\7u\2\2\u0268\u0269\7j\2\2\u0269\u02bf\7{\2\2\u026a\u026b\7u\2\2"+ - "\u026b\u026c\7j\2\2\u026c\u02bf\7z\2\2\u026d\u026e\7n\2\2\u026e\u026f"+ - "\7f\2\2\u026f\u02bf\7{\2\2\u0270\u0271\7n\2\2\u0271\u0272\7f\2\2\u0272"+ - "\u02bf\7c\2\2\u0273\u0274\7n\2\2\u0274\u0275\7f\2\2\u0275\u02bf\7z\2\2"+ - "\u0276\u0277\7n\2\2\u0277\u0278\7c\2\2\u0278\u02bf\7z\2\2\u0279\u027a"+ - "\7v\2\2\u027a\u027b\7c\2\2\u027b\u02bf\7{\2\2\u027c\u027d\7v\2\2\u027d"+ - "\u027e\7c\2\2\u027e\u02bf\7z\2\2\u027f\u0280\7d\2\2\u0280\u0281\7e\2\2"+ - "\u0281\u02bf\7u\2\2\u0282\u0283\7e\2\2\u0283\u0284\7n\2\2\u0284\u02bf"+ - "\7x\2\2\u0285\u0286\7v\2\2\u0286\u0287\7u\2\2\u0287\u02bf\7z\2\2\u0288"+ - "\u0289\7n\2\2\u0289\u028a\7c\2\2\u028a\u02bf\7u\2\2\u028b\u028c\7e\2\2"+ - "\u028c\u028d\7r\2\2\u028d\u02bf\7{\2\2\u028e\u028f\7e\2\2\u028f\u0290"+ - "\7o\2\2\u0290\u02bf\7r\2\2\u0291\u0292\7e\2\2\u0292\u0293\7r\2\2\u0293"+ - "\u02bf\7z\2\2\u0294\u0295\7f\2\2\u0295\u0296\7e\2\2\u0296\u02bf\7r\2\2"+ - "\u0297\u0298\7f\2\2\u0298\u0299\7g\2\2\u0299\u02bf\7e\2\2\u029a\u029b"+ - "\7k\2\2\u029b\u029c\7p\2\2\u029c\u02bf\7e\2\2\u029d\u029e\7c\2\2\u029e"+ - "\u029f\7z\2\2\u029f\u02bf\7u\2\2\u02a0\u02a1\7d\2\2\u02a1\u02a2\7p\2\2"+ - "\u02a2\u02bf\7g\2\2\u02a3\u02a4\7e\2\2\u02a4\u02a5\7n\2\2\u02a5\u02bf"+ - "\7f\2\2\u02a6\u02a7\7u\2\2\u02a7\u02a8\7d\2\2\u02a8\u02bf\7e\2\2\u02a9"+ - "\u02aa\7k\2\2\u02aa\u02ab\7u\2\2\u02ab\u02bf\7e\2\2\u02ac\u02ad\7k\2\2"+ - "\u02ad\u02ae\7p\2\2\u02ae\u02bf\7z\2\2\u02af\u02b0\7d\2\2\u02b0\u02b1"+ - "\7g\2\2\u02b1\u02bf\7s\2\2\u02b2\u02b3\7u\2\2\u02b3\u02b4\7g\2\2\u02b4"+ - "\u02bf\7f\2\2\u02b5\u02b6\7f\2\2\u02b6\u02b7\7g\2\2\u02b7\u02bf\7z\2\2"+ - "\u02b8\u02b9\7k\2\2\u02b9\u02ba\7p\2\2\u02ba\u02bf\7{\2\2\u02bb\u02bc"+ - "\7t\2\2\u02bc\u02bd\7q\2\2\u02bd\u02bf\7t\2\2\u02be\u01e0\3\2\2\2\u02be"+ - "\u01e3\3\2\2\2\u02be\u01e6\3\2\2\2\u02be\u01e9\3\2\2\2\u02be\u01ec\3\2"+ - "\2\2\u02be\u01ef\3\2\2\2\u02be\u01f2\3\2\2\2\u02be\u01f5\3\2\2\2\u02be"+ - "\u01f8\3\2\2\2\u02be\u01fb\3\2\2\2\u02be\u01fe\3\2\2\2\u02be\u0201\3\2"+ - "\2\2\u02be\u0204\3\2\2\2\u02be\u0207\3\2\2\2\u02be\u020a\3\2\2\2\u02be"+ - "\u020d\3\2\2\2\u02be\u0210\3\2\2\2\u02be\u0213\3\2\2\2\u02be\u0216\3\2"+ - "\2\2\u02be\u0219\3\2\2\2\u02be\u021c\3\2\2\2\u02be\u021f\3\2\2\2\u02be"+ - "\u0222\3\2\2\2\u02be\u0225\3\2\2\2\u02be\u0228\3\2\2\2\u02be\u022b\3\2"+ - "\2\2\u02be\u022e\3\2\2\2\u02be\u0231\3\2\2\2\u02be\u0234\3\2\2\2\u02be"+ - "\u0237\3\2\2\2\u02be\u023a\3\2\2\2\u02be\u023d\3\2\2\2\u02be\u0240\3\2"+ - "\2\2\u02be\u0243\3\2\2\2\u02be\u0246\3\2\2\2\u02be\u0249\3\2\2\2\u02be"+ - "\u024c\3\2\2\2\u02be\u024f\3\2\2\2\u02be\u0252\3\2\2\2\u02be\u0255\3\2"+ - "\2\2\u02be\u0258\3\2\2\2\u02be\u025b\3\2\2\2\u02be\u025e\3\2\2\2\u02be"+ - "\u0261\3\2\2\2\u02be\u0264\3\2\2\2\u02be\u0267\3\2\2\2\u02be\u026a\3\2"+ - "\2\2\u02be\u026d\3\2\2\2\u02be\u0270\3\2\2\2\u02be\u0273\3\2\2\2\u02be"+ - "\u0276\3\2\2\2\u02be\u0279\3\2\2\2\u02be\u027c\3\2\2\2\u02be\u027f\3\2"+ - "\2\2\u02be\u0282\3\2\2\2\u02be\u0285\3\2\2\2\u02be\u0288\3\2\2\2\u02be"+ - "\u028b\3\2\2\2\u02be\u028e\3\2\2\2\u02be\u0291\3\2\2\2\u02be\u0294\3\2"+ - "\2\2\u02be\u0297\3\2\2\2\u02be\u029a\3\2\2\2\u02be\u029d\3\2\2\2\u02be"+ - "\u02a0\3\2\2\2\u02be\u02a3\3\2\2\2\u02be\u02a6\3\2\2\2\u02be\u02a9\3\2"+ - "\2\2\u02be\u02ac\3\2\2\2\u02be\u02af\3\2\2\2\u02be\u02b2\3\2\2\2\u02be"+ - "\u02b5\3\2\2\2\u02be\u02b8\3\2\2\2\u02be\u02bb\3\2\2\2\u02bf\u0094\3\2"+ - "\2\2\u02c0\u02c1\7}\2\2\u02c1\u02c2\7}\2\2\u02c2\u02c6\3\2\2\2\u02c3\u02c5"+ - "\13\2\2\2\u02c4\u02c3\3\2\2\2\u02c5\u02c8\3\2\2\2\u02c6\u02c7\3\2\2\2"+ - "\u02c6\u02c4\3\2\2\2\u02c7\u02c9\3\2\2\2\u02c8\u02c6\3\2\2\2\u02c9\u02ca"+ - "\7\177\2\2\u02ca\u02cb\7\177\2\2\u02cb\u0096\3\2\2\2\u02cc\u02cd\7d\2"+ - "\2\u02cd\u02ce\7{\2\2\u02ce\u02cf\7v\2\2\u02cf\u02e2\7g\2\2\u02d0\u02d1"+ - "\7y\2\2\u02d1\u02d2\7q\2\2\u02d2\u02d3\7t\2\2\u02d3\u02e2\7f\2\2\u02d4"+ - "\u02d5\7f\2\2\u02d5\u02d6\7y\2\2\u02d6\u02d7\7q\2\2\u02d7\u02d8\7t\2\2"+ - "\u02d8\u02e2\7f\2\2\u02d9\u02da\7d\2\2\u02da\u02db\7q\2\2\u02db\u02dc"+ - "\7q\2\2\u02dc\u02e2\7n\2\2\u02dd\u02de\7x\2\2\u02de\u02df\7q\2\2\u02df"+ - "\u02e0\7k\2\2\u02e0\u02e2\7f\2\2\u02e1\u02cc\3\2\2\2\u02e1\u02d0\3\2\2"+ - "\2\u02e1\u02d4\3\2\2\2\u02e1\u02d9\3\2\2\2\u02e1\u02dd\3\2\2\2\u02e2\u0098"+ - "\3\2\2\2\u02e3\u02e9\7$\2\2\u02e4\u02e5\7^\2\2\u02e5\u02e8\7$\2\2\u02e6"+ - "\u02e8\n\2\2\2\u02e7\u02e4\3\2\2\2\u02e7\u02e6\3\2\2\2\u02e8\u02eb\3\2"+ - "\2\2\u02e9\u02e7\3\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02ec\3\2\2\2\u02eb"+ - "\u02e9\3\2\2\2\u02ec\u02ed\7$\2\2\u02ed\u009a\3\2\2\2\u02ee\u02f2\7)\2"+ - "\2\u02ef\u02f0\7^\2\2\u02f0\u02f3\7)\2\2\u02f1\u02f3\n\3\2\2\u02f2\u02ef"+ - "\3\2\2\2\u02f2\u02f1\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4\u02f5\7)\2\2\u02f5"+ - "\u009c\3\2\2\2\u02f6\u02f7\7v\2\2\u02f7\u02f8\7t\2\2\u02f8\u02f9\7w\2"+ - "\2\u02f9\u0300\7g\2\2\u02fa\u02fb\7h\2\2\u02fb\u02fc\7c\2\2\u02fc\u02fd"+ - "\7n\2\2\u02fd\u02fe\7u\2\2\u02fe\u0300\7g\2\2\u02ff\u02f6\3\2\2\2\u02ff"+ - "\u02fa\3\2\2\2\u0300\u009e\3\2\2\2\u0301\u0304\5\u00a1Q\2\u0302\u0304"+ - "\5\u00a9U\2\u0303\u0301\3\2\2\2\u0303\u0302\3\2\2\2\u0304\u00a0\3\2\2"+ - "\2\u0305\u0309\5\u00a3R\2\u0306\u0309\5\u00a5S\2\u0307\u0309\5\u00a7T"+ - "\2\u0308\u0305\3\2\2\2\u0308\u0306\3\2\2\2\u0308\u0307\3\2\2\2\u0309\u00a2"+ - "\3\2\2\2\u030a\u0310\7\'\2\2\u030b\u030c\7\62\2\2\u030c\u0310\7d\2\2\u030d"+ - "\u030e\7\62\2\2\u030e\u0310\7D\2\2\u030f\u030a\3\2\2\2\u030f\u030b\3\2"+ - "\2\2\u030f\u030d\3\2\2\2\u0310\u0314\3\2\2\2\u0311\u0313\5\u00b1Y\2\u0312"+ - "\u0311\3\2\2\2\u0313\u0316\3\2\2\2\u0314\u0312\3\2\2\2\u0314\u0315\3\2"+ - "\2\2\u0315\u0317\3\2\2\2\u0316\u0314\3\2\2\2\u0317\u0319\7\60\2\2\u0318"+ - "\u031a\5\u00b1Y\2\u0319\u0318\3\2\2\2\u031a\u031b\3\2\2\2\u031b\u0319"+ - "\3\2\2\2\u031b\u031c\3\2\2\2\u031c\u00a4\3\2\2\2\u031d\u031f\5\u00b3Z"+ - "\2\u031e\u031d\3\2\2\2\u031f\u0322\3\2\2\2\u0320\u031e\3\2\2\2\u0320\u0321"+ - "\3\2\2\2\u0321\u0323\3\2\2\2\u0322\u0320\3\2\2\2\u0323\u0325\7\60\2\2"+ - "\u0324\u0326\5\u00b3Z\2\u0325\u0324\3\2\2\2\u0326\u0327\3\2\2\2\u0327"+ - "\u0325\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u00a6\3\2\2\2\u0329\u032f\7&"+ - "\2\2\u032a\u032b\7\62\2\2\u032b\u032f\7z\2\2\u032c\u032d\7\62\2\2\u032d"+ - "\u032f\7Z\2\2\u032e\u0329\3\2\2\2\u032e\u032a\3\2\2\2\u032e\u032c\3\2"+ - "\2\2\u032f\u0333\3\2\2\2\u0330\u0332\5\u00b5[\2\u0331\u0330\3\2\2\2\u0332"+ - "\u0335\3\2\2\2\u0333\u0331\3\2\2\2\u0333\u0334\3\2\2\2\u0334\u0336\3\2"+ - "\2\2\u0335\u0333\3\2\2\2\u0336\u0338\7\60\2\2\u0337\u0339\5\u00b5[\2\u0338"+ - "\u0337\3\2\2\2\u0339\u033a\3\2\2\2\u033a\u0338\3\2\2\2\u033a\u033b\3\2"+ - "\2\2\u033b\u00a8\3\2\2\2\u033c\u0340\5\u00adW\2\u033d\u0340\5\u00afX\2"+ - "\u033e\u0340\5\u00abV\2\u033f\u033c\3\2\2\2\u033f\u033d\3\2\2\2\u033f"+ - "\u033e\3\2\2\2\u0340\u00aa\3\2\2\2\u0341\u0342\7\62\2\2\u0342\u0344\t"+ - "\4\2\2\u0343\u0345\5\u00b1Y\2\u0344\u0343\3\2\2\2\u0345\u0346\3\2\2\2"+ - "\u0346\u0344\3\2\2\2\u0346\u0347\3\2\2\2\u0347\u034f\3\2\2\2\u0348\u034a"+ - "\7\'\2\2\u0349\u034b\5\u00b1Y\2\u034a\u0349\3\2\2\2\u034b\u034c\3\2\2"+ - "\2\u034c\u034a\3\2\2\2\u034c\u034d\3\2\2\2\u034d\u034f\3\2\2\2\u034e\u0341"+ - "\3\2\2\2\u034e\u0348\3\2\2\2\u034f\u00ac\3\2\2\2\u0350\u0352\5\u00b3Z"+ - "\2\u0351\u0350\3\2\2\2\u0352\u0353\3\2\2\2\u0353\u0351\3\2\2\2\u0353\u0354"+ - "\3\2\2\2\u0354\u00ae\3\2\2\2\u0355\u035b\7&\2\2\u0356\u0357\7\62\2\2\u0357"+ - "\u035b\7z\2\2\u0358\u0359\7\62\2\2\u0359\u035b\7Z\2\2\u035a\u0355\3\2"+ - "\2\2\u035a\u0356\3\2\2\2\u035a\u0358\3\2\2\2\u035b\u035d\3\2\2\2\u035c"+ - "\u035e\5\u00b5[\2\u035d\u035c\3\2\2\2\u035e\u035f\3\2\2\2\u035f\u035d"+ - "\3\2\2\2\u035f\u0360\3\2\2\2\u0360\u00b0\3\2\2\2\u0361\u0362\t\5\2\2\u0362"+ - "\u00b2\3\2\2\2\u0363\u0364\t\6\2\2\u0364\u00b4\3\2\2\2\u0365\u0366\t\7"+ - "\2\2\u0366\u00b6\3\2\2\2\u0367\u036b\5\u00b9]\2\u0368\u036a\5\u00bb^\2"+ - "\u0369\u0368\3\2\2\2\u036a\u036d\3\2\2\2\u036b\u0369\3\2\2\2\u036b\u036c"+ - "\3\2\2\2\u036c\u00b8\3\2\2\2\u036d\u036b\3\2\2\2\u036e\u036f\t\b\2\2\u036f"+ - "\u00ba\3\2\2\2\u0370\u0371\t\t\2\2\u0371\u00bc\3\2\2\2\u0372\u0376\7#"+ - "\2\2\u0373\u0375\5\u00bb^\2\u0374\u0373\3\2\2\2\u0375\u0378\3\2\2\2\u0376"+ - "\u0374\3\2\2\2\u0376\u0377\3\2\2\2\u0377\u037a\3\2\2\2\u0378\u0376\3\2"+ - "\2\2\u0379\u037b\t\n\2\2\u037a\u0379\3\2\2\2\u037b\u037c\3\2\2\2\u037c"+ - "\u037a\3\2\2\2\u037c\u037d\3\2\2\2\u037d\u00be\3\2\2\2\u037e\u0380\t\13"+ - "\2\2\u037f\u037e\3\2\2\2\u0380\u0381\3\2\2\2\u0381\u037f\3\2\2\2\u0381"+ - "\u0382\3\2\2\2\u0382\u0383\3\2\2\2\u0383\u0384\b`\2\2\u0384\u00c0\3\2"+ - "\2\2\u0385\u0386\7\61\2\2\u0386\u0387\7\61\2\2\u0387\u038b\3\2\2\2\u0388"+ - "\u038a\n\f\2\2\u0389\u0388\3\2\2\2\u038a\u038d\3\2\2\2\u038b\u0389\3\2"+ - "\2\2\u038b\u038c\3\2\2\2\u038c\u038e\3\2\2\2\u038d\u038b\3\2\2\2\u038e"+ - "\u038f\ba\3\2\u038f\u00c2\3\2\2\2\u0390\u0391\7\61\2\2\u0391\u0392\7,"+ - "\2\2\u0392\u0396\3\2\2\2\u0393\u0395\13\2\2\2\u0394\u0393\3\2\2\2\u0395"+ - "\u0398\3\2\2\2\u0396\u0397\3\2\2\2\u0396\u0394\3\2\2\2\u0397\u0399\3\2"+ - "\2\2\u0398\u0396\3\2\2\2\u0399\u039a\7,\2\2\u039a\u039b\7\61\2\2\u039b"+ - "\u039c\3\2\2\2\u039c\u039d\bb\3\2\u039d\u00c4\3\2\2\2!\2\u02be\u02c6\u02e1"+ - "\u02e7\u02e9\u02f2\u02ff\u0303\u0308\u030f\u0314\u031b\u0320\u0327\u032e"+ - "\u0333\u033a\u033f\u0346\u034c\u034e\u0353\u035a\u035f\u036b\u0376\u037c"+ - "\u0381\u038b\u0396\4\2\3\2\2\4\2"; + "`\t`\4a\ta\4b\tb\4c\tc\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\5"+ + "\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13"+ + "\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r"+ + "\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17"+ + "\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ + "\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23"+ + "\3\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26"+ + "\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ + "\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34"+ + "\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\36"+ + "\3\36\3\37\3\37\3 \3 \3!\3!\3!\3\"\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'"+ + "\3\'\3(\3(\3(\3)\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3/\3/\3/\3\60"+ + "\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\64\3\64\3\64\3\65\3\65"+ + "\3\65\3\66\3\66\3\67\3\67\3\67\38\38\38\39\39\39\3:\3:\3:\3;\3;\3;\3<"+ + "\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3?\3?\3?\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A"+ + "\3A\3B\3B\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3D"+ + "\3D\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3G\3G\3G\3H\3H\3H\3H\3H\3H"+ + "\3I\3I\3J\3J\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K"+ + "\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\5K\u02ca\nK"+ + "\3L\3L\3L\3L\7L\u02d0\nL\fL\16L\u02d3\13L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3"+ + "M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3M\3"+ + "M\3M\3M\3M\3M\3M\3M\3M\5M\u02fd\nM\3N\3N\3N\3N\7N\u0303\nN\fN\16N\u0306"+ + "\13N\3N\3N\3O\3O\3O\3O\5O\u030e\nO\3O\3O\3P\3P\3P\3P\3P\3P\3P\3P\3P\5"+ + "P\u031b\nP\3Q\3Q\5Q\u031f\nQ\3R\3R\3R\5R\u0324\nR\3S\3S\3S\3S\3S\5S\u032b"+ + "\nS\3S\7S\u032e\nS\fS\16S\u0331\13S\3S\3S\6S\u0335\nS\rS\16S\u0336\3T"+ + "\7T\u033a\nT\fT\16T\u033d\13T\3T\3T\6T\u0341\nT\rT\16T\u0342\3U\3U\3U"+ + "\3U\3U\5U\u034a\nU\3U\7U\u034d\nU\fU\16U\u0350\13U\3U\3U\6U\u0354\nU\r"+ + "U\16U\u0355\3V\3V\3V\5V\u035b\nV\3W\3W\3W\6W\u0360\nW\rW\16W\u0361\3W"+ + "\3W\6W\u0366\nW\rW\16W\u0367\5W\u036a\nW\3X\6X\u036d\nX\rX\16X\u036e\3"+ + "Y\3Y\3Y\3Y\3Y\5Y\u0376\nY\3Y\6Y\u0379\nY\rY\16Y\u037a\3Z\3Z\3[\3[\3\\"+ + "\3\\\3]\3]\7]\u0385\n]\f]\16]\u0388\13]\3^\3^\3_\3_\3`\3`\7`\u0390\n`"+ + "\f`\16`\u0393\13`\3`\6`\u0396\n`\r`\16`\u0397\3a\6a\u039b\na\ra\16a\u039c"+ + "\3a\3a\3b\3b\3b\3b\7b\u03a5\nb\fb\16b\u03a8\13b\3b\3b\3c\3c\3c\3c\7c\u03b0"+ + "\nc\fc\16c\u03b3\13c\3c\3c\3c\3c\3c\4\u02d1\u03b1\2d\3\3\5\4\7\5\t\6\13"+ + "\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'"+ + "\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'"+ + "M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177"+ + "A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093"+ + "K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7"+ + "U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3\2\u00b5\2\u00b7\2\u00b9[\u00bb"+ + "\2\u00bd\2\u00bf\\\u00c1]\u00c3^\u00c5_\3\2\r\3\2$$\3\2))\4\2DDdd\3\2"+ + "\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\4\2--//\6\2\13\f"+ + "\17\17\"\"\u00a2\u00a2\4\2\f\f\17\17\2\u0425\2\3\3\2\2\2\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\2"+ + "M\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\2"+ + "s\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\u00b9\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\3\u00c7\3\2\2"+ + "\2\5\u00ce\3\2\2\2\7\u00d0\3\2\2\2\t\u00d2\3\2\2\2\13\u00d4\3\2\2\2\r"+ + "\u00d6\3\2\2\2\17\u00d8\3\2\2\2\21\u00da\3\2\2\2\23\u00dc\3\2\2\2\25\u00e2"+ + "\3\2\2\2\27\u00e9\3\2\2\2\31\u00ef\3\2\2\2\33\u00f8\3\2\2\2\35\u00ff\3"+ + "\2\2\2\37\u0108\3\2\2\2!\u0112\3\2\2\2#\u0115\3\2\2\2%\u011a\3\2\2\2\'"+ + "\u0120\3\2\2\2)\u0123\3\2\2\2+\u0127\3\2\2\2-\u012e\3\2\2\2/\u0134\3\2"+ + "\2\2\61\u013d\3\2\2\2\63\u0141\3\2\2\2\65\u0143\3\2\2\2\67\u0146\3\2\2"+ + "\29\u014d\3\2\2\2;\u0156\3\2\2\2=\u0158\3\2\2\2?\u015a\3\2\2\2A\u015c"+ + "\3\2\2\2C\u015f\3\2\2\2E\u0162\3\2\2\2G\u0164\3\2\2\2I\u0166\3\2\2\2K"+ + "\u0168\3\2\2\2M\u016a\3\2\2\2O\u016c\3\2\2\2Q\u016f\3\2\2\2S\u0172\3\2"+ + "\2\2U\u0174\3\2\2\2W\u0176\3\2\2\2Y\u0178\3\2\2\2[\u017a\3\2\2\2]\u017d"+ + "\3\2\2\2_\u0180\3\2\2\2a\u0183\3\2\2\2c\u0186\3\2\2\2e\u0188\3\2\2\2g"+ + "\u018a\3\2\2\2i\u018d\3\2\2\2k\u0190\3\2\2\2m\u0192\3\2\2\2o\u0195\3\2"+ + "\2\2q\u0198\3\2\2\2s\u019b\3\2\2\2u\u019e\3\2\2\2w\u01a1\3\2\2\2y\u01a5"+ + "\3\2\2\2{\u01a9\3\2\2\2}\u01ac\3\2\2\2\177\u01af\3\2\2\2\u0081\u01b2\3"+ + "\2\2\2\u0083\u01ba\3\2\2\2\u0085\u01c3\3\2\2\2\u0087\u01c8\3\2\2\2\u0089"+ + "\u01d1\3\2\2\2\u008b\u01d7\3\2\2\2\u008d\u01de\3\2\2\2\u008f\u01e1\3\2"+ + "\2\2\u0091\u01e7\3\2\2\2\u0093\u01e9\3\2\2\2\u0095\u02c9\3\2\2\2\u0097"+ + "\u02cb\3\2\2\2\u0099\u02fc\3\2\2\2\u009b\u02fe\3\2\2\2\u009d\u0309\3\2"+ + "\2\2\u009f\u031a\3\2\2\2\u00a1\u031e\3\2\2\2\u00a3\u0323\3\2\2\2\u00a5"+ + "\u032a\3\2\2\2\u00a7\u033b\3\2\2\2\u00a9\u0349\3\2\2\2\u00ab\u035a\3\2"+ + "\2\2\u00ad\u0369\3\2\2\2\u00af\u036c\3\2\2\2\u00b1\u0375\3\2\2\2\u00b3"+ + "\u037c\3\2\2\2\u00b5\u037e\3\2\2\2\u00b7\u0380\3\2\2\2\u00b9\u0382\3\2"+ + "\2\2\u00bb\u0389\3\2\2\2\u00bd\u038b\3\2\2\2\u00bf\u038d\3\2\2\2\u00c1"+ + "\u039a\3\2\2\2\u00c3\u03a0\3\2\2\2\u00c5\u03ab\3\2\2\2\u00c7\u00c8\7k"+ + "\2\2\u00c8\u00c9\7o\2\2\u00c9\u00ca\7r\2\2\u00ca\u00cb\7q\2\2\u00cb\u00cc"+ + "\7t\2\2\u00cc\u00cd\7v\2\2\u00cd\4\3\2\2\2\u00ce\u00cf\7?\2\2\u00cf\6"+ + "\3\2\2\2\u00d0\u00d1\7=\2\2\u00d1\b\3\2\2\2\u00d2\u00d3\7*\2\2\u00d3\n"+ + "\3\2\2\2\u00d4\u00d5\7+\2\2\u00d5\f\3\2\2\2\u00d6\u00d7\7}\2\2\u00d7\16"+ + "\3\2\2\2\u00d8\u00d9\7\177\2\2\u00d9\20\3\2\2\2\u00da\u00db\7.\2\2\u00db"+ + "\22\3\2\2\2\u00dc\u00dd\7e\2\2\u00dd\u00de\7q\2\2\u00de\u00df\7p\2\2\u00df"+ + "\u00e0\7u\2\2\u00e0\u00e1\7v\2\2\u00e1\24\3\2\2\2\u00e2\u00e3\7g\2\2\u00e3"+ + "\u00e4\7z\2\2\u00e4\u00e5\7v\2\2\u00e5\u00e6\7g\2\2\u00e6\u00e7\7t\2\2"+ + "\u00e7\u00e8\7p\2\2\u00e8\26\3\2\2\2\u00e9\u00ea\7c\2\2\u00ea\u00eb\7"+ + "n\2\2\u00eb\u00ec\7k\2\2\u00ec\u00ed\7i\2\2\u00ed\u00ee\7p\2\2\u00ee\30"+ + "\3\2\2\2\u00ef\u00f0\7t\2\2\u00f0\u00f1\7g\2\2\u00f1\u00f2\7i\2\2\u00f2"+ + "\u00f3\7k\2\2\u00f3\u00f4\7u\2\2\u00f4\u00f5\7v\2\2\u00f5\u00f6\7g\2\2"+ + "\u00f6\u00f7\7t\2\2\u00f7\32\3\2\2\2\u00f8\u00f9\7k\2\2\u00f9\u00fa\7"+ + "p\2\2\u00fa\u00fb\7n\2\2\u00fb\u00fc\7k\2\2\u00fc\u00fd\7p\2\2\u00fd\u00fe"+ + "\7g\2\2\u00fe\34\3\2\2\2\u00ff\u0100\7x\2\2\u0100\u0101\7q\2\2\u0101\u0102"+ + "\7n\2\2\u0102\u0103\7c\2\2\u0103\u0104\7v\2\2\u0104\u0105\7k\2\2\u0105"+ + "\u0106\7n\2\2\u0106\u0107\7g\2\2\u0107\36\3\2\2\2\u0108\u0109\7k\2\2\u0109"+ + "\u010a\7p\2\2\u010a\u010b\7v\2\2\u010b\u010c\7g\2\2\u010c\u010d\7t\2\2"+ + "\u010d\u010e\7t\2\2\u010e\u010f\7w\2\2\u010f\u0110\7r\2\2\u0110\u0111"+ + "\7v\2\2\u0111 \3\2\2\2\u0112\u0113\7k\2\2\u0113\u0114\7h\2\2\u0114\"\3"+ + "\2\2\2\u0115\u0116\7g\2\2\u0116\u0117\7n\2\2\u0117\u0118\7u\2\2\u0118"+ + "\u0119\7g\2\2\u0119$\3\2\2\2\u011a\u011b\7y\2\2\u011b\u011c\7j\2\2\u011c"+ + "\u011d\7k\2\2\u011d\u011e\7n\2\2\u011e\u011f\7g\2\2\u011f&\3\2\2\2\u0120"+ + "\u0121\7f\2\2\u0121\u0122\7q\2\2\u0122(\3\2\2\2\u0123\u0124\7h\2\2\u0124"+ + "\u0125\7q\2\2\u0125\u0126\7t\2\2\u0126*\3\2\2\2\u0127\u0128\7t\2\2\u0128"+ + "\u0129\7g\2\2\u0129\u012a\7v\2\2\u012a\u012b\7w\2\2\u012b\u012c\7t\2\2"+ + "\u012c\u012d\7p\2\2\u012d,\3\2\2\2\u012e\u012f\7d\2\2\u012f\u0130\7t\2"+ + "\2\u0130\u0131\7g\2\2\u0131\u0132\7c\2\2\u0132\u0133\7m\2\2\u0133.\3\2"+ + "\2\2\u0134\u0135\7e\2\2\u0135\u0136\7q\2\2\u0136\u0137\7p\2\2\u0137\u0138"+ + "\7v\2\2\u0138\u0139\7k\2\2\u0139\u013a\7p\2\2\u013a\u013b\7w\2\2\u013b"+ + "\u013c\7g\2\2\u013c\60\3\2\2\2\u013d\u013e\7c\2\2\u013e\u013f\7u\2\2\u013f"+ + "\u0140\7o\2\2\u0140\62\3\2\2\2\u0141\u0142\7<\2\2\u0142\64\3\2\2\2\u0143"+ + "\u0144\7\60\2\2\u0144\u0145\7\60\2\2\u0145\66\3\2\2\2\u0146\u0147\7u\2"+ + "\2\u0147\u0148\7k\2\2\u0148\u0149\7i\2\2\u0149\u014a\7p\2\2\u014a\u014b"+ + "\7g\2\2\u014b\u014c\7f\2\2\u014c8\3\2\2\2\u014d\u014e\7w\2\2\u014e\u014f"+ + "\7p\2\2\u014f\u0150\7u\2\2\u0150\u0151\7k\2\2\u0151\u0152\7i\2\2\u0152"+ + "\u0153\7p\2\2\u0153\u0154\7g\2\2\u0154\u0155\7f\2\2\u0155:\3\2\2\2\u0156"+ + "\u0157\7,\2\2\u0157<\3\2\2\2\u0158\u0159\7]\2\2\u0159>\3\2\2\2\u015a\u015b"+ + "\7_\2\2\u015b@\3\2\2\2\u015c\u015d\7/\2\2\u015d\u015e\7/\2\2\u015eB\3"+ + "\2\2\2\u015f\u0160\7-\2\2\u0160\u0161\7-\2\2\u0161D\3\2\2\2\u0162\u0163"+ + "\7-\2\2\u0163F\3\2\2\2\u0164\u0165\7/\2\2\u0165H\3\2\2\2\u0166\u0167\7"+ + "#\2\2\u0167J\3\2\2\2\u0168\u0169\7(\2\2\u0169L\3\2\2\2\u016a\u016b\7\u0080"+ + "\2\2\u016bN\3\2\2\2\u016c\u016d\7@\2\2\u016d\u016e\7@\2\2\u016eP\3\2\2"+ + "\2\u016f\u0170\7>\2\2\u0170\u0171\7>\2\2\u0171R\3\2\2\2\u0172\u0173\7"+ + "\61\2\2\u0173T\3\2\2\2\u0174\u0175\7\'\2\2\u0175V\3\2\2\2\u0176\u0177"+ + "\7>\2\2\u0177X\3\2\2\2\u0178\u0179\7@\2\2\u0179Z\3\2\2\2\u017a\u017b\7"+ + "?\2\2\u017b\u017c\7?\2\2\u017c\\\3\2\2\2\u017d\u017e\7#\2\2\u017e\u017f"+ + "\7?\2\2\u017f^\3\2\2\2\u0180\u0181\7>\2\2\u0181\u0182\7?\2\2\u0182`\3"+ + "\2\2\2\u0183\u0184\7@\2\2\u0184\u0185\7?\2\2\u0185b\3\2\2\2\u0186\u0187"+ + "\7`\2\2\u0187d\3\2\2\2\u0188\u0189\7~\2\2\u0189f\3\2\2\2\u018a\u018b\7"+ + "(\2\2\u018b\u018c\7(\2\2\u018ch\3\2\2\2\u018d\u018e\7~\2\2\u018e\u018f"+ + "\7~\2\2\u018fj\3\2\2\2\u0190\u0191\7A\2\2\u0191l\3\2\2\2\u0192\u0193\7"+ + "-\2\2\u0193\u0194\7?\2\2\u0194n\3\2\2\2\u0195\u0196\7/\2\2\u0196\u0197"+ + "\7?\2\2\u0197p\3\2\2\2\u0198\u0199\7,\2\2\u0199\u019a\7?\2\2\u019ar\3"+ + "\2\2\2\u019b\u019c\7\61\2\2\u019c\u019d\7?\2\2\u019dt\3\2\2\2\u019e\u019f"+ + "\7\'\2\2\u019f\u01a0\7?\2\2\u01a0v\3\2\2\2\u01a1\u01a2\7>\2\2\u01a2\u01a3"+ + "\7>\2\2\u01a3\u01a4\7?\2\2\u01a4x\3\2\2\2\u01a5\u01a6\7@\2\2\u01a6\u01a7"+ + "\7@\2\2\u01a7\u01a8\7?\2\2\u01a8z\3\2\2\2\u01a9\u01aa\7(\2\2\u01aa\u01ab"+ + "\7?\2\2\u01ab|\3\2\2\2\u01ac\u01ad\7~\2\2\u01ad\u01ae\7?\2\2\u01ae~\3"+ + "\2\2\2\u01af\u01b0\7`\2\2\u01b0\u01b1\7?\2\2\u01b1\u0080\3\2\2\2\u01b2"+ + "\u01b3\7m\2\2\u01b3\u01b4\7k\2\2\u01b4\u01b5\7e\2\2\u01b5\u01b6\7m\2\2"+ + "\u01b6\u01b7\7c\2\2\u01b7\u01b8\7u\2\2\u01b8\u01b9\7o\2\2\u01b9\u0082"+ + "\3\2\2\2\u01ba\u01bb\7t\2\2\u01bb\u01bc\7g\2\2\u01bc\u01bd\7u\2\2\u01bd"+ + "\u01be\7q\2\2\u01be\u01bf\7w\2\2\u01bf\u01c0\7t\2\2\u01c0\u01c1\7e\2\2"+ + "\u01c1\u01c2\7g\2\2\u01c2\u0084\3\2\2\2\u01c3\u01c4\7w\2\2\u01c4\u01c5"+ + "\7u\2\2\u01c5\u01c6\7g\2\2\u01c6\u01c7\7u\2\2\u01c7\u0086\3\2\2\2\u01c8"+ + "\u01c9\7e\2\2\u01c9\u01ca\7n\2\2\u01ca\u01cb\7q\2\2\u01cb\u01cc\7d\2\2"+ + "\u01cc\u01cd\7d\2\2\u01cd\u01ce\7g\2\2\u01ce\u01cf\7t\2\2\u01cf\u01d0"+ + "\7u\2\2\u01d0\u0088\3\2\2\2\u01d1\u01d2\7d\2\2\u01d2\u01d3\7{\2\2\u01d3"+ + "\u01d4\7v\2\2\u01d4\u01d5\7g\2\2\u01d5\u01d6\7u\2\2\u01d6\u008a\3\2\2"+ + "\2\u01d7\u01d8\7e\2\2\u01d8\u01d9\7{\2\2\u01d9\u01da\7e\2\2\u01da\u01db"+ + "\7n\2\2\u01db\u01dc\7g\2\2\u01dc\u01dd\7u\2\2\u01dd\u008c\3\2\2\2\u01de"+ + "\u01df\7r\2\2\u01df\u01e0\7e\2\2\u01e0\u008e\3\2\2\2\u01e1\u01e2\7\60"+ + "\2\2\u01e2\u01e3\7d\2\2\u01e3\u01e4\7{\2\2\u01e4\u01e5\7v\2\2\u01e5\u01e6"+ + "\7g\2\2\u01e6\u0090\3\2\2\2\u01e7\u01e8\7%\2\2\u01e8\u0092\3\2\2\2\u01e9"+ + "\u01ea\7\60\2\2\u01ea\u0094\3\2\2\2\u01eb\u01ec\7d\2\2\u01ec\u01ed\7t"+ + "\2\2\u01ed\u02ca\7m\2\2\u01ee\u01ef\7q\2\2\u01ef\u01f0\7t\2\2\u01f0\u02ca"+ + "\7c\2\2\u01f1\u01f2\7m\2\2\u01f2\u01f3\7k\2\2\u01f3\u02ca\7n\2\2\u01f4"+ + "\u01f5\7u\2\2\u01f5\u01f6\7n\2\2\u01f6\u02ca\7q\2\2\u01f7\u01f8\7p\2\2"+ + "\u01f8\u01f9\7q\2\2\u01f9\u02ca\7r\2\2\u01fa\u01fb\7c\2\2\u01fb\u01fc"+ + "\7u\2\2\u01fc\u02ca\7n\2\2\u01fd\u01fe\7r\2\2\u01fe\u01ff\7j\2\2\u01ff"+ + "\u02ca\7r\2\2\u0200\u0201\7c\2\2\u0201\u0202\7p\2\2\u0202\u02ca\7e\2\2"+ + "\u0203\u0204\7d\2\2\u0204\u0205\7r\2\2\u0205\u02ca\7n\2\2\u0206\u0207"+ + "\7e\2\2\u0207\u0208\7n\2\2\u0208\u02ca\7e\2\2\u0209\u020a\7l\2\2\u020a"+ + "\u020b\7u\2\2\u020b\u02ca\7t\2\2\u020c\u020d\7c\2\2\u020d\u020e\7p\2\2"+ + "\u020e\u02ca\7f\2\2\u020f\u0210\7t\2\2\u0210\u0211\7n\2\2\u0211\u02ca"+ + "\7c\2\2\u0212\u0213\7d\2\2\u0213\u0214\7k\2\2\u0214\u02ca\7v\2\2\u0215"+ + "\u0216\7t\2\2\u0216\u0217\7q\2\2\u0217\u02ca\7n\2\2\u0218\u0219\7r\2\2"+ + "\u0219\u021a\7n\2\2\u021a\u02ca\7c\2\2\u021b\u021c\7r\2\2\u021c\u021d"+ + "\7n\2\2\u021d\u02ca\7r\2\2\u021e\u021f\7d\2\2\u021f\u0220\7o\2\2\u0220"+ + "\u02ca\7k\2\2\u0221\u0222\7u\2\2\u0222\u0223\7g\2\2\u0223\u02ca\7e\2\2"+ + "\u0224\u0225\7t\2\2\u0225\u0226\7v\2\2\u0226\u02ca\7k\2\2\u0227\u0228"+ + "\7g\2\2\u0228\u0229\7q\2\2\u0229\u02ca\7t\2\2\u022a\u022b\7u\2\2\u022b"+ + "\u022c\7t\2\2\u022c\u02ca\7g\2\2\u022d\u022e\7n\2\2\u022e\u022f\7u\2\2"+ + "\u022f\u02ca\7t\2\2\u0230\u0231\7r\2\2\u0231\u0232\7j\2\2\u0232\u02ca"+ + "\7c\2\2\u0233\u0234\7c\2\2\u0234\u0235\7n\2\2\u0235\u02ca\7t\2\2\u0236"+ + "\u0237\7l\2\2\u0237\u0238\7o\2\2\u0238\u02ca\7r\2\2\u0239\u023a\7d\2\2"+ + "\u023a\u023b\7x\2\2\u023b\u02ca\7e\2\2\u023c\u023d\7e\2\2\u023d\u023e"+ + "\7n\2\2\u023e\u02ca\7k\2\2\u023f\u0240\7t\2\2\u0240\u0241\7v\2\2\u0241"+ + "\u02ca\7u\2\2\u0242\u0243\7c\2\2\u0243\u0244\7f\2\2\u0244\u02ca\7e\2\2"+ + "\u0245\u0246\7t\2\2\u0246\u0247\7t\2\2\u0247\u02ca\7c\2\2\u0248\u0249"+ + "\7d\2\2\u0249\u024a\7x\2\2\u024a\u02ca\7u\2\2\u024b\u024c\7u\2\2\u024c"+ + "\u024d\7g\2\2\u024d\u02ca\7k\2\2\u024e\u024f\7u\2\2\u024f\u0250\7c\2\2"+ + "\u0250\u02ca\7z\2\2\u0251\u0252\7u\2\2\u0252\u0253\7v\2\2\u0253\u02ca"+ + "\7{\2\2\u0254\u0255\7u\2\2\u0255\u0256\7v\2\2\u0256\u02ca\7c\2\2\u0257"+ + "\u0258\7u\2\2\u0258\u0259\7v\2\2\u0259\u02ca\7z\2\2\u025a\u025b\7f\2\2"+ + "\u025b\u025c\7g\2\2\u025c\u02ca\7{\2\2\u025d\u025e\7v\2\2\u025e\u025f"+ + "\7z\2\2\u025f\u02ca\7c\2\2\u0260\u0261\7z\2\2\u0261\u0262\7c\2\2\u0262"+ + "\u02ca\7c\2\2\u0263\u0264\7d\2\2\u0264\u0265\7e\2\2\u0265\u02ca\7e\2\2"+ + "\u0266\u0267\7c\2\2\u0267\u0268\7j\2\2\u0268\u02ca\7z\2\2\u0269\u026a"+ + "\7v\2\2\u026a\u026b\7{\2\2\u026b\u02ca\7c\2\2\u026c\u026d\7v\2\2\u026d"+ + "\u026e\7z\2\2\u026e\u02ca\7u\2\2\u026f\u0270\7v\2\2\u0270\u0271\7c\2\2"+ + "\u0271\u02ca\7u\2\2\u0272\u0273\7u\2\2\u0273\u0274\7j\2\2\u0274\u02ca"+ + "\7{\2\2\u0275\u0276\7u\2\2\u0276\u0277\7j\2\2\u0277\u02ca\7z\2\2\u0278"+ + "\u0279\7n\2\2\u0279\u027a\7f\2\2\u027a\u02ca\7{\2\2\u027b\u027c\7n\2\2"+ + "\u027c\u027d\7f\2\2\u027d\u02ca\7c\2\2\u027e\u027f\7n\2\2\u027f\u0280"+ + "\7f\2\2\u0280\u02ca\7z\2\2\u0281\u0282\7n\2\2\u0282\u0283\7c\2\2\u0283"+ + "\u02ca\7z\2\2\u0284\u0285\7v\2\2\u0285\u0286\7c\2\2\u0286\u02ca\7{\2\2"+ + "\u0287\u0288\7v\2\2\u0288\u0289\7c\2\2\u0289\u02ca\7z\2\2\u028a\u028b"+ + "\7d\2\2\u028b\u028c\7e\2\2\u028c\u02ca\7u\2\2\u028d\u028e\7e\2\2\u028e"+ + "\u028f\7n\2\2\u028f\u02ca\7x\2\2\u0290\u0291\7v\2\2\u0291\u0292\7u\2\2"+ + "\u0292\u02ca\7z\2\2\u0293\u0294\7n\2\2\u0294\u0295\7c\2\2\u0295\u02ca"+ + "\7u\2\2\u0296\u0297\7e\2\2\u0297\u0298\7r\2\2\u0298\u02ca\7{\2\2\u0299"+ + "\u029a\7e\2\2\u029a\u029b\7o\2\2\u029b\u02ca\7r\2\2\u029c\u029d\7e\2\2"+ + "\u029d\u029e\7r\2\2\u029e\u02ca\7z\2\2\u029f\u02a0\7f\2\2\u02a0\u02a1"+ + "\7e\2\2\u02a1\u02ca\7r\2\2\u02a2\u02a3\7f\2\2\u02a3\u02a4\7g\2\2\u02a4"+ + "\u02ca\7e\2\2\u02a5\u02a6\7k\2\2\u02a6\u02a7\7p\2\2\u02a7\u02ca\7e\2\2"+ + "\u02a8\u02a9\7c\2\2\u02a9\u02aa\7z\2\2\u02aa\u02ca\7u\2\2\u02ab\u02ac"+ + "\7d\2\2\u02ac\u02ad\7p\2\2\u02ad\u02ca\7g\2\2\u02ae\u02af\7e\2\2\u02af"+ + "\u02b0\7n\2\2\u02b0\u02ca\7f\2\2\u02b1\u02b2\7u\2\2\u02b2\u02b3\7d\2\2"+ + "\u02b3\u02ca\7e\2\2\u02b4\u02b5\7k\2\2\u02b5\u02b6\7u\2\2\u02b6\u02ca"+ + "\7e\2\2\u02b7\u02b8\7k\2\2\u02b8\u02b9\7p\2\2\u02b9\u02ca\7z\2\2\u02ba"+ + "\u02bb\7d\2\2\u02bb\u02bc\7g\2\2\u02bc\u02ca\7s\2\2\u02bd\u02be\7u\2\2"+ + "\u02be\u02bf\7g\2\2\u02bf\u02ca\7f\2\2\u02c0\u02c1\7f\2\2\u02c1\u02c2"+ + "\7g\2\2\u02c2\u02ca\7z\2\2\u02c3\u02c4\7k\2\2\u02c4\u02c5\7p\2\2\u02c5"+ + "\u02ca\7{\2\2\u02c6\u02c7\7t\2\2\u02c7\u02c8\7q\2\2\u02c8\u02ca\7t\2\2"+ + "\u02c9\u01eb\3\2\2\2\u02c9\u01ee\3\2\2\2\u02c9\u01f1\3\2\2\2\u02c9\u01f4"+ + "\3\2\2\2\u02c9\u01f7\3\2\2\2\u02c9\u01fa\3\2\2\2\u02c9\u01fd\3\2\2\2\u02c9"+ + "\u0200\3\2\2\2\u02c9\u0203\3\2\2\2\u02c9\u0206\3\2\2\2\u02c9\u0209\3\2"+ + "\2\2\u02c9\u020c\3\2\2\2\u02c9\u020f\3\2\2\2\u02c9\u0212\3\2\2\2\u02c9"+ + "\u0215\3\2\2\2\u02c9\u0218\3\2\2\2\u02c9\u021b\3\2\2\2\u02c9\u021e\3\2"+ + "\2\2\u02c9\u0221\3\2\2\2\u02c9\u0224\3\2\2\2\u02c9\u0227\3\2\2\2\u02c9"+ + "\u022a\3\2\2\2\u02c9\u022d\3\2\2\2\u02c9\u0230\3\2\2\2\u02c9\u0233\3\2"+ + "\2\2\u02c9\u0236\3\2\2\2\u02c9\u0239\3\2\2\2\u02c9\u023c\3\2\2\2\u02c9"+ + "\u023f\3\2\2\2\u02c9\u0242\3\2\2\2\u02c9\u0245\3\2\2\2\u02c9\u0248\3\2"+ + "\2\2\u02c9\u024b\3\2\2\2\u02c9\u024e\3\2\2\2\u02c9\u0251\3\2\2\2\u02c9"+ + "\u0254\3\2\2\2\u02c9\u0257\3\2\2\2\u02c9\u025a\3\2\2\2\u02c9\u025d\3\2"+ + "\2\2\u02c9\u0260\3\2\2\2\u02c9\u0263\3\2\2\2\u02c9\u0266\3\2\2\2\u02c9"+ + "\u0269\3\2\2\2\u02c9\u026c\3\2\2\2\u02c9\u026f\3\2\2\2\u02c9\u0272\3\2"+ + "\2\2\u02c9\u0275\3\2\2\2\u02c9\u0278\3\2\2\2\u02c9\u027b\3\2\2\2\u02c9"+ + "\u027e\3\2\2\2\u02c9\u0281\3\2\2\2\u02c9\u0284\3\2\2\2\u02c9\u0287\3\2"+ + "\2\2\u02c9\u028a\3\2\2\2\u02c9\u028d\3\2\2\2\u02c9\u0290\3\2\2\2\u02c9"+ + "\u0293\3\2\2\2\u02c9\u0296\3\2\2\2\u02c9\u0299\3\2\2\2\u02c9\u029c\3\2"+ + "\2\2\u02c9\u029f\3\2\2\2\u02c9\u02a2\3\2\2\2\u02c9\u02a5\3\2\2\2\u02c9"+ + "\u02a8\3\2\2\2\u02c9\u02ab\3\2\2\2\u02c9\u02ae\3\2\2\2\u02c9\u02b1\3\2"+ + "\2\2\u02c9\u02b4\3\2\2\2\u02c9\u02b7\3\2\2\2\u02c9\u02ba\3\2\2\2\u02c9"+ + "\u02bd\3\2\2\2\u02c9\u02c0\3\2\2\2\u02c9\u02c3\3\2\2\2\u02c9\u02c6\3\2"+ + "\2\2\u02ca\u0096\3\2\2\2\u02cb\u02cc\7}\2\2\u02cc\u02cd\7}\2\2\u02cd\u02d1"+ + "\3\2\2\2\u02ce\u02d0\13\2\2\2\u02cf\u02ce\3\2\2\2\u02d0\u02d3\3\2\2\2"+ + "\u02d1\u02d2\3\2\2\2\u02d1\u02cf\3\2\2\2\u02d2\u02d4\3\2\2\2\u02d3\u02d1"+ + "\3\2\2\2\u02d4\u02d5\7\177\2\2\u02d5\u02d6\7\177\2\2\u02d6\u0098\3\2\2"+ + "\2\u02d7\u02d8\7d\2\2\u02d8\u02d9\7{\2\2\u02d9\u02da\7v\2\2\u02da\u02fd"+ + "\7g\2\2\u02db\u02dc\7y\2\2\u02dc\u02dd\7q\2\2\u02dd\u02de\7t\2\2\u02de"+ + "\u02fd\7f\2\2\u02df\u02e0\7f\2\2\u02e0\u02e1\7y\2\2\u02e1\u02e2\7q\2\2"+ + "\u02e2\u02e3\7t\2\2\u02e3\u02fd\7f\2\2\u02e4\u02e5\7d\2\2\u02e5\u02e6"+ + "\7q\2\2\u02e6\u02e7\7q\2\2\u02e7\u02fd\7n\2\2\u02e8\u02e9\7e\2\2\u02e9"+ + "\u02ea\7j\2\2\u02ea\u02eb\7c\2\2\u02eb\u02fd\7t\2\2\u02ec\u02ed\7u\2\2"+ + "\u02ed\u02ee\7j\2\2\u02ee\u02ef\7q\2\2\u02ef\u02f0\7t\2\2\u02f0\u02fd"+ + "\7v\2\2\u02f1\u02f2\7k\2\2\u02f2\u02f3\7p\2\2\u02f3\u02fd\7v\2\2\u02f4"+ + "\u02f5\7n\2\2\u02f5\u02f6\7q\2\2\u02f6\u02f7\7p\2\2\u02f7\u02fd\7i\2\2"+ + "\u02f8\u02f9\7x\2\2\u02f9\u02fa\7q\2\2\u02fa\u02fb\7k\2\2\u02fb\u02fd"+ + "\7f\2\2\u02fc\u02d7\3\2\2\2\u02fc\u02db\3\2\2\2\u02fc\u02df\3\2\2\2\u02fc"+ + "\u02e4\3\2\2\2\u02fc\u02e8\3\2\2\2\u02fc\u02ec\3\2\2\2\u02fc\u02f1\3\2"+ + "\2\2\u02fc\u02f4\3\2\2\2\u02fc\u02f8\3\2\2\2\u02fd\u009a\3\2\2\2\u02fe"+ + "\u0304\7$\2\2\u02ff\u0300\7^\2\2\u0300\u0303\7$\2\2\u0301\u0303\n\2\2"+ + "\2\u0302\u02ff\3\2\2\2\u0302\u0301\3\2\2\2\u0303\u0306\3\2\2\2\u0304\u0302"+ + "\3\2\2\2\u0304\u0305\3\2\2\2\u0305\u0307\3\2\2\2\u0306\u0304\3\2\2\2\u0307"+ + "\u0308\7$\2\2\u0308\u009c\3\2\2\2\u0309\u030d\7)\2\2\u030a\u030b\7^\2"+ + "\2\u030b\u030e\7)\2\2\u030c\u030e\n\3\2\2\u030d\u030a\3\2\2\2\u030d\u030c"+ + "\3\2\2\2\u030e\u030f\3\2\2\2\u030f\u0310\7)\2\2\u0310\u009e\3\2\2\2\u0311"+ + "\u0312\7v\2\2\u0312\u0313\7t\2\2\u0313\u0314\7w\2\2\u0314\u031b\7g\2\2"+ + "\u0315\u0316\7h\2\2\u0316\u0317\7c\2\2\u0317\u0318\7n\2\2\u0318\u0319"+ + "\7u\2\2\u0319\u031b\7g\2\2\u031a\u0311\3\2\2\2\u031a\u0315\3\2\2\2\u031b"+ + "\u00a0\3\2\2\2\u031c\u031f\5\u00a3R\2\u031d\u031f\5\u00abV\2\u031e\u031c"+ + "\3\2\2\2\u031e\u031d\3\2\2\2\u031f\u00a2\3\2\2\2\u0320\u0324\5\u00a5S"+ + "\2\u0321\u0324\5\u00a7T\2\u0322\u0324\5\u00a9U\2\u0323\u0320\3\2\2\2\u0323"+ + "\u0321\3\2\2\2\u0323\u0322\3\2\2\2\u0324\u00a4\3\2\2\2\u0325\u032b\7\'"+ + "\2\2\u0326\u0327\7\62\2\2\u0327\u032b\7d\2\2\u0328\u0329\7\62\2\2\u0329"+ + "\u032b\7D\2\2\u032a\u0325\3\2\2\2\u032a\u0326\3\2\2\2\u032a\u0328\3\2"+ + "\2\2\u032b\u032f\3\2\2\2\u032c\u032e\5\u00b3Z\2\u032d\u032c\3\2\2\2\u032e"+ + "\u0331\3\2\2\2\u032f\u032d\3\2\2\2\u032f\u0330\3\2\2\2\u0330\u0332\3\2"+ + "\2\2\u0331\u032f\3\2\2\2\u0332\u0334\7\60\2\2\u0333\u0335\5\u00b3Z\2\u0334"+ + "\u0333\3\2\2\2\u0335\u0336\3\2\2\2\u0336\u0334\3\2\2\2\u0336\u0337\3\2"+ + "\2\2\u0337\u00a6\3\2\2\2\u0338\u033a\5\u00b5[\2\u0339\u0338\3\2\2\2\u033a"+ + "\u033d\3\2\2\2\u033b\u0339\3\2\2\2\u033b\u033c\3\2\2\2\u033c\u033e\3\2"+ + "\2\2\u033d\u033b\3\2\2\2\u033e\u0340\7\60\2\2\u033f\u0341\5\u00b5[\2\u0340"+ + "\u033f\3\2\2\2\u0341\u0342\3\2\2\2\u0342\u0340\3\2\2\2\u0342\u0343\3\2"+ + "\2\2\u0343\u00a8\3\2\2\2\u0344\u034a\7&\2\2\u0345\u0346\7\62\2\2\u0346"+ + "\u034a\7z\2\2\u0347\u0348\7\62\2\2\u0348\u034a\7Z\2\2\u0349\u0344\3\2"+ + "\2\2\u0349\u0345\3\2\2\2\u0349\u0347\3\2\2\2\u034a\u034e\3\2\2\2\u034b"+ + "\u034d\5\u00b7\\\2\u034c\u034b\3\2\2\2\u034d\u0350\3\2\2\2\u034e\u034c"+ + "\3\2\2\2\u034e\u034f\3\2\2\2\u034f\u0351\3\2\2\2\u0350\u034e\3\2\2\2\u0351"+ + "\u0353\7\60\2\2\u0352\u0354\5\u00b7\\\2\u0353\u0352\3\2\2\2\u0354\u0355"+ + "\3\2\2\2\u0355\u0353\3\2\2\2\u0355\u0356\3\2\2\2\u0356\u00aa\3\2\2\2\u0357"+ + "\u035b\5\u00afX\2\u0358\u035b\5\u00b1Y\2\u0359\u035b\5\u00adW\2\u035a"+ + "\u0357\3\2\2\2\u035a\u0358\3\2\2\2\u035a\u0359\3\2\2\2\u035b\u00ac\3\2"+ + "\2\2\u035c\u035d\7\62\2\2\u035d\u035f\t\4\2\2\u035e\u0360\5\u00b3Z\2\u035f"+ + "\u035e\3\2\2\2\u0360\u0361\3\2\2\2\u0361\u035f\3\2\2\2\u0361\u0362\3\2"+ + "\2\2\u0362\u036a\3\2\2\2\u0363\u0365\7\'\2\2\u0364\u0366\5\u00b3Z\2\u0365"+ + "\u0364\3\2\2\2\u0366\u0367\3\2\2\2\u0367\u0365\3\2\2\2\u0367\u0368\3\2"+ + "\2\2\u0368\u036a\3\2\2\2\u0369\u035c\3\2\2\2\u0369\u0363\3\2\2\2\u036a"+ + "\u00ae\3\2\2\2\u036b\u036d\5\u00b5[\2\u036c\u036b\3\2\2\2\u036d\u036e"+ + "\3\2\2\2\u036e\u036c\3\2\2\2\u036e\u036f\3\2\2\2\u036f\u00b0\3\2\2\2\u0370"+ + "\u0376\7&\2\2\u0371\u0372\7\62\2\2\u0372\u0376\7z\2\2\u0373\u0374\7\62"+ + "\2\2\u0374\u0376\7Z\2\2\u0375\u0370\3\2\2\2\u0375\u0371\3\2\2\2\u0375"+ + "\u0373\3\2\2\2\u0376\u0378\3\2\2\2\u0377\u0379\5\u00b7\\\2\u0378\u0377"+ + "\3\2\2\2\u0379\u037a\3\2\2\2\u037a\u0378\3\2\2\2\u037a\u037b\3\2\2\2\u037b"+ + "\u00b2\3\2\2\2\u037c\u037d\t\5\2\2\u037d\u00b4\3\2\2\2\u037e\u037f\t\6"+ + "\2\2\u037f\u00b6\3\2\2\2\u0380\u0381\t\7\2\2\u0381\u00b8\3\2\2\2\u0382"+ + "\u0386\5\u00bb^\2\u0383\u0385\5\u00bd_\2\u0384\u0383\3\2\2\2\u0385\u0388"+ + "\3\2\2\2\u0386\u0384\3\2\2\2\u0386\u0387\3\2\2\2\u0387\u00ba\3\2\2\2\u0388"+ + "\u0386\3\2\2\2\u0389\u038a\t\b\2\2\u038a\u00bc\3\2\2\2\u038b\u038c\t\t"+ + "\2\2\u038c\u00be\3\2\2\2\u038d\u0391\7#\2\2\u038e\u0390\5\u00bd_\2\u038f"+ + "\u038e\3\2\2\2\u0390\u0393\3\2\2\2\u0391\u038f\3\2\2\2\u0391\u0392\3\2"+ + "\2\2\u0392\u0395\3\2\2\2\u0393\u0391\3\2\2\2\u0394\u0396\t\n\2\2\u0395"+ + "\u0394\3\2\2\2\u0396\u0397\3\2\2\2\u0397\u0395\3\2\2\2\u0397\u0398\3\2"+ + "\2\2\u0398\u00c0\3\2\2\2\u0399\u039b\t\13\2\2\u039a\u0399\3\2\2\2\u039b"+ + "\u039c\3\2\2\2\u039c\u039a\3\2\2\2\u039c\u039d\3\2\2\2\u039d\u039e\3\2"+ + "\2\2\u039e\u039f\ba\2\2\u039f\u00c2\3\2\2\2\u03a0\u03a1\7\61\2\2\u03a1"+ + "\u03a2\7\61\2\2\u03a2\u03a6\3\2\2\2\u03a3\u03a5\n\f\2\2\u03a4\u03a3\3"+ + "\2\2\2\u03a5\u03a8\3\2\2\2\u03a6\u03a4\3\2\2\2\u03a6\u03a7\3\2\2\2\u03a7"+ + "\u03a9\3\2\2\2\u03a8\u03a6\3\2\2\2\u03a9\u03aa\bb\3\2\u03aa\u00c4\3\2"+ + "\2\2\u03ab\u03ac\7\61\2\2\u03ac\u03ad\7,\2\2\u03ad\u03b1\3\2\2\2\u03ae"+ + "\u03b0\13\2\2\2\u03af\u03ae\3\2\2\2\u03b0\u03b3\3\2\2\2\u03b1\u03b2\3"+ + "\2\2\2\u03b1\u03af\3\2\2\2\u03b2\u03b4\3\2\2\2\u03b3\u03b1\3\2\2\2\u03b4"+ + "\u03b5\7,\2\2\u03b5\u03b6\7\61\2\2\u03b6\u03b7\3\2\2\2\u03b7\u03b8\bc"+ + "\3\2\u03b8\u00c6\3\2\2\2!\2\u02c9\u02d1\u02fc\u0302\u0304\u030d\u031a"+ + "\u031e\u0323\u032a\u032f\u0336\u033b\u0342\u0349\u034e\u0355\u035a\u0361"+ + "\u0367\u0369\u036e\u0375\u037a\u0386\u0391\u0397\u039c\u03a6\u03b1\4\2"+ + "\3\2\2\4\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens index 60625c5cc..d173ca275 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -70,26 +70,27 @@ T__68=69 T__69=70 T__70=71 T__71=72 -MNEMONIC=73 -KICKASM=74 -SIMPLETYPE=75 -STRING=76 -CHAR=77 -BOOLEAN=78 -NUMBER=79 -NUMFLOAT=80 -BINFLOAT=81 -DECFLOAT=82 -HEXFLOAT=83 -NUMINT=84 -BININTEGER=85 -DECINTEGER=86 -HEXINTEGER=87 -NAME=88 -ASMREL=89 -WS=90 -COMMENT_LINE=91 -COMMENT_BLOCK=92 +T__72=73 +MNEMONIC=74 +KICKASM=75 +SIMPLETYPE=76 +STRING=77 +CHAR=78 +BOOLEAN=79 +NUMBER=80 +NUMFLOAT=81 +BINFLOAT=82 +DECFLOAT=83 +HEXFLOAT=84 +NUMINT=85 +BININTEGER=86 +DECINTEGER=87 +HEXINTEGER=88 +NAME=89 +ASMREL=90 +WS=91 +COMMENT_LINE=92 +COMMENT_BLOCK=93 'import'=1 '='=2 ';'=3 @@ -117,48 +118,49 @@ COMMENT_BLOCK=92 ':'=25 '..'=26 'signed'=27 -'*'=28 -'['=29 -']'=30 -'--'=31 -'++'=32 -'+'=33 -'-'=34 -'!'=35 -'&'=36 -'~'=37 -'>>'=38 -'<<'=39 -'/'=40 -'%'=41 -'<'=42 -'>'=43 -'=='=44 -'!='=45 -'<='=46 -'>='=47 -'^'=48 -'|'=49 -'&&'=50 -'||'=51 -'?'=52 -'+='=53 -'-='=54 -'*='=55 -'/='=56 -'%='=57 -'<<='=58 -'>>='=59 -'&='=60 -'|='=61 -'^='=62 -'kickasm'=63 -'resource'=64 -'uses'=65 -'clobbers'=66 -'bytes'=67 -'cycles'=68 -'pc'=69 -'.byte'=70 -'#'=71 -'.'=72 +'unsigned'=28 +'*'=29 +'['=30 +']'=31 +'--'=32 +'++'=33 +'+'=34 +'-'=35 +'!'=36 +'&'=37 +'~'=38 +'>>'=39 +'<<'=40 +'/'=41 +'%'=42 +'<'=43 +'>'=44 +'=='=45 +'!='=46 +'<='=47 +'>='=48 +'^'=49 +'|'=50 +'&&'=51 +'||'=52 +'?'=53 +'+='=54 +'-='=55 +'*='=56 +'/='=57 +'%='=58 +'<<='=59 +'>>='=60 +'&='=61 +'|='=62 +'^='=63 +'kickasm'=64 +'resource'=65 +'uses'=66 +'clobbers'=67 +'bytes'=68 +'cycles'=69 +'pc'=70 +'.byte'=71 +'#'=72 +'.'=73 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index d7c013469..fee0fe8c6 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -26,11 +26,11 @@ public class KickCParser extends Parser { T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52, T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59, T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66, - T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, MNEMONIC=73, - KICKASM=74, SIMPLETYPE=75, STRING=76, CHAR=77, BOOLEAN=78, NUMBER=79, - NUMFLOAT=80, BINFLOAT=81, DECFLOAT=82, HEXFLOAT=83, NUMINT=84, BININTEGER=85, - DECINTEGER=86, HEXINTEGER=87, NAME=88, ASMREL=89, WS=90, COMMENT_LINE=91, - COMMENT_BLOCK=92; + T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, T__72=73, + MNEMONIC=74, KICKASM=75, SIMPLETYPE=76, STRING=77, CHAR=78, BOOLEAN=79, + NUMBER=80, NUMFLOAT=81, BINFLOAT=82, DECFLOAT=83, HEXFLOAT=84, NUMINT=85, + BININTEGER=86, DECINTEGER=87, HEXINTEGER=88, NAME=89, ASMREL=90, WS=91, + COMMENT_LINE=92, COMMENT_BLOCK=93; public static final int RULE_file = 0, RULE_asmFile = 1, RULE_importSeq = 2, RULE_importDecl = 3, RULE_declSeq = 4, RULE_decl = 5, RULE_declVariable = 6, RULE_declFunction = 7, @@ -52,12 +52,12 @@ public class KickCParser extends Parser { null, "'import'", "'='", "';'", "'('", "')'", "'{'", "'}'", "','", "'const'", "'extern'", "'align'", "'register'", "'inline'", "'volatile'", "'interrupt'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'break'", "'continue'", - "'asm'", "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", - "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", - "'>'", "'=='", "'!='", "'<='", "'>='", "'^'", "'|'", "'&&'", "'||'", "'?'", - "'+='", "'-='", "'*='", "'/='", "'%='", "'<<='", "'>>='", "'&='", "'|='", - "'^='", "'kickasm'", "'resource'", "'uses'", "'clobbers'", "'bytes'", - "'cycles'", "'pc'", "'.byte'", "'#'", "'.'" + "'asm'", "':'", "'..'", "'signed'", "'unsigned'", "'*'", "'['", "']'", + "'--'", "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", + "'%'", "'<'", "'>'", "'=='", "'!='", "'<='", "'>='", "'^'", "'|'", "'&&'", + "'||'", "'?'", "'+='", "'-='", "'*='", "'/='", "'%='", "'<<='", "'>>='", + "'&='", "'|='", "'^='", "'kickasm'", "'resource'", "'uses'", "'clobbers'", + "'bytes'", "'cycles'", "'pc'", "'.byte'", "'#'", "'.'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, null, null, null, null, null, null, null, @@ -66,7 +66,7 @@ public class KickCParser extends Parser { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, "MNEMONIC", "KICKASM", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", + null, null, "MNEMONIC", "KICKASM", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; @@ -368,7 +368,7 @@ public class KickCParser extends Parser { setState(75); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__26) | (1L << T__62))) != 0) || _la==SIMPLETYPE ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__26) | (1L << T__27))) != 0) || _la==T__63 || _la==SIMPLETYPE ); } } catch (RecognitionException re) { @@ -631,7 +631,7 @@ public class KickCParser extends Parser { setState(118); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__26))) != 0) || _la==SIMPLETYPE) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__26) | (1L << T__27))) != 0) || _la==SIMPLETYPE) { { setState(117); parameterListDecl(); @@ -645,7 +645,7 @@ public class KickCParser extends Parser { setState(123); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__42) | (1L << T__62))) != 0) || ((((_la - 75)) & ~0x3f) == 0 && ((1L << (_la - 75)) & ((1L << (SIMPLETYPE - 75)) | (1L << (STRING - 75)) | (1L << (CHAR - 75)) | (1L << (BOOLEAN - 75)) | (1L << (NUMBER - 75)) | (1L << (NAME - 75)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { setState(122); stmtSeq(); @@ -1090,7 +1090,7 @@ public class KickCParser extends Parser { setState(173); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__42) | (1L << T__62))) != 0) || ((((_la - 75)) & ~0x3f) == 0 && ((1L << (_la - 75)) & ((1L << (SIMPLETYPE - 75)) | (1L << (STRING - 75)) | (1L << (CHAR - 75)) | (1L << (BOOLEAN - 75)) | (1L << (NUMBER - 75)) | (1L << (NAME - 75)))) != 0) ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0) ); } } catch (RecognitionException re) { @@ -1402,7 +1402,7 @@ public class KickCParser extends Parser { setState(178); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__42) | (1L << T__62))) != 0) || ((((_la - 75)) & ~0x3f) == 0 && ((1L << (_la - 75)) & ((1L << (SIMPLETYPE - 75)) | (1L << (STRING - 75)) | (1L << (CHAR - 75)) | (1L << (BOOLEAN - 75)) | (1L << (NUMBER - 75)) | (1L << (NAME - 75)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { setState(177); stmtSeq(); @@ -1540,7 +1540,7 @@ public class KickCParser extends Parser { setState(228); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__26))) != 0) || _la==SIMPLETYPE || _la==NAME) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__26) | (1L << T__27))) != 0) || _la==SIMPLETYPE || _la==NAME) { { setState(227); forDeclaration(); @@ -1564,7 +1564,7 @@ public class KickCParser extends Parser { setState(236); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__27) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__42))) != 0) || ((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & ((1L << (STRING - 76)) | (1L << (CHAR - 76)) | (1L << (BOOLEAN - 76)) | (1L << (NUMBER - 76)) | (1L << (NAME - 76)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__28) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRING - 77)) | (1L << (CHAR - 77)) | (1L << (BOOLEAN - 77)) | (1L << (NUMBER - 77)) | (1L << (NAME - 77)))) != 0)) { { setState(235); expr(0); @@ -1709,7 +1709,7 @@ public class KickCParser extends Parser { setState(261); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__3 || _la==T__26 || _la==SIMPLETYPE) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__26) | (1L << T__27))) != 0) || _la==SIMPLETYPE) { { setState(260); typeDecl(0); @@ -2033,12 +2033,21 @@ public class KickCParser extends Parser { } break; case T__26: + case T__27: { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(292); - match(T__26); + _la = _input.LA(1); + if ( !(_la==T__26 || _la==T__27) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } setState(293); match(SIMPLETYPE); } @@ -2065,7 +2074,7 @@ public class KickCParser extends Parser { setState(296); if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); setState(297); - match(T__27); + match(T__28); } break; case 2: @@ -2075,11 +2084,11 @@ public class KickCParser extends Parser { setState(298); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); setState(299); - match(T__28); + match(T__29); setState(301); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__27) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__42))) != 0) || ((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & ((1L << (STRING - 76)) | (1L << (CHAR - 76)) | (1L << (BOOLEAN - 76)) | (1L << (NUMBER - 76)) | (1L << (NAME - 76)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__28) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRING - 77)) | (1L << (CHAR - 77)) | (1L << (BOOLEAN - 77)) | (1L << (NUMBER - 77)) | (1L << (NAME - 77)))) != 0)) { { setState(300); expr(0); @@ -2087,7 +2096,7 @@ public class KickCParser extends Parser { } setState(303); - match(T__29); + match(T__30); } break; case 3: @@ -2545,7 +2554,7 @@ public class KickCParser extends Parser { _prevctx = _localctx; setState(322); _la = _input.LA(1); - if ( !(_la==T__30 || _la==T__31) ) { + if ( !(_la==T__31 || _la==T__32) ) { _errHandler.recoverInline(this); } else { @@ -2563,7 +2572,7 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; setState(324); - match(T__27); + match(T__28); setState(325); expr(21); } @@ -2575,7 +2584,7 @@ public class KickCParser extends Parser { _prevctx = _localctx; setState(326); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2594,7 +2603,7 @@ public class KickCParser extends Parser { _prevctx = _localctx; setState(328); _la = _input.LA(1); - if ( !(_la==T__41 || _la==T__42) ) { + if ( !(_la==T__42 || _la==T__43) ) { _errHandler.recoverInline(this); } else { @@ -2701,7 +2710,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)"); setState(349); _la = _input.LA(1); - if ( !(_la==T__37 || _la==T__38) ) { + if ( !(_la==T__38 || _la==T__39) ) { _errHandler.recoverInline(this); } else { @@ -2721,7 +2730,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); setState(352); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__27) | (1L << T__39) | (1L << T__40))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__28) | (1L << T__40) | (1L << T__41))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2741,7 +2750,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); setState(355); _la = _input.LA(1); - if ( !(_la==T__32 || _la==T__33) ) { + if ( !(_la==T__33 || _la==T__34) ) { _errHandler.recoverInline(this); } else { @@ -2761,7 +2770,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); setState(358); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__44) | (1L << T__45) | (1L << T__46))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__42) | (1L << T__43) | (1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2781,7 +2790,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); { setState(361); - match(T__35); + match(T__36); } setState(362); expr(15); @@ -2795,7 +2804,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); { setState(364); - match(T__47); + match(T__48); } setState(365); expr(14); @@ -2809,7 +2818,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { setState(367); - match(T__48); + match(T__49); } setState(368); expr(13); @@ -2823,7 +2832,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { setState(370); - match(T__49); + match(T__50); } setState(371); expr(12); @@ -2837,7 +2846,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { setState(373); - match(T__50); + match(T__51); } setState(374); expr(11); @@ -2850,7 +2859,7 @@ public class KickCParser extends Parser { setState(375); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); setState(376); - match(T__51); + match(T__52); setState(377); expr(0); setState(378); @@ -2879,7 +2888,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); setState(385); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61) | (1L << T__62))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2902,7 +2911,7 @@ public class KickCParser extends Parser { setState(390); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__27) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__41) | (1L << T__42))) != 0) || ((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & ((1L << (STRING - 76)) | (1L << (CHAR - 76)) | (1L << (BOOLEAN - 76)) | (1L << (NUMBER - 76)) | (1L << (NAME - 76)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__28) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (STRING - 77)) | (1L << (CHAR - 77)) | (1L << (BOOLEAN - 77)) | (1L << (NUMBER - 77)) | (1L << (NAME - 77)))) != 0)) { { setState(389); parameterList(); @@ -2920,11 +2929,11 @@ public class KickCParser extends Parser { setState(393); if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)"); setState(394); - match(T__28); + match(T__29); setState(395); expr(0); setState(396); - match(T__29); + match(T__30); } break; case 15: @@ -2935,7 +2944,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)"); setState(399); _la = _input.LA(1); - if ( !(_la==T__30 || _la==T__31) ) { + if ( !(_la==T__31 || _la==T__32) ) { _errHandler.recoverInline(this); } else { @@ -3061,7 +3070,7 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 1); { setState(413); - match(T__62); + match(T__63); setState(415); _errHandler.sync(this); _la = _input.LA(1); @@ -3282,62 +3291,62 @@ public class KickCParser extends Parser { setState(445); _errHandler.sync(this); switch (_input.LA(1)) { - case T__63: + case T__64: _localctx = new AsmDirectiveResourceContext(_localctx); enterOuterAlt(_localctx, 1); { setState(430); - match(T__63); + match(T__64); setState(431); match(STRING); } break; - case T__64: + case T__65: _localctx = new AsmDirectiveUsesContext(_localctx); enterOuterAlt(_localctx, 2); { setState(432); - match(T__64); + match(T__65); setState(433); match(NAME); } break; - case T__65: + case T__66: _localctx = new AsmDirectiveClobberContext(_localctx); enterOuterAlt(_localctx, 3); { setState(434); - match(T__65); + match(T__66); setState(435); match(STRING); } break; - case T__66: + case T__67: _localctx = new AsmDirectiveBytesContext(_localctx); enterOuterAlt(_localctx, 4); { setState(436); - match(T__66); + match(T__67); setState(437); expr(0); } break; - case T__67: + case T__68: _localctx = new AsmDirectiveCyclesContext(_localctx); enterOuterAlt(_localctx, 5); { setState(438); - match(T__67); + match(T__68); setState(439); expr(0); } break; - case T__68: + case T__69: _localctx = new AsmDirectiveAddressContext(_localctx); enterOuterAlt(_localctx, 6); { setState(440); - match(T__68); + match(T__69); setState(443); _errHandler.sync(this); switch (_input.LA(1)) { @@ -3349,16 +3358,16 @@ public class KickCParser extends Parser { break; case T__3: case T__5: - case T__27: - case T__30: + case T__28: case T__31: case T__32: case T__33: case T__34: case T__35: case T__36: - case T__41: + case T__37: case T__42: + case T__43: case STRING: case CHAR: case BOOLEAN: @@ -3425,7 +3434,7 @@ public class KickCParser extends Parser { setState(450); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 35)) & ~0x3f) == 0 && ((1L << (_la - 35)) & ((1L << (T__34 - 35)) | (1L << (T__69 - 35)) | (1L << (MNEMONIC - 35)) | (1L << (NAME - 35)))) != 0)) { + while (((((_la - 36)) & ~0x3f) == 0 && ((1L << (_la - 36)) & ((1L << (T__35 - 36)) | (1L << (T__70 - 36)) | (1L << (MNEMONIC - 36)) | (1L << (NAME - 36)))) != 0)) { { { setState(447); @@ -3485,7 +3494,7 @@ public class KickCParser extends Parser { setState(456); _errHandler.sync(this); switch (_input.LA(1)) { - case T__34: + case T__35: case NAME: enterOuterAlt(_localctx, 1); { @@ -3500,7 +3509,7 @@ public class KickCParser extends Parser { asmInstruction(); } break; - case T__69: + case T__70: enterOuterAlt(_localctx, 3); { setState(455); @@ -3586,12 +3595,12 @@ public class KickCParser extends Parser { match(T__24); } break; - case T__34: + case T__35: _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { setState(460); - match(T__34); + match(T__35); setState(462); _errHandler.sync(this); _la = _input.LA(1); @@ -3710,7 +3719,7 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 1); { setState(471); - match(T__69); + match(T__70); setState(472); asmExpr(0); setState(477); @@ -3891,7 +3900,7 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 2); { setState(481); - match(T__70); + match(T__71); setState(482); asmExpr(0); } @@ -4141,31 +4150,31 @@ public class KickCParser extends Parser { setState(519); _errHandler.sync(this); switch (_input.LA(1)) { - case T__28: + case T__29: { _localctx = new AsmExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(506); - match(T__28); + match(T__29); setState(507); asmExpr(0); setState(508); - match(T__29); + match(T__30); } break; - case T__32: case T__33: - case T__41: + case T__34: case T__42: + case T__43: { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(510); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__32) | (1L << T__33) | (1L << T__41) | (1L << T__42))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__33) | (1L << T__34) | (1L << T__42) | (1L << T__43))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -4249,7 +4258,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { setState(522); - match(T__71); + match(T__72); } setState(523); asmExpr(11); @@ -4263,7 +4272,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); setState(525); _la = _input.LA(1); - if ( !(_la==T__37 || _la==T__38) ) { + if ( !(_la==T__38 || _la==T__39) ) { _errHandler.recoverInline(this); } else { @@ -4283,7 +4292,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); setState(528); _la = _input.LA(1); - if ( !(_la==T__27 || _la==T__39) ) { + if ( !(_la==T__28 || _la==T__40) ) { _errHandler.recoverInline(this); } else { @@ -4303,7 +4312,7 @@ public class KickCParser extends Parser { if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); setState(531); _la = _input.LA(1); - if ( !(_la==T__32 || _la==T__33) ) { + if ( !(_la==T__33 || _la==T__34) ) { _errHandler.recoverInline(this); } else { @@ -4407,7 +4416,7 @@ public class KickCParser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3^\u021d\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3_\u021d\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\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -4451,136 +4460,136 @@ public class KickCParser extends Parser { "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u020a\n\35\3\35"+ "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\7\35\u0218\n\35"+ "\f\35\16\35\u021b\13\35\3\35\2\5 \"8\36\2\4\6\b\n\f\16\20\22\24\26\30"+ - "\32\34\36 \"$&(*,.\60\62\64\668\2\f\3\2!\"\3\2#\'\3\2,-\3\2()\4\2\36\36"+ - "*+\3\2#$\3\2,\61\3\2\67@\4\2#$,-\4\2\36\36**\2\u026f\2:\3\2\2\2\4>\3\2"+ - "\2\2\6D\3\2\2\2\bG\3\2\2\2\nK\3\2\2\2\fR\3\2\2\2\16W\3\2\2\2\20k\3\2\2"+ - "\2\22\u0081\3\2\2\2\24\u008c\3\2\2\2\26\u00aa\3\2\2\2\30\u00ad\3\2\2\2"+ - "\32\u00fe\3\2\2\2\34\u0103\3\2\2\2\36\u011e\3\2\2\2 \u0128\3\2\2\2\"\u015c"+ - "\3\2\2\2$\u0197\3\2\2\2&\u019f\3\2\2\2(\u01a5\3\2\2\2*\u01bf\3\2\2\2,"+ - "\u01c4\3\2\2\2.\u01ca\3\2\2\2\60\u01d3\3\2\2\2\62\u01d5\3\2\2\2\64\u01d9"+ - "\3\2\2\2\66\u01f9\3\2\2\28\u0209\3\2\2\2:;\5\6\4\2;<\5\n\6\2<=\7\2\2\3"+ - "=\3\3\2\2\2>?\5,\27\2?@\7\2\2\3@\5\3\2\2\2AC\5\b\5\2BA\3\2\2\2CF\3\2\2"+ - "\2DB\3\2\2\2DE\3\2\2\2E\7\3\2\2\2FD\3\2\2\2GH\7\3\2\2HI\7N\2\2I\t\3\2"+ - "\2\2JL\5\f\7\2KJ\3\2\2\2LM\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\13\3\2\2\2OS\5"+ - "\16\b\2PS\5\20\t\2QS\5&\24\2RO\3\2\2\2RP\3\2\2\2RQ\3\2\2\2S\r\3\2\2\2"+ - "TV\5\26\f\2UT\3\2\2\2VY\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2YW\3\2\2"+ - "\2Z^\5 \21\2[]\5\26\f\2\\[\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2\2\2_a\3"+ - "\2\2\2`^\3\2\2\2ad\7Z\2\2bc\7\4\2\2ce\5\"\22\2db\3\2\2\2de\3\2\2\2ef\3"+ - "\2\2\2fg\7\5\2\2g\17\3\2\2\2hj\5\26\f\2ih\3\2\2\2jm\3\2\2\2ki\3\2\2\2"+ - "kl\3\2\2\2ln\3\2\2\2mk\3\2\2\2nr\5 \21\2oq\5\26\f\2po\3\2\2\2qt\3\2\2"+ - "\2rp\3\2\2\2rs\3\2\2\2su\3\2\2\2tr\3\2\2\2uv\7Z\2\2vx\7\6\2\2wy\5\22\n"+ - "\2xw\3\2\2\2xy\3\2\2\2yz\3\2\2\2z{\7\7\2\2{}\7\b\2\2|~\5\30\r\2}|\3\2"+ - "\2\2}~\3\2\2\2~\177\3\2\2\2\177\u0080\7\t\2\2\u0080\21\3\2\2\2\u0081\u0086"+ - "\5\24\13\2\u0082\u0083\7\n\2\2\u0083\u0085\5\24\13\2\u0084\u0082\3\2\2"+ - "\2\u0085\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2\2\2\u0087\23"+ - "\3\2\2\2\u0088\u0086\3\2\2\2\u0089\u008b\5\26\f\2\u008a\u0089\3\2\2\2"+ - "\u008b\u008e\3\2\2\2\u008c\u008a\3\2\2\2\u008c\u008d\3\2\2\2\u008d\u008f"+ - "\3\2\2\2\u008e\u008c\3\2\2\2\u008f\u0093\5 \21\2\u0090\u0092\5\26\f\2"+ - "\u0091\u0090\3\2\2\2\u0092\u0095\3\2\2\2\u0093\u0091\3\2\2\2\u0093\u0094"+ - "\3\2\2\2\u0094\u0096\3\2\2\2\u0095\u0093\3\2\2\2\u0096\u0097\7Z\2\2\u0097"+ - "\25\3\2\2\2\u0098\u00ab\7\13\2\2\u0099\u00ab\7\f\2\2\u009a\u009b\7\r\2"+ - "\2\u009b\u009c\7\6\2\2\u009c\u009d\7Q\2\2\u009d\u00ab\7\7\2\2\u009e\u009f"+ - "\7\16\2\2\u009f\u00a0\7\6\2\2\u00a0\u00a1\7Z\2\2\u00a1\u00ab\7\7\2\2\u00a2"+ - "\u00ab\7\17\2\2\u00a3\u00ab\7\20\2\2\u00a4\u00a8\7\21\2\2\u00a5\u00a6"+ - "\7\6\2\2\u00a6\u00a7\7Z\2\2\u00a7\u00a9\7\7\2\2\u00a8\u00a5\3\2\2\2\u00a8"+ - "\u00a9\3\2\2\2\u00a9\u00ab\3\2\2\2\u00aa\u0098\3\2\2\2\u00aa\u0099\3\2"+ - "\2\2\u00aa\u009a\3\2\2\2\u00aa\u009e\3\2\2\2\u00aa\u00a2\3\2\2\2\u00aa"+ - "\u00a3\3\2\2\2\u00aa\u00a4\3\2\2\2\u00ab\27\3\2\2\2\u00ac\u00ae\5\32\16"+ - "\2\u00ad\u00ac\3\2\2\2\u00ae\u00af\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0"+ - "\3\2\2\2\u00b0\31\3\2\2\2\u00b1\u00ff\5\16\b\2\u00b2\u00b4\7\b\2\2\u00b3"+ - "\u00b5\5\30\r\2\u00b4\u00b3\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\u00b6\3"+ - "\2\2\2\u00b6\u00ff\7\t\2\2\u00b7\u00b8\5\"\22\2\u00b8\u00b9\7\5\2\2\u00b9"+ - "\u00ff\3\2\2\2\u00ba\u00bb\7\22\2\2\u00bb\u00bc\7\6\2\2\u00bc\u00bd\5"+ - "\"\22\2\u00bd\u00be\7\7\2\2\u00be\u00c1\5\32\16\2\u00bf\u00c0\7\23\2\2"+ - "\u00c0\u00c2\5\32\16\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00ff"+ - "\3\2\2\2\u00c3\u00c5\5\26\f\2\u00c4\u00c3\3\2\2\2\u00c5\u00c8\3\2\2\2"+ - "\u00c6\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c9\3\2\2\2\u00c8\u00c6"+ - "\3\2\2\2\u00c9\u00ca\7\24\2\2\u00ca\u00cb\7\6\2\2\u00cb\u00cc\5\"\22\2"+ - "\u00cc\u00cd\7\7\2\2\u00cd\u00ce\5\32\16\2\u00ce\u00ff\3\2\2\2\u00cf\u00d1"+ - "\5\26\f\2\u00d0\u00cf\3\2\2\2\u00d1\u00d4\3\2\2\2\u00d2\u00d0\3\2\2\2"+ - "\u00d2\u00d3\3\2\2\2\u00d3\u00d5\3\2\2\2\u00d4\u00d2\3\2\2\2\u00d5\u00d6"+ - "\7\25\2\2\u00d6\u00d7\5\32\16\2\u00d7\u00d8\7\24\2\2\u00d8\u00d9\7\6\2"+ - "\2\u00d9\u00da\5\"\22\2\u00da\u00db\7\7\2\2\u00db\u00dc\7\5\2\2\u00dc"+ - "\u00ff\3\2\2\2\u00dd\u00df\5\26\f\2\u00de\u00dd\3\2\2\2\u00df\u00e2\3"+ - "\2\2\2\u00e0\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e3\3\2\2\2\u00e2"+ - "\u00e0\3\2\2\2\u00e3\u00e4\7\26\2\2\u00e4\u00e6\7\6\2\2\u00e5\u00e7\5"+ - "\34\17\2\u00e6\u00e5\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00e8\3\2\2\2\u00e8"+ - "\u00e9\5\36\20\2\u00e9\u00ea\7\7\2\2\u00ea\u00eb\5\32\16\2\u00eb\u00ff"+ - "\3\2\2\2\u00ec\u00ee\7\27\2\2\u00ed\u00ef\5\"\22\2\u00ee\u00ed\3\2\2\2"+ - "\u00ee\u00ef\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00ff\7\5\2\2\u00f1\u00f2"+ - "\7\30\2\2\u00f2\u00ff\7\5\2\2\u00f3\u00f4\7\31\2\2\u00f4\u00ff\7\5\2\2"+ - "\u00f5\u00f7\7\32\2\2\u00f6\u00f8\5(\25\2\u00f7\u00f6\3\2\2\2\u00f7\u00f8"+ - "\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00fa\7\b\2\2\u00fa\u00fb\5,\27\2\u00fb"+ - "\u00fc\7\t\2\2\u00fc\u00ff\3\2\2\2\u00fd\u00ff\5&\24\2\u00fe\u00b1\3\2"+ - "\2\2\u00fe\u00b2\3\2\2\2\u00fe\u00b7\3\2\2\2\u00fe\u00ba\3\2\2\2\u00fe"+ - "\u00c6\3\2\2\2\u00fe\u00d2\3\2\2\2\u00fe\u00e0\3\2\2\2\u00fe\u00ec\3\2"+ - "\2\2\u00fe\u00f1\3\2\2\2\u00fe\u00f3\3\2\2\2\u00fe\u00f5\3\2\2\2\u00fe"+ - "\u00fd\3\2\2\2\u00ff\33\3\2\2\2\u0100\u0102\5\26\f\2\u0101\u0100\3\2\2"+ - "\2\u0102\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0103\u0104\3\2\2\2\u0104\u0107"+ - "\3\2\2\2\u0105\u0103\3\2\2\2\u0106\u0108\5 \21\2\u0107\u0106\3\2\2\2\u0107"+ - "\u0108\3\2\2\2\u0108\u010c\3\2\2\2\u0109\u010b\5\26\f\2\u010a\u0109\3"+ - "\2\2\2\u010b\u010e\3\2\2\2\u010c\u010a\3\2\2\2\u010c\u010d\3\2\2\2\u010d"+ - "\u010f\3\2\2\2\u010e\u010c\3\2\2\2\u010f\u0112\7Z\2\2\u0110\u0111\7\4"+ - "\2\2\u0111\u0113\5\"\22\2\u0112\u0110\3\2\2\2\u0112\u0113\3\2\2\2\u0113"+ - "\35\3\2\2\2\u0114\u0115\7\5\2\2\u0115\u0116\5\"\22\2\u0116\u0117\7\5\2"+ - "\2\u0117\u0118\5\"\22\2\u0118\u011f\3\2\2\2\u0119\u011a\7\33\2\2\u011a"+ - "\u011b\5\"\22\2\u011b\u011c\7\34\2\2\u011c\u011d\5\"\22\2\u011d\u011f"+ - "\3\2\2\2\u011e\u0114\3\2\2\2\u011e\u0119\3\2\2\2\u011f\37\3\2\2\2\u0120"+ - "\u0121\b\21\1\2\u0121\u0122\7\6\2\2\u0122\u0123\5 \21\2\u0123\u0124\7"+ - "\7\2\2\u0124\u0129\3\2\2\2\u0125\u0129\7M\2\2\u0126\u0127\7\35\2\2\u0127"+ - "\u0129\7M\2\2\u0128\u0120\3\2\2\2\u0128\u0125\3\2\2\2\u0128\u0126\3\2"+ - "\2\2\u0129\u0137\3\2\2\2\u012a\u012b\f\5\2\2\u012b\u0136\7\36\2\2\u012c"+ - "\u012d\f\4\2\2\u012d\u012f\7\37\2\2\u012e\u0130\5\"\22\2\u012f\u012e\3"+ - "\2\2\2\u012f\u0130\3\2\2\2\u0130\u0131\3\2\2\2\u0131\u0136\7 \2\2\u0132"+ - "\u0133\f\3\2\2\u0133\u0134\7\6\2\2\u0134\u0136\7\7\2\2\u0135\u012a\3\2"+ - "\2\2\u0135\u012c\3\2\2\2\u0135\u0132\3\2\2\2\u0136\u0139\3\2\2\2\u0137"+ - "\u0135\3\2\2\2\u0137\u0138\3\2\2\2\u0138!\3\2\2\2\u0139\u0137\3\2\2\2"+ - "\u013a\u013b\b\22\1\2\u013b\u013c\7\6\2\2\u013c\u013d\5\"\22\2\u013d\u013e"+ - "\7\7\2\2\u013e\u015d\3\2\2\2\u013f\u0140\7\6\2\2\u0140\u0141\5 \21\2\u0141"+ - "\u0142\7\7\2\2\u0142\u0143\5\"\22\32\u0143\u015d\3\2\2\2\u0144\u0145\t"+ - "\2\2\2\u0145\u015d\5\"\22\31\u0146\u0147\7\36\2\2\u0147\u015d\5\"\22\27"+ - "\u0148\u0149\t\3\2\2\u0149\u015d\5\"\22\26\u014a\u014b\t\4\2\2\u014b\u015d"+ - "\5\"\22\22\u014c\u014d\7\b\2\2\u014d\u0152\5\"\22\2\u014e\u014f\7\n\2"+ - "\2\u014f\u0151\5\"\22\2\u0150\u014e\3\2\2\2\u0151\u0154\3\2\2\2\u0152"+ - "\u0150\3\2\2\2\u0152\u0153\3\2\2\2\u0153\u0155\3\2\2\2\u0154\u0152\3\2"+ - "\2\2\u0155\u0156\7\t\2\2\u0156\u015d\3\2\2\2\u0157\u015d\7Z\2\2\u0158"+ - "\u015d\7Q\2\2\u0159\u015d\7N\2\2\u015a\u015d\7O\2\2\u015b\u015d\7P\2\2"+ - "\u015c\u013a\3\2\2\2\u015c\u013f\3\2\2\2\u015c\u0144\3\2\2\2\u015c\u0146"+ - "\3\2\2\2\u015c\u0148\3\2\2\2\u015c\u014a\3\2\2\2\u015c\u014c\3\2\2\2\u015c"+ - "\u0157\3\2\2\2\u015c\u0158\3\2\2\2\u015c\u0159\3\2\2\2\u015c\u015a\3\2"+ - "\2\2\u015c\u015b\3\2\2\2\u015d\u0194\3\2\2\2\u015e\u015f\f\25\2\2\u015f"+ - "\u0160\t\5\2\2\u0160\u0193\5\"\22\26\u0161\u0162\f\24\2\2\u0162\u0163"+ - "\t\6\2\2\u0163\u0193\5\"\22\25\u0164\u0165\f\23\2\2\u0165\u0166\t\7\2"+ - "\2\u0166\u0193\5\"\22\24\u0167\u0168\f\21\2\2\u0168\u0169\t\b\2\2\u0169"+ - "\u0193\5\"\22\22\u016a\u016b\f\20\2\2\u016b\u016c\7&\2\2\u016c\u0193\5"+ - "\"\22\21\u016d\u016e\f\17\2\2\u016e\u016f\7\62\2\2\u016f\u0193\5\"\22"+ - "\20\u0170\u0171\f\16\2\2\u0171\u0172\7\63\2\2\u0172\u0193\5\"\22\17\u0173"+ - "\u0174\f\r\2\2\u0174\u0175\7\64\2\2\u0175\u0193\5\"\22\16\u0176\u0177"+ - "\f\f\2\2\u0177\u0178\7\65\2\2\u0178\u0193\5\"\22\r\u0179\u017a\f\13\2"+ - "\2\u017a\u017b\7\66\2\2\u017b\u017c\5\"\22\2\u017c\u017d\7\33\2\2\u017d"+ - "\u017e\5\"\22\f\u017e\u0193\3\2\2\2\u017f\u0180\f\n\2\2\u0180\u0181\7"+ - "\4\2\2\u0181\u0193\5\"\22\n\u0182\u0183\f\t\2\2\u0183\u0184\t\t\2\2\u0184"+ - "\u0193\5\"\22\t\u0185\u0186\f\34\2\2\u0186\u0188\7\6\2\2\u0187\u0189\5"+ - "$\23\2\u0188\u0187\3\2\2\2\u0188\u0189\3\2\2\2\u0189\u018a\3\2\2\2\u018a"+ - "\u0193\7\7\2\2\u018b\u018c\f\33\2\2\u018c\u018d\7\37\2\2\u018d\u018e\5"+ - "\"\22\2\u018e\u018f\7 \2\2\u018f\u0193\3\2\2\2\u0190\u0191\f\30\2\2\u0191"+ - "\u0193\t\2\2\2\u0192\u015e\3\2\2\2\u0192\u0161\3\2\2\2\u0192\u0164\3\2"+ - "\2\2\u0192\u0167\3\2\2\2\u0192\u016a\3\2\2\2\u0192\u016d\3\2\2\2\u0192"+ - "\u0170\3\2\2\2\u0192\u0173\3\2\2\2\u0192\u0176\3\2\2\2\u0192\u0179\3\2"+ - "\2\2\u0192\u017f\3\2\2\2\u0192\u0182\3\2\2\2\u0192\u0185\3\2\2\2\u0192"+ - "\u018b\3\2\2\2\u0192\u0190\3\2\2\2\u0193\u0196\3\2\2\2\u0194\u0192\3\2"+ - "\2\2\u0194\u0195\3\2\2\2\u0195#\3\2\2\2\u0196\u0194\3\2\2\2\u0197\u019c"+ - "\5\"\22\2\u0198\u0199\7\n\2\2\u0199\u019b\5\"\22\2\u019a\u0198\3\2\2\2"+ - "\u019b\u019e\3\2\2\2\u019c\u019a\3\2\2\2\u019c\u019d\3\2\2\2\u019d%\3"+ - "\2\2\2\u019e\u019c\3\2\2\2\u019f\u01a1\7A\2\2\u01a0\u01a2\5(\25\2\u01a1"+ - "\u01a0\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a4\7L"+ - "\2\2\u01a4\'\3\2\2\2\u01a5\u01a6\7\6\2\2\u01a6\u01ab\5*\26\2\u01a7\u01a8"+ - "\7\n\2\2\u01a8\u01aa\5*\26\2\u01a9\u01a7\3\2\2\2\u01aa\u01ad\3\2\2\2\u01ab"+ - "\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ae\3\2\2\2\u01ad\u01ab\3\2"+ - "\2\2\u01ae\u01af\7\7\2\2\u01af)\3\2\2\2\u01b0\u01b1\7B\2\2\u01b1\u01c0"+ - "\7N\2\2\u01b2\u01b3\7C\2\2\u01b3\u01c0\7Z\2\2\u01b4\u01b5\7D\2\2\u01b5"+ - "\u01c0\7N\2\2\u01b6\u01b7\7E\2\2\u01b7\u01c0\5\"\22\2\u01b8\u01b9\7F\2"+ - "\2\u01b9\u01c0\5\"\22\2\u01ba\u01bd\7G\2\2\u01bb\u01be\7\17\2\2\u01bc"+ + "\32\34\36 \"$&(*,.\60\62\64\668\2\r\3\2\35\36\3\2\"#\3\2$(\3\2-.\3\2)"+ + "*\4\2\37\37+,\3\2$%\3\2-\62\3\28A\4\2$%-.\4\2\37\37++\2\u026f\2:\3\2\2"+ + "\2\4>\3\2\2\2\6D\3\2\2\2\bG\3\2\2\2\nK\3\2\2\2\fR\3\2\2\2\16W\3\2\2\2"+ + "\20k\3\2\2\2\22\u0081\3\2\2\2\24\u008c\3\2\2\2\26\u00aa\3\2\2\2\30\u00ad"+ + "\3\2\2\2\32\u00fe\3\2\2\2\34\u0103\3\2\2\2\36\u011e\3\2\2\2 \u0128\3\2"+ + "\2\2\"\u015c\3\2\2\2$\u0197\3\2\2\2&\u019f\3\2\2\2(\u01a5\3\2\2\2*\u01bf"+ + "\3\2\2\2,\u01c4\3\2\2\2.\u01ca\3\2\2\2\60\u01d3\3\2\2\2\62\u01d5\3\2\2"+ + "\2\64\u01d9\3\2\2\2\66\u01f9\3\2\2\28\u0209\3\2\2\2:;\5\6\4\2;<\5\n\6"+ + "\2<=\7\2\2\3=\3\3\2\2\2>?\5,\27\2?@\7\2\2\3@\5\3\2\2\2AC\5\b\5\2BA\3\2"+ + "\2\2CF\3\2\2\2DB\3\2\2\2DE\3\2\2\2E\7\3\2\2\2FD\3\2\2\2GH\7\3\2\2HI\7"+ + "O\2\2I\t\3\2\2\2JL\5\f\7\2KJ\3\2\2\2LM\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\13"+ + "\3\2\2\2OS\5\16\b\2PS\5\20\t\2QS\5&\24\2RO\3\2\2\2RP\3\2\2\2RQ\3\2\2\2"+ + "S\r\3\2\2\2TV\5\26\f\2UT\3\2\2\2VY\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2"+ + "\2YW\3\2\2\2Z^\5 \21\2[]\5\26\f\2\\[\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3"+ + "\2\2\2_a\3\2\2\2`^\3\2\2\2ad\7[\2\2bc\7\4\2\2ce\5\"\22\2db\3\2\2\2de\3"+ + "\2\2\2ef\3\2\2\2fg\7\5\2\2g\17\3\2\2\2hj\5\26\f\2ih\3\2\2\2jm\3\2\2\2"+ + "ki\3\2\2\2kl\3\2\2\2ln\3\2\2\2mk\3\2\2\2nr\5 \21\2oq\5\26\f\2po\3\2\2"+ + "\2qt\3\2\2\2rp\3\2\2\2rs\3\2\2\2su\3\2\2\2tr\3\2\2\2uv\7[\2\2vx\7\6\2"+ + "\2wy\5\22\n\2xw\3\2\2\2xy\3\2\2\2yz\3\2\2\2z{\7\7\2\2{}\7\b\2\2|~\5\30"+ + "\r\2}|\3\2\2\2}~\3\2\2\2~\177\3\2\2\2\177\u0080\7\t\2\2\u0080\21\3\2\2"+ + "\2\u0081\u0086\5\24\13\2\u0082\u0083\7\n\2\2\u0083\u0085\5\24\13\2\u0084"+ + "\u0082\3\2\2\2\u0085\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2"+ + "\2\2\u0087\23\3\2\2\2\u0088\u0086\3\2\2\2\u0089\u008b\5\26\f\2\u008a\u0089"+ + "\3\2\2\2\u008b\u008e\3\2\2\2\u008c\u008a\3\2\2\2\u008c\u008d\3\2\2\2\u008d"+ + "\u008f\3\2\2\2\u008e\u008c\3\2\2\2\u008f\u0093\5 \21\2\u0090\u0092\5\26"+ + "\f\2\u0091\u0090\3\2\2\2\u0092\u0095\3\2\2\2\u0093\u0091\3\2\2\2\u0093"+ + "\u0094\3\2\2\2\u0094\u0096\3\2\2\2\u0095\u0093\3\2\2\2\u0096\u0097\7["+ + "\2\2\u0097\25\3\2\2\2\u0098\u00ab\7\13\2\2\u0099\u00ab\7\f\2\2\u009a\u009b"+ + "\7\r\2\2\u009b\u009c\7\6\2\2\u009c\u009d\7R\2\2\u009d\u00ab\7\7\2\2\u009e"+ + "\u009f\7\16\2\2\u009f\u00a0\7\6\2\2\u00a0\u00a1\7[\2\2\u00a1\u00ab\7\7"+ + "\2\2\u00a2\u00ab\7\17\2\2\u00a3\u00ab\7\20\2\2\u00a4\u00a8\7\21\2\2\u00a5"+ + "\u00a6\7\6\2\2\u00a6\u00a7\7[\2\2\u00a7\u00a9\7\7\2\2\u00a8\u00a5\3\2"+ + "\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00ab\3\2\2\2\u00aa\u0098\3\2\2\2\u00aa"+ + "\u0099\3\2\2\2\u00aa\u009a\3\2\2\2\u00aa\u009e\3\2\2\2\u00aa\u00a2\3\2"+ + "\2\2\u00aa\u00a3\3\2\2\2\u00aa\u00a4\3\2\2\2\u00ab\27\3\2\2\2\u00ac\u00ae"+ + "\5\32\16\2\u00ad\u00ac\3\2\2\2\u00ae\u00af\3\2\2\2\u00af\u00ad\3\2\2\2"+ + "\u00af\u00b0\3\2\2\2\u00b0\31\3\2\2\2\u00b1\u00ff\5\16\b\2\u00b2\u00b4"+ + "\7\b\2\2\u00b3\u00b5\5\30\r\2\u00b4\u00b3\3\2\2\2\u00b4\u00b5\3\2\2\2"+ + "\u00b5\u00b6\3\2\2\2\u00b6\u00ff\7\t\2\2\u00b7\u00b8\5\"\22\2\u00b8\u00b9"+ + "\7\5\2\2\u00b9\u00ff\3\2\2\2\u00ba\u00bb\7\22\2\2\u00bb\u00bc\7\6\2\2"+ + "\u00bc\u00bd\5\"\22\2\u00bd\u00be\7\7\2\2\u00be\u00c1\5\32\16\2\u00bf"+ + "\u00c0\7\23\2\2\u00c0\u00c2\5\32\16\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2"+ + "\3\2\2\2\u00c2\u00ff\3\2\2\2\u00c3\u00c5\5\26\f\2\u00c4\u00c3\3\2\2\2"+ + "\u00c5\u00c8\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c9"+ + "\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c9\u00ca\7\24\2\2\u00ca\u00cb\7\6\2\2"+ + "\u00cb\u00cc\5\"\22\2\u00cc\u00cd\7\7\2\2\u00cd\u00ce\5\32\16\2\u00ce"+ + "\u00ff\3\2\2\2\u00cf\u00d1\5\26\f\2\u00d0\u00cf\3\2\2\2\u00d1\u00d4\3"+ + "\2\2\2\u00d2\u00d0\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u00d5\3\2\2\2\u00d4"+ + "\u00d2\3\2\2\2\u00d5\u00d6\7\25\2\2\u00d6\u00d7\5\32\16\2\u00d7\u00d8"+ + "\7\24\2\2\u00d8\u00d9\7\6\2\2\u00d9\u00da\5\"\22\2\u00da\u00db\7\7\2\2"+ + "\u00db\u00dc\7\5\2\2\u00dc\u00ff\3\2\2\2\u00dd\u00df\5\26\f\2\u00de\u00dd"+ + "\3\2\2\2\u00df\u00e2\3\2\2\2\u00e0\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1"+ + "\u00e3\3\2\2\2\u00e2\u00e0\3\2\2\2\u00e3\u00e4\7\26\2\2\u00e4\u00e6\7"+ + "\6\2\2\u00e5\u00e7\5\34\17\2\u00e6\u00e5\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7"+ + "\u00e8\3\2\2\2\u00e8\u00e9\5\36\20\2\u00e9\u00ea\7\7\2\2\u00ea\u00eb\5"+ + "\32\16\2\u00eb\u00ff\3\2\2\2\u00ec\u00ee\7\27\2\2\u00ed\u00ef\5\"\22\2"+ + "\u00ee\u00ed\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00ff"+ + "\7\5\2\2\u00f1\u00f2\7\30\2\2\u00f2\u00ff\7\5\2\2\u00f3\u00f4\7\31\2\2"+ + "\u00f4\u00ff\7\5\2\2\u00f5\u00f7\7\32\2\2\u00f6\u00f8\5(\25\2\u00f7\u00f6"+ + "\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00fa\7\b\2\2\u00fa"+ + "\u00fb\5,\27\2\u00fb\u00fc\7\t\2\2\u00fc\u00ff\3\2\2\2\u00fd\u00ff\5&"+ + "\24\2\u00fe\u00b1\3\2\2\2\u00fe\u00b2\3\2\2\2\u00fe\u00b7\3\2\2\2\u00fe"+ + "\u00ba\3\2\2\2\u00fe\u00c6\3\2\2\2\u00fe\u00d2\3\2\2\2\u00fe\u00e0\3\2"+ + "\2\2\u00fe\u00ec\3\2\2\2\u00fe\u00f1\3\2\2\2\u00fe\u00f3\3\2\2\2\u00fe"+ + "\u00f5\3\2\2\2\u00fe\u00fd\3\2\2\2\u00ff\33\3\2\2\2\u0100\u0102\5\26\f"+ + "\2\u0101\u0100\3\2\2\2\u0102\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0103\u0104"+ + "\3\2\2\2\u0104\u0107\3\2\2\2\u0105\u0103\3\2\2\2\u0106\u0108\5 \21\2\u0107"+ + "\u0106\3\2\2\2\u0107\u0108\3\2\2\2\u0108\u010c\3\2\2\2\u0109\u010b\5\26"+ + "\f\2\u010a\u0109\3\2\2\2\u010b\u010e\3\2\2\2\u010c\u010a\3\2\2\2\u010c"+ + "\u010d\3\2\2\2\u010d\u010f\3\2\2\2\u010e\u010c\3\2\2\2\u010f\u0112\7["+ + "\2\2\u0110\u0111\7\4\2\2\u0111\u0113\5\"\22\2\u0112\u0110\3\2\2\2\u0112"+ + "\u0113\3\2\2\2\u0113\35\3\2\2\2\u0114\u0115\7\5\2\2\u0115\u0116\5\"\22"+ + "\2\u0116\u0117\7\5\2\2\u0117\u0118\5\"\22\2\u0118\u011f\3\2\2\2\u0119"+ + "\u011a\7\33\2\2\u011a\u011b\5\"\22\2\u011b\u011c\7\34\2\2\u011c\u011d"+ + "\5\"\22\2\u011d\u011f\3\2\2\2\u011e\u0114\3\2\2\2\u011e\u0119\3\2\2\2"+ + "\u011f\37\3\2\2\2\u0120\u0121\b\21\1\2\u0121\u0122\7\6\2\2\u0122\u0123"+ + "\5 \21\2\u0123\u0124\7\7\2\2\u0124\u0129\3\2\2\2\u0125\u0129\7N\2\2\u0126"+ + "\u0127\t\2\2\2\u0127\u0129\7N\2\2\u0128\u0120\3\2\2\2\u0128\u0125\3\2"+ + "\2\2\u0128\u0126\3\2\2\2\u0129\u0137\3\2\2\2\u012a\u012b\f\5\2\2\u012b"+ + "\u0136\7\37\2\2\u012c\u012d\f\4\2\2\u012d\u012f\7 \2\2\u012e\u0130\5\""+ + "\22\2\u012f\u012e\3\2\2\2\u012f\u0130\3\2\2\2\u0130\u0131\3\2\2\2\u0131"+ + "\u0136\7!\2\2\u0132\u0133\f\3\2\2\u0133\u0134\7\6\2\2\u0134\u0136\7\7"+ + "\2\2\u0135\u012a\3\2\2\2\u0135\u012c\3\2\2\2\u0135\u0132\3\2\2\2\u0136"+ + "\u0139\3\2\2\2\u0137\u0135\3\2\2\2\u0137\u0138\3\2\2\2\u0138!\3\2\2\2"+ + "\u0139\u0137\3\2\2\2\u013a\u013b\b\22\1\2\u013b\u013c\7\6\2\2\u013c\u013d"+ + "\5\"\22\2\u013d\u013e\7\7\2\2\u013e\u015d\3\2\2\2\u013f\u0140\7\6\2\2"+ + "\u0140\u0141\5 \21\2\u0141\u0142\7\7\2\2\u0142\u0143\5\"\22\32\u0143\u015d"+ + "\3\2\2\2\u0144\u0145\t\3\2\2\u0145\u015d\5\"\22\31\u0146\u0147\7\37\2"+ + "\2\u0147\u015d\5\"\22\27\u0148\u0149\t\4\2\2\u0149\u015d\5\"\22\26\u014a"+ + "\u014b\t\5\2\2\u014b\u015d\5\"\22\22\u014c\u014d\7\b\2\2\u014d\u0152\5"+ + "\"\22\2\u014e\u014f\7\n\2\2\u014f\u0151\5\"\22\2\u0150\u014e\3\2\2\2\u0151"+ + "\u0154\3\2\2\2\u0152\u0150\3\2\2\2\u0152\u0153\3\2\2\2\u0153\u0155\3\2"+ + "\2\2\u0154\u0152\3\2\2\2\u0155\u0156\7\t\2\2\u0156\u015d\3\2\2\2\u0157"+ + "\u015d\7[\2\2\u0158\u015d\7R\2\2\u0159\u015d\7O\2\2\u015a\u015d\7P\2\2"+ + "\u015b\u015d\7Q\2\2\u015c\u013a\3\2\2\2\u015c\u013f\3\2\2\2\u015c\u0144"+ + "\3\2\2\2\u015c\u0146\3\2\2\2\u015c\u0148\3\2\2\2\u015c\u014a\3\2\2\2\u015c"+ + "\u014c\3\2\2\2\u015c\u0157\3\2\2\2\u015c\u0158\3\2\2\2\u015c\u0159\3\2"+ + "\2\2\u015c\u015a\3\2\2\2\u015c\u015b\3\2\2\2\u015d\u0194\3\2\2\2\u015e"+ + "\u015f\f\25\2\2\u015f\u0160\t\6\2\2\u0160\u0193\5\"\22\26\u0161\u0162"+ + "\f\24\2\2\u0162\u0163\t\7\2\2\u0163\u0193\5\"\22\25\u0164\u0165\f\23\2"+ + "\2\u0165\u0166\t\b\2\2\u0166\u0193\5\"\22\24\u0167\u0168\f\21\2\2\u0168"+ + "\u0169\t\t\2\2\u0169\u0193\5\"\22\22\u016a\u016b\f\20\2\2\u016b\u016c"+ + "\7\'\2\2\u016c\u0193\5\"\22\21\u016d\u016e\f\17\2\2\u016e\u016f\7\63\2"+ + "\2\u016f\u0193\5\"\22\20\u0170\u0171\f\16\2\2\u0171\u0172\7\64\2\2\u0172"+ + "\u0193\5\"\22\17\u0173\u0174\f\r\2\2\u0174\u0175\7\65\2\2\u0175\u0193"+ + "\5\"\22\16\u0176\u0177\f\f\2\2\u0177\u0178\7\66\2\2\u0178\u0193\5\"\22"+ + "\r\u0179\u017a\f\13\2\2\u017a\u017b\7\67\2\2\u017b\u017c\5\"\22\2\u017c"+ + "\u017d\7\33\2\2\u017d\u017e\5\"\22\f\u017e\u0193\3\2\2\2\u017f\u0180\f"+ + "\n\2\2\u0180\u0181\7\4\2\2\u0181\u0193\5\"\22\n\u0182\u0183\f\t\2\2\u0183"+ + "\u0184\t\n\2\2\u0184\u0193\5\"\22\t\u0185\u0186\f\34\2\2\u0186\u0188\7"+ + "\6\2\2\u0187\u0189\5$\23\2\u0188\u0187\3\2\2\2\u0188\u0189\3\2\2\2\u0189"+ + "\u018a\3\2\2\2\u018a\u0193\7\7\2\2\u018b\u018c\f\33\2\2\u018c\u018d\7"+ + " \2\2\u018d\u018e\5\"\22\2\u018e\u018f\7!\2\2\u018f\u0193\3\2\2\2\u0190"+ + "\u0191\f\30\2\2\u0191\u0193\t\3\2\2\u0192\u015e\3\2\2\2\u0192\u0161\3"+ + "\2\2\2\u0192\u0164\3\2\2\2\u0192\u0167\3\2\2\2\u0192\u016a\3\2\2\2\u0192"+ + "\u016d\3\2\2\2\u0192\u0170\3\2\2\2\u0192\u0173\3\2\2\2\u0192\u0176\3\2"+ + "\2\2\u0192\u0179\3\2\2\2\u0192\u017f\3\2\2\2\u0192\u0182\3\2\2\2\u0192"+ + "\u0185\3\2\2\2\u0192\u018b\3\2\2\2\u0192\u0190\3\2\2\2\u0193\u0196\3\2"+ + "\2\2\u0194\u0192\3\2\2\2\u0194\u0195\3\2\2\2\u0195#\3\2\2\2\u0196\u0194"+ + "\3\2\2\2\u0197\u019c\5\"\22\2\u0198\u0199\7\n\2\2\u0199\u019b\5\"\22\2"+ + "\u019a\u0198\3\2\2\2\u019b\u019e\3\2\2\2\u019c\u019a\3\2\2\2\u019c\u019d"+ + "\3\2\2\2\u019d%\3\2\2\2\u019e\u019c\3\2\2\2\u019f\u01a1\7B\2\2\u01a0\u01a2"+ + "\5(\25\2\u01a1\u01a0\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3"+ + "\u01a4\7M\2\2\u01a4\'\3\2\2\2\u01a5\u01a6\7\6\2\2\u01a6\u01ab\5*\26\2"+ + "\u01a7\u01a8\7\n\2\2\u01a8\u01aa\5*\26\2\u01a9\u01a7\3\2\2\2\u01aa\u01ad"+ + "\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ae\3\2\2\2\u01ad"+ + "\u01ab\3\2\2\2\u01ae\u01af\7\7\2\2\u01af)\3\2\2\2\u01b0\u01b1\7C\2\2\u01b1"+ + "\u01c0\7O\2\2\u01b2\u01b3\7D\2\2\u01b3\u01c0\7[\2\2\u01b4\u01b5\7E\2\2"+ + "\u01b5\u01c0\7O\2\2\u01b6\u01b7\7F\2\2\u01b7\u01c0\5\"\22\2\u01b8\u01b9"+ + "\7G\2\2\u01b9\u01c0\5\"\22\2\u01ba\u01bd\7H\2\2\u01bb\u01be\7\17\2\2\u01bc"+ "\u01be\5\"\22\2\u01bd\u01bb\3\2\2\2\u01bd\u01bc\3\2\2\2\u01be\u01c0\3"+ "\2\2\2\u01bf\u01b0\3\2\2\2\u01bf\u01b2\3\2\2\2\u01bf\u01b4\3\2\2\2\u01bf"+ "\u01b6\3\2\2\2\u01bf\u01b8\3\2\2\2\u01bf\u01ba\3\2\2\2\u01c0+\3\2\2\2"+ @@ -4588,38 +4597,38 @@ public class KickCParser extends Parser { "\3\2\2\2\u01c4\u01c5\3\2\2\2\u01c5-\3\2\2\2\u01c6\u01c4\3\2\2\2\u01c7"+ "\u01cb\5\60\31\2\u01c8\u01cb\5\62\32\2\u01c9\u01cb\5\64\33\2\u01ca\u01c7"+ "\3\2\2\2\u01ca\u01c8\3\2\2\2\u01ca\u01c9\3\2\2\2\u01cb/\3\2\2\2\u01cc"+ - "\u01cd\7Z\2\2\u01cd\u01d4\7\33\2\2\u01ce\u01d0\7%\2\2\u01cf\u01d1\7Z\2"+ + "\u01cd\7[\2\2\u01cd\u01d4\7\33\2\2\u01ce\u01d0\7&\2\2\u01cf\u01d1\7[\2"+ "\2\u01d0\u01cf\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d2\3\2\2\2\u01d2\u01d4"+ "\7\33\2\2\u01d3\u01cc\3\2\2\2\u01d3\u01ce\3\2\2\2\u01d4\61\3\2\2\2\u01d5"+ - "\u01d7\7K\2\2\u01d6\u01d8\5\66\34\2\u01d7\u01d6\3\2\2\2\u01d7\u01d8\3"+ - "\2\2\2\u01d8\63\3\2\2\2\u01d9\u01da\7H\2\2\u01da\u01df\58\35\2\u01db\u01dc"+ + "\u01d7\7L\2\2\u01d6\u01d8\5\66\34\2\u01d7\u01d6\3\2\2\2\u01d7\u01d8\3"+ + "\2\2\2\u01d8\63\3\2\2\2\u01d9\u01da\7I\2\2\u01da\u01df\58\35\2\u01db\u01dc"+ "\7\n\2\2\u01dc\u01de\58\35\2\u01dd\u01db\3\2\2\2\u01de\u01e1\3\2\2\2\u01df"+ "\u01dd\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\65\3\2\2\2\u01e1\u01df\3\2\2"+ - "\2\u01e2\u01fa\58\35\2\u01e3\u01e4\7I\2\2\u01e4\u01fa\58\35\2\u01e5\u01e6"+ - "\58\35\2\u01e6\u01e7\7\n\2\2\u01e7\u01e8\7Z\2\2\u01e8\u01fa\3\2\2\2\u01e9"+ + "\2\u01e2\u01fa\58\35\2\u01e3\u01e4\7J\2\2\u01e4\u01fa\58\35\2\u01e5\u01e6"+ + "\58\35\2\u01e6\u01e7\7\n\2\2\u01e7\u01e8\7[\2\2\u01e8\u01fa\3\2\2\2\u01e9"+ "\u01ea\7\6\2\2\u01ea\u01eb\58\35\2\u01eb\u01ec\7\7\2\2\u01ec\u01ed\7\n"+ - "\2\2\u01ed\u01ee\7Z\2\2\u01ee\u01fa\3\2\2\2\u01ef\u01f0\7\6\2\2\u01f0"+ - "\u01f1\58\35\2\u01f1\u01f2\7\n\2\2\u01f2\u01f3\7Z\2\2\u01f3\u01f4\7\7"+ + "\2\2\u01ed\u01ee\7[\2\2\u01ee\u01fa\3\2\2\2\u01ef\u01f0\7\6\2\2\u01f0"+ + "\u01f1\58\35\2\u01f1\u01f2\7\n\2\2\u01f2\u01f3\7[\2\2\u01f3\u01f4\7\7"+ "\2\2\u01f4\u01fa\3\2\2\2\u01f5\u01f6\7\6\2\2\u01f6\u01f7\58\35\2\u01f7"+ "\u01f8\7\7\2\2\u01f8\u01fa\3\2\2\2\u01f9\u01e2\3\2\2\2\u01f9\u01e3\3\2"+ "\2\2\u01f9\u01e5\3\2\2\2\u01f9\u01e9\3\2\2\2\u01f9\u01ef\3\2\2\2\u01f9"+ - "\u01f5\3\2\2\2\u01fa\67\3\2\2\2\u01fb\u01fc\b\35\1\2\u01fc\u01fd\7\37"+ - "\2\2\u01fd\u01fe\58\35\2\u01fe\u01ff\7 \2\2\u01ff\u020a\3\2\2\2\u0200"+ - "\u0201\t\n\2\2\u0201\u020a\58\35\n\u0202\u020a\7Z\2\2\u0203\u020a\7[\2"+ - "\2\u0204\u0205\7\b\2\2\u0205\u0206\7Z\2\2\u0206\u020a\7\t\2\2\u0207\u020a"+ - "\7Q\2\2\u0208\u020a\7O\2\2\u0209\u01fb\3\2\2\2\u0209\u0200\3\2\2\2\u0209"+ - "\u0202\3\2\2\2\u0209\u0203\3\2\2\2\u0209\u0204\3\2\2\2\u0209\u0207\3\2"+ - "\2\2\u0209\u0208\3\2\2\2\u020a\u0219\3\2\2\2\u020b\u020c\f\f\2\2\u020c"+ - "\u020d\7J\2\2\u020d\u0218\58\35\r\u020e\u020f\f\13\2\2\u020f\u0210\t\5"+ - "\2\2\u0210\u0218\58\35\f\u0211\u0212\f\t\2\2\u0212\u0213\t\13\2\2\u0213"+ - "\u0218\58\35\n\u0214\u0215\f\b\2\2\u0215\u0216\t\7\2\2\u0216\u0218\58"+ - "\35\t\u0217\u020b\3\2\2\2\u0217\u020e\3\2\2\2\u0217\u0211\3\2\2\2\u0217"+ - "\u0214\3\2\2\2\u0218\u021b\3\2\2\2\u0219\u0217\3\2\2\2\u0219\u021a\3\2"+ - "\2\2\u021a9\3\2\2\2\u021b\u0219\3\2\2\28DMRW^dkrx}\u0086\u008c\u0093\u00a8"+ - "\u00aa\u00af\u00b4\u00c1\u00c6\u00d2\u00e0\u00e6\u00ee\u00f7\u00fe\u0103"+ - "\u0107\u010c\u0112\u011e\u0128\u012f\u0135\u0137\u0152\u015c\u0188\u0192"+ - "\u0194\u019c\u01a1\u01ab\u01bd\u01bf\u01c4\u01ca\u01d0\u01d3\u01d7\u01df"+ - "\u01f9\u0209\u0217\u0219"; + "\u01f5\3\2\2\2\u01fa\67\3\2\2\2\u01fb\u01fc\b\35\1\2\u01fc\u01fd\7 \2"+ + "\2\u01fd\u01fe\58\35\2\u01fe\u01ff\7!\2\2\u01ff\u020a\3\2\2\2\u0200\u0201"+ + "\t\13\2\2\u0201\u020a\58\35\n\u0202\u020a\7[\2\2\u0203\u020a\7\\\2\2\u0204"+ + "\u0205\7\b\2\2\u0205\u0206\7[\2\2\u0206\u020a\7\t\2\2\u0207\u020a\7R\2"+ + "\2\u0208\u020a\7P\2\2\u0209\u01fb\3\2\2\2\u0209\u0200\3\2\2\2\u0209\u0202"+ + "\3\2\2\2\u0209\u0203\3\2\2\2\u0209\u0204\3\2\2\2\u0209\u0207\3\2\2\2\u0209"+ + "\u0208\3\2\2\2\u020a\u0219\3\2\2\2\u020b\u020c\f\f\2\2\u020c\u020d\7K"+ + "\2\2\u020d\u0218\58\35\r\u020e\u020f\f\13\2\2\u020f\u0210\t\6\2\2\u0210"+ + "\u0218\58\35\f\u0211\u0212\f\t\2\2\u0212\u0213\t\f\2\2\u0213\u0218\58"+ + "\35\n\u0214\u0215\f\b\2\2\u0215\u0216\t\b\2\2\u0216\u0218\58\35\t\u0217"+ + "\u020b\3\2\2\2\u0217\u020e\3\2\2\2\u0217\u0211\3\2\2\2\u0217\u0214\3\2"+ + "\2\2\u0218\u021b\3\2\2\2\u0219\u0217\3\2\2\2\u0219\u021a\3\2\2\2\u021a"+ + "9\3\2\2\2\u021b\u0219\3\2\2\28DMRW^dkrx}\u0086\u008c\u0093\u00a8\u00aa"+ + "\u00af\u00b4\u00c1\u00c6\u00d2\u00e0\u00e6\u00ee\u00f7\u00fe\u0103\u0107"+ + "\u010c\u0112\u011e\u0128\u012f\u0135\u0137\u0152\u015c\u0188\u0192\u0194"+ + "\u019c\u01a1\u01ab\u01bd\u01bf\u01c4\u01ca\u01d0\u01d3\u01d7\u01df\u01f9"+ + "\u0209\u0217\u0219"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 62dd76360..e1fba9f5f 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -647,7 +647,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { } public Label getOrCreateBreakLabel() { - if(breakLabel==null) { + if(breakLabel == null) { breakLabel = loopScope.addLabelIntermediate(); } return breakLabel; @@ -662,7 +662,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { } public Label getOrCreateContinueLabel() { - if(continueLabel==null) { + if(continueLabel == null) { continueLabel = loopScope.addLabelIntermediate(); } return continueLabel; @@ -825,14 +825,14 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { } private void addLoopBreakLabel(Loop loop, ParserRuleContext ctx) { - if(loop.getBreakLabel()!=null) { + if(loop.getBreakLabel() != null) { StatementLabel breakTarget = new StatementLabel(loop.getBreakLabel().getRef(), new StatementSource(ctx), Comment.NO_COMMENTS); sequence.addStatement(breakTarget); } } private void addLoopContinueLabel(Loop loop, ParserRuleContext ctx) { - if(loop.getContinueLabel()!=null) { + if(loop.getContinueLabel() != null) { StatementLabel continueTarget = new StatementLabel(loop.getContinueLabel().getRef(), new StatementSource(ctx), Comment.NO_COMMENTS); sequence.addStatement(continueTarget); } @@ -1033,7 +1033,8 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { @Override public SymbolType visitTypeSignedSimple(KickCParser.TypeSignedSimpleContext ctx) { - return SymbolType.get("signed " + ctx.SIMPLETYPE().getText()); + String signedness = ctx.getChild(0).getText(); + return SymbolType.get(signedness + " " + ctx.SIMPLETYPE().getText()); } @Override @@ -1220,7 +1221,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { Label trueLabel = getCurrentScope().addLabelIntermediate(); Label falseLabel = getCurrentScope().addLabelIntermediate(); Label endJumpLabel = getCurrentScope().addLabelIntermediate(); - sequence.addStatement(new StatementConditionalJump(condValue, trueLabel.getRef(), new StatementSource(ctx), Comment.NO_COMMENTS)); + sequence.addStatement(new StatementConditionalJump(condValue, trueLabel.getRef(), new StatementSource(ctx), Comment.NO_COMMENTS)); sequence.addStatement(new StatementLabel(falseLabel.getRef(), new StatementSource(ctx), Comment.NO_COMMENTS)); RValue falseValue = (RValue) this.visit(ctx.expr(2)); VariableRef falseVar = getCurrentScope().addVariableIntermediate().getRef(); diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 110d86724..e0d843fbf 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -32,6 +32,11 @@ public class TestPrograms { public TestPrograms() { } + @Test + public void testCTypes() throws IOException, URISyntaxException { + compileAndCompare("c-types"); + } + @Test public void testPlus0() throws IOException, URISyntaxException { compileAndCompare("plus-0"); diff --git a/src/test/kc/c-types.kc b/src/test/kc/c-types.kc new file mode 100644 index 000000000..f3b71dcc9 --- /dev/null +++ b/src/test/kc/c-types.kc @@ -0,0 +1,71 @@ +// Tests the different standard C types + +import "print" + +void main() { + print_cls(); + testChar(); + testShort(); + testInt(); + testLong(); +} + +void testChar() { + unsigned char u = 14; + char n = -14; + signed char s = -14; + + print_str("char: @"); + print_byte(u); + print_char(' '); + print_sbyte(n); + print_char(' '); + print_sbyte(s); + print_ln(); + +} + +void testShort() { + unsigned short u = 1400; + short n = -1400; + signed short s = -1400; + + print_str("short: @"); + print_word(u); + print_char(' '); + print_sword(n); + print_char(' '); + print_sword(s); + print_ln(); + +} + +void testInt() { + unsigned int u = 1400; + int n = -1400; + signed int s = -1400; + + print_str("int: @"); + print_word(u); + print_char(' '); + print_sword(n); + print_char(' '); + print_sword(s); + print_ln(); + +} + +void testLong() { + unsigned long u = 140000; + long n = -140000; + signed long s = -140000; + + print_str("long: @"); + print_dword(u); + print_char(' '); + print_sdword(n); + print_char(' '); + print_sdword(s); + print_ln(); + +} diff --git a/src/test/ref/c-types.asm b/src/test/ref/c-types.asm new file mode 100644 index 000000000..f2fae00a3 --- /dev/null +++ b/src/test/ref/c-types.asm @@ -0,0 +1,359 @@ +// Tests the different standard C types +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label print_char_cursor = $a + .label print_line_cursor = 2 +main: { + jsr print_cls + jsr testChar + jsr testShort + jsr testInt + jsr testLong + rts +} +testLong: { + .const u = $222e0 + .const n = -$222e0 + .const s = -$222e0 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + lda #str + sta print_str.str+1 + jsr print_str + lda #u + sta print_dword.dw+1 + lda #>$10 + sta print_dword.dw+2 + lda #>u>>$10 + sta print_dword.dw+3 + jsr print_dword + lda #' ' + jsr print_char + lda #n + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>n>>$10 + sta print_sdword.dw+3 + jsr print_sdword + lda #' ' + jsr print_char + lda #s + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>s>>$10 + sta print_sdword.dw+3 + jsr print_sdword + jsr print_ln + rts + str: .text "long: @" +} +// Print a newline +print_ln: { + b1: + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + lda print_line_cursor+1 + cmp print_char_cursor+1 + bcc b1 + bne !+ + lda print_line_cursor + cmp print_char_cursor + bcc b1 + !: + rts +} +// Print a signed dword as HEX +// print_sdword(signed dword zeropage(4) dw) +print_sdword: { + .label dw = 4 + lda dw+3 + bpl b1 + lda #'-' + jsr print_char + sec + lda dw + eor #$ff + adc #0 + sta dw + lda dw+1 + eor #$ff + adc #0 + sta dw+1 + lda dw+2 + eor #$ff + adc #0 + sta dw+2 + lda dw+3 + eor #$ff + adc #0 + sta dw+3 + b1: + jsr print_dword + rts +} +// Print a dword as HEX +// print_dword(dword zeropage(4) dw) +print_dword: { + .label dw = 4 + lda dw+2 + sta print_word.w + lda dw+3 + sta print_word.w+1 + jsr print_word + lda dw + sta print_word.w + lda dw+1 + sta print_word.w+1 + jsr print_word + rts +} +// Print a word as HEX +// print_word(word zeropage(8) w) +print_word: { + .label w = 8 + lda w+1 + tax + jsr print_byte + lda w + tax + jsr print_byte + rts +} +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + txa + lsr + lsr + lsr + lsr + tay + lda print_hextab,y + jsr print_char + lda #$f + axs #0 + lda print_hextab,x + jsr print_char + rts +} +// Print a single char +// print_char(byte register(A) ch) +print_char: { + ldy #0 + sta (print_char_cursor),y + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + rts +} +// Print a zero-terminated string +// print_str(byte* zeropage(8) str) +print_str: { + .label str = 8 + b1: + ldy #0 + lda (str),y + cmp #'@' + bne b2 + rts + b2: + ldy #0 + lda (str),y + sta (print_char_cursor),y + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + inc str + bne !+ + inc str+1 + !: + jmp b1 +} +testInt: { + .const u = $578 + .const n = -$578 + .const s = -$578 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + lda #str + sta print_str.str+1 + jsr print_str + lda #u + sta print_word.w+1 + jsr print_word + lda #' ' + jsr print_char + lda #n + sta print_sword.w+1 + jsr print_sword + lda #' ' + jsr print_char + lda #s + sta print_sword.w+1 + jsr print_sword + jsr print_ln + rts + str: .text "int: @" +} +// Print a signed word as HEX +// print_sword(signed word zeropage(8) w) +print_sword: { + .label w = 8 + lda w+1 + bpl b1 + lda #'-' + jsr print_char + sec + lda w + eor #$ff + adc #0 + sta w + lda w+1 + eor #$ff + adc #0 + sta w+1 + b1: + jsr print_word + rts +} +testShort: { + .const u = $578 + .const n = -$578 + .const s = -$578 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + lda #str + sta print_str.str+1 + jsr print_str + lda #u + sta print_word.w+1 + jsr print_word + lda #' ' + jsr print_char + lda #n + sta print_sword.w+1 + jsr print_sword + lda #' ' + jsr print_char + lda #s + sta print_sword.w+1 + jsr print_sword + jsr print_ln + rts + str: .text "short: @" +} +testChar: { + .const u = $e + .const n = -$e + .const s = -$e + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + lda #str + sta print_str.str+1 + jsr print_str + ldx #u + jsr print_byte + lda #' ' + jsr print_char + ldx #n + jsr print_sbyte + lda #' ' + jsr print_char + ldx #s + jsr print_sbyte + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + rts + str: .text "char: @" +} +// Print a signed byte as HEX +// print_sbyte(signed byte register(X) b) +print_sbyte: { + cpx #0 + bmi b1 + lda #' ' + jsr print_char + b2: + jsr print_byte + rts + b1: + lda #'-' + jsr print_char + txa + eor #$ff + clc + adc #1 + tax + jmp b2 +} +// Clear the screen. Also resets current line/char cursor. +print_cls: { + .label sc = 2 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + b1: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: + lda sc+1 + cmp #>$400+$3e8 + bne b1 + lda sc + cmp #<$400+$3e8 + bne b1 + rts +} + print_hextab: .text "0123456789abcdef" diff --git a/src/test/ref/c-types.cfg b/src/test/ref/c-types.cfg new file mode 100644 index 000000000..c9dec3e70 --- /dev/null +++ b/src/test/ref/c-types.cfg @@ -0,0 +1,307 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + [5] call print_cls + to:main::@1 +main::@1: scope:[main] from main + [6] phi() + [7] call testChar + to:main::@2 +main::@2: scope:[main] from main::@1 + [8] phi() + [9] call testShort + to:main::@3 +main::@3: scope:[main] from main::@2 + [10] phi() + [11] call testInt + to:main::@4 +main::@4: scope:[main] from main::@3 + [12] phi() + [13] call testLong + to:main::@return +main::@return: scope:[main] from main::@4 + [14] return + to:@return +testLong: scope:[testLong] from main::@4 + [15] (byte*~) print_char_cursor#181 ← (byte*) print_line_cursor#1 + [16] call print_str + to:testLong::@1 +testLong::@1: scope:[testLong] from testLong + [17] phi() + [18] call print_dword + to:testLong::@2 +testLong::@2: scope:[testLong] from testLong::@1 + [19] phi() + [20] call print_char + to:testLong::@3 +testLong::@3: scope:[testLong] from testLong::@2 + [21] phi() + [22] call print_sdword + to:testLong::@4 +testLong::@4: scope:[testLong] from testLong::@3 + [23] phi() + [24] call print_char + to:testLong::@5 +testLong::@5: scope:[testLong] from testLong::@4 + [25] phi() + [26] call print_sdword + to:testLong::@6 +testLong::@6: scope:[testLong] from testLong::@5 + [27] phi() + [28] call print_ln + to:testLong::@return +testLong::@return: scope:[testLong] from testLong::@6 + [29] return + to:@return +print_ln: scope:[print_ln] from testChar::@6 testInt::@6 testLong::@6 testShort::@6 + [30] (byte*) print_line_cursor#39 ← phi( testChar::@6/((byte*))(word/signed word/dword/signed dword) $400 testInt::@6/(byte*) print_line_cursor#1 testLong::@6/(byte*) print_line_cursor#1 testShort::@6/(byte*) print_line_cursor#1 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [31] (byte*) print_line_cursor#20 ← phi( print_ln/(byte*) print_line_cursor#39 print_ln::@1/(byte*) print_line_cursor#1 ) + [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 + [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [34] return + to:@return +print_sdword: scope:[print_sdword] from testLong::@3 testLong::@5 + [35] (signed dword) print_sdword::dw#3 ← phi( testLong::@3/(const signed dword) testLong::n#0 testLong::@5/(const signed dword) testLong::s#0 ) + [36] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 + to:print_sdword::@2 +print_sdword::@2: scope:[print_sdword] from print_sdword + [37] phi() + [38] call print_char + to:print_sdword::@3 +print_sdword::@3: scope:[print_sdword] from print_sdword::@2 + [39] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#3 + to:print_sdword::@1 +print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@3 + [40] (signed dword) print_sdword::dw#4 ← phi( print_sdword/(signed dword) print_sdword::dw#3 print_sdword::@3/(signed dword) print_sdword::dw#0 ) + [41] (dword) print_dword::dw#0 ← ((dword)) (signed dword) print_sdword::dw#4 + [42] call print_dword + to:print_sdword::@return +print_sdword::@return: scope:[print_sdword] from print_sdword::@1 + [43] return + to:@return +print_dword: scope:[print_dword] from print_sdword::@1 testLong::@1 + [44] (byte*) print_char_cursor#140 ← phi( print_sdword::@1/(byte*) print_char_cursor#24 testLong::@1/(byte*) print_char_cursor#132 ) + [44] (dword) print_dword::dw#2 ← phi( print_sdword::@1/(dword) print_dword::dw#0 testLong::@1/(const dword) testLong::u#0 ) + [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 + [46] call print_word + to:print_dword::@1 +print_dword::@1: scope:[print_dword] from print_dword + [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 + [48] call print_word + to:print_dword::@return +print_dword::@return: scope:[print_dword] from print_dword::@1 + [49] return + to:@return +print_word: scope:[print_word] from print_dword print_dword::@1 print_sword::@1 testInt::@1 testShort::@1 + [50] (byte*) print_char_cursor#139 ← phi( print_dword/(byte*) print_char_cursor#140 print_dword::@1/(byte*) print_char_cursor#24 print_sword::@1/(byte*) print_char_cursor#24 testInt::@1/(byte*) print_char_cursor#132 testShort::@1/(byte*) print_char_cursor#132 ) + [50] (word) print_word::w#5 ← phi( print_dword/(word) print_word::w#1 print_dword::@1/(word) print_word::w#2 print_sword::@1/(word~) print_word::w#9 testInt::@1/(const word) testInt::u#0 testShort::@1/(const word) testShort::u#0 ) + [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 + [52] call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 + [54] call print_byte + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [55] return + to:@return +print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 + [56] (byte*) print_char_cursor#143 ← phi( print_sbyte::@2/(byte*) print_char_cursor#24 print_word/(byte*) print_char_cursor#139 print_word::@1/(byte*) print_char_cursor#24 testChar::@1/(byte*) print_char_cursor#132 ) + [56] (byte) print_byte::b#4 ← phi( print_sbyte::@2/(byte~) print_byte::b#6 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(const byte) testChar::u#0 ) + [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 + [58] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) + [59] call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) $f + [61] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) + [62] call print_char + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [63] return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sdword::@2 print_sword::@2 testChar::@2 testChar::@4 testInt::@2 testInt::@4 testLong::@2 testLong::@4 testShort::@2 testShort::@4 + [64] (byte*) print_char_cursor#90 ← phi( print_byte/(byte*) print_char_cursor#143 print_byte::@1/(byte*) print_char_cursor#24 print_sbyte::@1/(byte*) print_char_cursor#24 print_sbyte::@3/(byte*) print_char_cursor#24 print_sdword::@2/(byte*) print_char_cursor#24 print_sword::@2/(byte*) print_char_cursor#24 testChar::@2/(byte*) print_char_cursor#24 testChar::@4/(byte*) print_char_cursor#24 testInt::@2/(byte*) print_char_cursor#24 testInt::@4/(byte*) print_char_cursor#24 testLong::@2/(byte*) print_char_cursor#24 testLong::@4/(byte*) print_char_cursor#24 testShort::@2/(byte*) print_char_cursor#24 testShort::@4/(byte*) print_char_cursor#24 ) + [64] (byte) print_char::ch#14 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sdword::@2/(byte) '-' print_sword::@2/(byte) '-' testChar::@2/(byte) ' ' testChar::@4/(byte) ' ' testInt::@2/(byte) ' ' testInt::@4/(byte) ' ' testLong::@2/(byte) ' ' testLong::@4/(byte) ' ' testShort::@2/(byte) ' ' testShort::@4/(byte) ' ' ) + [65] *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 + [66] (byte*) print_char_cursor#24 ← ++ (byte*) print_char_cursor#90 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [67] return + to:@return +print_str: scope:[print_str] from testChar testInt testLong testShort + [68] (byte*) print_char_cursor#150 ← phi( testChar/((byte*))(word/signed word/dword/signed dword) $400 testInt/(byte*~) print_char_cursor#180 testLong/(byte*~) print_char_cursor#181 testShort/(byte*~) print_char_cursor#182 ) + [68] (byte*) print_str::str#7 ← phi( testChar/(const string) testChar::str testInt/(const string) testInt::str testLong/(const string) testLong::str testShort/(const string) testShort::str ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + [69] (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#150 print_str::@2/(byte*) print_char_cursor#1 ) + [69] (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 ) + [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 + to:print_str::@return +print_str::@return: scope:[print_str] from print_str::@1 + [71] return + to:@return +print_str::@2: scope:[print_str] from print_str::@1 + [72] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#5) + [73] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#132 + [74] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#5 + to:print_str::@1 +testInt: scope:[testInt] from main::@3 + [75] (byte*~) print_char_cursor#180 ← (byte*) print_line_cursor#1 + [76] call print_str + to:testInt::@1 +testInt::@1: scope:[testInt] from testInt + [77] phi() + [78] call print_word + to:testInt::@2 +testInt::@2: scope:[testInt] from testInt::@1 + [79] phi() + [80] call print_char + to:testInt::@3 +testInt::@3: scope:[testInt] from testInt::@2 + [81] phi() + [82] call print_sword + to:testInt::@4 +testInt::@4: scope:[testInt] from testInt::@3 + [83] phi() + [84] call print_char + to:testInt::@5 +testInt::@5: scope:[testInt] from testInt::@4 + [85] phi() + [86] call print_sword + to:testInt::@6 +testInt::@6: scope:[testInt] from testInt::@5 + [87] phi() + [88] call print_ln + to:testInt::@return +testInt::@return: scope:[testInt] from testInt::@6 + [89] return + to:@return +print_sword: scope:[print_sword] from testInt::@3 testInt::@5 testShort::@3 testShort::@5 + [90] (signed word) print_sword::w#5 ← phi( testInt::@3/(const signed word) testInt::n#0 testInt::@5/(const signed word) testInt::s#0 testShort::@3/(const signed word) testShort::n#0 testShort::@5/(const signed word) testShort::s#0 ) + [91] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 + to:print_sword::@2 +print_sword::@2: scope:[print_sword] from print_sword + [92] phi() + [93] call print_char + to:print_sword::@3 +print_sword::@3: scope:[print_sword] from print_sword::@2 + [94] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 + to:print_sword::@1 +print_sword::@1: scope:[print_sword] from print_sword print_sword::@3 + [95] (signed word) print_sword::w#6 ← phi( print_sword/(signed word) print_sword::w#5 print_sword::@3/(signed word) print_sword::w#0 ) + [96] (word~) print_word::w#9 ← (word)(signed word) print_sword::w#6 + [97] call print_word + to:print_sword::@return +print_sword::@return: scope:[print_sword] from print_sword::@1 + [98] return + to:@return +testShort: scope:[testShort] from main::@2 + [99] (byte*~) print_char_cursor#182 ← (byte*) print_line_cursor#1 + [100] call print_str + to:testShort::@1 +testShort::@1: scope:[testShort] from testShort + [101] phi() + [102] call print_word + to:testShort::@2 +testShort::@2: scope:[testShort] from testShort::@1 + [103] phi() + [104] call print_char + to:testShort::@3 +testShort::@3: scope:[testShort] from testShort::@2 + [105] phi() + [106] call print_sword + to:testShort::@4 +testShort::@4: scope:[testShort] from testShort::@3 + [107] phi() + [108] call print_char + to:testShort::@5 +testShort::@5: scope:[testShort] from testShort::@4 + [109] phi() + [110] call print_sword + to:testShort::@6 +testShort::@6: scope:[testShort] from testShort::@5 + [111] phi() + [112] call print_ln + to:testShort::@return +testShort::@return: scope:[testShort] from testShort::@6 + [113] return + to:@return +testChar: scope:[testChar] from main::@1 + [114] phi() + [115] call print_str + to:testChar::@1 +testChar::@1: scope:[testChar] from testChar + [116] phi() + [117] call print_byte + to:testChar::@2 +testChar::@2: scope:[testChar] from testChar::@1 + [118] phi() + [119] call print_char + to:testChar::@3 +testChar::@3: scope:[testChar] from testChar::@2 + [120] phi() + [121] call print_sbyte + to:testChar::@4 +testChar::@4: scope:[testChar] from testChar::@3 + [122] phi() + [123] call print_char + to:testChar::@5 +testChar::@5: scope:[testChar] from testChar::@4 + [124] phi() + [125] call print_sbyte + to:testChar::@6 +testChar::@6: scope:[testChar] from testChar::@5 + [126] phi() + [127] call print_ln + to:testChar::@return +testChar::@return: scope:[testChar] from testChar::@6 + [128] return + to:@return +print_sbyte: scope:[print_sbyte] from testChar::@3 testChar::@5 + [129] (signed byte) print_sbyte::b#3 ← phi( testChar::@3/(const signed byte) testChar::n#0 testChar::@5/(const signed byte) testChar::s#0 ) + [130] if((signed byte) print_sbyte::b#3<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 + to:print_sbyte::@3 +print_sbyte::@3: scope:[print_sbyte] from print_sbyte + [131] phi() + [132] call print_char + to:print_sbyte::@2 +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 + [133] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) + [134] (byte~) print_byte::b#6 ← (byte)(signed byte) print_sbyte::b#5 + [135] call print_byte + to:print_sbyte::@return +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 + [136] return + to:@return +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + [137] phi() + [138] call print_char + to:print_sbyte::@4 +print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 + [139] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 + to:print_sbyte::@2 +print_cls: scope:[print_cls] from main + [140] phi() + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [141] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) $400 print_cls::@1/(byte*) print_cls::sc#1 ) + [142] *((byte*) print_cls::sc#2) ← (byte) ' ' + [143] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + [144] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [145] return + to:@return diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log new file mode 100644 index 000000000..e4ab39a71 --- /dev/null +++ b/src/test/ref/c-types.log @@ -0,0 +1,5098 @@ +Identified constant variable (byte) testChar::u +Identified constant variable (word) testShort::u +Identified constant variable (word) testInt::u +Identified constant variable (dword) testLong::u + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) $400 + (byte*) print_line_cursor#0 ← (byte*) print_screen#0 + (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0 + to:@12 +print_str: scope:[print_str] from testChar testInt testLong testShort + (byte*) print_char_cursor#150 ← phi( testChar/(byte*) print_char_cursor#145 testInt/(byte*) print_char_cursor#147 testLong/(byte*) print_char_cursor#148 testShort/(byte*) print_char_cursor#146 ) + (byte*) print_str::str#7 ← phi( testChar/(byte*) print_str::str#1 testInt/(byte*) print_str::str#3 testLong/(byte*) print_str::str#4 testShort/(byte*) print_str::str#2 ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#150 print_str::@2/(byte*) print_char_cursor#1 ) + (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 ) + (bool~) print_str::$0 ← *((byte*) print_str::str#5) != (byte) '@' + if((bool~) print_str::$0) goto print_str::@2 + to:print_str::@return +print_str::@2: scope:[print_str] from print_str::@1 + (byte*) print_char_cursor#67 ← phi( print_str::@1/(byte*) print_char_cursor#132 ) + (byte*) print_str::str#6 ← phi( print_str::@1/(byte*) print_str::str#5 ) + *((byte*) print_char_cursor#67) ← *((byte*) print_str::str#6) + (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#67 + (byte*) print_str::str#0 ← ++ (byte*) print_str::str#6 + to:print_str::@1 +print_str::@return: scope:[print_str] from print_str::@1 + (byte*) print_char_cursor#68 ← phi( print_str::@1/(byte*) print_char_cursor#132 ) + (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#68 + return + to:@return +print_ln: scope:[print_ln] from testChar::@6 testInt::@6 testLong::@6 testShort::@6 + (byte*) print_char_cursor#133 ← phi( testChar::@6/(byte*) print_char_cursor#39 testInt::@6/(byte*) print_char_cursor#55 testLong::@6/(byte*) print_char_cursor#63 testShort::@6/(byte*) print_char_cursor#47 ) + (byte*) print_line_cursor#39 ← phi( testChar::@6/(byte*) print_line_cursor#41 testInt::@6/(byte*) print_line_cursor#43 testLong::@6/(byte*) print_line_cursor#44 testShort::@6/(byte*) print_line_cursor#42 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*) print_char_cursor#69 ← phi( print_ln/(byte*) print_char_cursor#133 print_ln::@1/(byte*) print_char_cursor#69 ) + (byte*) print_line_cursor#20 ← phi( print_ln/(byte*) print_line_cursor#39 print_ln::@1/(byte*) print_line_cursor#1 ) + (byte*~) print_ln::$0 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 + (byte*) print_line_cursor#1 ← (byte*~) print_ln::$0 + (bool~) print_ln::$1 ← (byte*) print_line_cursor#1 < (byte*) print_char_cursor#69 + if((bool~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) print_line_cursor#21 ← phi( print_ln::@1/(byte*) print_line_cursor#1 ) + (byte*) print_char_cursor#3 ← (byte*) print_line_cursor#21 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + (byte*) print_char_cursor#70 ← phi( print_ln::@2/(byte*) print_char_cursor#3 ) + (byte*) print_line_cursor#22 ← phi( print_ln::@2/(byte*) print_line_cursor#21 ) + (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#22 + (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#70 + return + to:@return +print_sword: scope:[print_sword] from testInt::@3 testInt::@5 testShort::@3 testShort::@5 + (byte*) print_char_cursor#151 ← phi( testInt::@3/(byte*) print_char_cursor#52 testInt::@5/(byte*) print_char_cursor#54 testShort::@3/(byte*) print_char_cursor#44 testShort::@5/(byte*) print_char_cursor#46 ) + (signed word) print_sword::w#5 ← phi( testInt::@3/(signed word) print_sword::w#3 testInt::@5/(signed word) print_sword::w#4 testShort::@3/(signed word) print_sword::w#1 testShort::@5/(signed word) print_sword::w#2 ) + (bool~) print_sword::$0 ← (signed word) print_sword::w#5 < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) print_sword::$1 ← ! (bool~) print_sword::$0 + if((bool~) print_sword::$1) goto print_sword::@1 + to:print_sword::@2 +print_sword::@1: scope:[print_sword] from print_sword print_sword::@4 + (byte*) print_char_cursor#134 ← phi( print_sword/(byte*) print_char_cursor#151 print_sword::@4/(byte*) print_char_cursor#6 ) + (signed word) print_sword::w#6 ← phi( print_sword/(signed word) print_sword::w#5 print_sword::@4/(signed word) print_sword::w#0 ) + (word~) print_sword::$2 ← ((word)) (signed word) print_sword::w#6 + (word) print_word::w#0 ← (word~) print_sword::$2 + call print_word + to:print_sword::@3 +print_sword::@3: scope:[print_sword] from print_sword::@1 + (byte*) print_char_cursor#71 ← phi( print_sword::@1/(byte*) print_char_cursor#14 ) + (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#71 + to:print_sword::@return +print_sword::@2: scope:[print_sword] from print_sword + (signed word) print_sword::w#8 ← phi( print_sword/(signed word) print_sword::w#5 ) + (byte*) print_char_cursor#135 ← phi( print_sword/(byte*) print_char_cursor#151 ) + (byte) print_char::ch#0 ← (byte) '-' + call print_char + to:print_sword::@4 +print_sword::@4: scope:[print_sword] from print_sword::@2 + (signed word) print_sword::w#7 ← phi( print_sword::@2/(signed word) print_sword::w#8 ) + (byte*) print_char_cursor#72 ← phi( print_sword::@2/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#72 + (signed word~) print_sword::$5 ← - (signed word) print_sword::w#7 + (signed word) print_sword::w#0 ← (signed word~) print_sword::$5 + to:print_sword::@1 +print_sword::@return: scope:[print_sword] from print_sword::@3 + (byte*) print_char_cursor#73 ← phi( print_sword::@3/(byte*) print_char_cursor#5 ) + (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#73 + return + to:@return +print_sbyte: scope:[print_sbyte] from testChar::@3 testChar::@5 + (byte*) print_char_cursor#152 ← phi( testChar::@3/(byte*) print_char_cursor#36 testChar::@5/(byte*) print_char_cursor#38 ) + (signed byte) print_sbyte::b#3 ← phi( testChar::@3/(signed byte) print_sbyte::b#1 testChar::@5/(signed byte) print_sbyte::b#2 ) + (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#3 < (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) print_sbyte::$0) goto print_sbyte::@1 + to:print_sbyte::@3 +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + (signed byte) print_sbyte::b#6 ← phi( print_sbyte/(signed byte) print_sbyte::b#3 ) + (byte*) print_char_cursor#136 ← phi( print_sbyte/(byte*) print_char_cursor#152 ) + (byte) print_char::ch#1 ← (byte) '-' + call print_char + to:print_sbyte::@5 +print_sbyte::@5: scope:[print_sbyte] from print_sbyte::@1 + (signed byte) print_sbyte::b#4 ← phi( print_sbyte::@1/(signed byte) print_sbyte::b#6 ) + (byte*) print_char_cursor#74 ← phi( print_sbyte::@1/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#74 + (signed byte~) print_sbyte::$5 ← - (signed byte) print_sbyte::b#4 + (signed byte) print_sbyte::b#0 ← (signed byte~) print_sbyte::$5 + to:print_sbyte::@2 +print_sbyte::@3: scope:[print_sbyte] from print_sbyte + (signed byte) print_sbyte::b#8 ← phi( print_sbyte/(signed byte) print_sbyte::b#3 ) + (byte*) print_char_cursor#137 ← phi( print_sbyte/(byte*) print_char_cursor#152 ) + (byte) print_char::ch#2 ← (byte) ' ' + call print_char + to:print_sbyte::@6 +print_sbyte::@6: scope:[print_sbyte] from print_sbyte::@3 + (signed byte) print_sbyte::b#7 ← phi( print_sbyte::@3/(signed byte) print_sbyte::b#8 ) + (byte*) print_char_cursor#75 ← phi( print_sbyte::@3/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#75 + to:print_sbyte::@2 +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@5 print_sbyte::@6 + (byte*) print_char_cursor#138 ← phi( print_sbyte::@5/(byte*) print_char_cursor#8 print_sbyte::@6/(byte*) print_char_cursor#9 ) + (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@5/(signed byte) print_sbyte::b#0 print_sbyte::@6/(signed byte) print_sbyte::b#7 ) + (byte~) print_sbyte::$1 ← ((byte)) (signed byte) print_sbyte::b#5 + (byte) print_byte::b#0 ← (byte~) print_sbyte::$1 + call print_byte + to:print_sbyte::@7 +print_sbyte::@7: scope:[print_sbyte] from print_sbyte::@2 + (byte*) print_char_cursor#76 ← phi( print_sbyte::@2/(byte*) print_char_cursor#23 ) + (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#76 + to:print_sbyte::@return +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@7 + (byte*) print_char_cursor#77 ← phi( print_sbyte::@7/(byte*) print_char_cursor#10 ) + (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#77 + return + to:@return +print_word: scope:[print_word] from print_dword print_dword::@1 print_sword::@1 testInt::@1 testShort::@1 + (byte*) print_char_cursor#139 ← phi( print_dword/(byte*) print_char_cursor#140 print_dword::@1/(byte*) print_char_cursor#15 print_sword::@1/(byte*) print_char_cursor#134 testInt::@1/(byte*) print_char_cursor#50 testShort::@1/(byte*) print_char_cursor#42 ) + (word) print_word::w#5 ← phi( print_dword/(word) print_word::w#1 print_dword::@1/(word) print_word::w#2 print_sword::@1/(word) print_word::w#0 testInt::@1/(word) print_word::w#4 testShort::@1/(word) print_word::w#3 ) + (byte~) print_word::$0 ← > (word) print_word::w#5 + (byte) print_byte::b#1 ← (byte~) print_word::$0 + call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + (word) print_word::w#6 ← phi( print_word/(word) print_word::w#5 ) + (byte*) print_char_cursor#78 ← phi( print_word/(byte*) print_char_cursor#23 ) + (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#78 + (byte~) print_word::$2 ← < (word) print_word::w#6 + (byte) print_byte::b#2 ← (byte~) print_word::$2 + call print_byte + to:print_word::@2 +print_word::@2: scope:[print_word] from print_word::@1 + (byte*) print_char_cursor#79 ← phi( print_word::@1/(byte*) print_char_cursor#23 ) + (byte*) print_char_cursor#13 ← (byte*) print_char_cursor#79 + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@2 + (byte*) print_char_cursor#80 ← phi( print_word::@2/(byte*) print_char_cursor#13 ) + (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#80 + return + to:@return +print_dword: scope:[print_dword] from print_sdword::@1 testLong::@1 + (byte*) print_char_cursor#140 ← phi( print_sdword::@1/(byte*) print_char_cursor#141 testLong::@1/(byte*) print_char_cursor#58 ) + (dword) print_dword::dw#2 ← phi( print_sdword::@1/(dword) print_dword::dw#0 testLong::@1/(dword) print_dword::dw#1 ) + (word~) print_dword::$0 ← > (dword) print_dword::dw#2 + (word) print_word::w#1 ← (word~) print_dword::$0 + call print_word + to:print_dword::@1 +print_dword::@1: scope:[print_dword] from print_dword + (dword) print_dword::dw#3 ← phi( print_dword/(dword) print_dword::dw#2 ) + (byte*) print_char_cursor#81 ← phi( print_dword/(byte*) print_char_cursor#14 ) + (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#81 + (word~) print_dword::$2 ← < (dword) print_dword::dw#3 + (word) print_word::w#2 ← (word~) print_dword::$2 + call print_word + to:print_dword::@2 +print_dword::@2: scope:[print_dword] from print_dword::@1 + (byte*) print_char_cursor#82 ← phi( print_dword::@1/(byte*) print_char_cursor#14 ) + (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#82 + to:print_dword::@return +print_dword::@return: scope:[print_dword] from print_dword::@2 + (byte*) print_char_cursor#83 ← phi( print_dword::@2/(byte*) print_char_cursor#16 ) + (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#83 + return + to:@return +print_sdword: scope:[print_sdword] from testLong::@3 testLong::@5 + (byte*) print_char_cursor#153 ← phi( testLong::@3/(byte*) print_char_cursor#60 testLong::@5/(byte*) print_char_cursor#62 ) + (signed dword) print_sdword::dw#3 ← phi( testLong::@3/(signed dword) print_sdword::dw#1 testLong::@5/(signed dword) print_sdword::dw#2 ) + (bool~) print_sdword::$0 ← (signed dword) print_sdword::dw#3 < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) print_sdword::$1 ← ! (bool~) print_sdword::$0 + if((bool~) print_sdword::$1) goto print_sdword::@1 + to:print_sdword::@2 +print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@4 + (byte*) print_char_cursor#141 ← phi( print_sdword/(byte*) print_char_cursor#153 print_sdword::@4/(byte*) print_char_cursor#19 ) + (signed dword) print_sdword::dw#4 ← phi( print_sdword/(signed dword) print_sdword::dw#3 print_sdword::@4/(signed dword) print_sdword::dw#0 ) + (dword~) print_sdword::$2 ← ((dword)) (signed dword) print_sdword::dw#4 + (dword) print_dword::dw#0 ← (dword~) print_sdword::$2 + call print_dword + to:print_sdword::@3 +print_sdword::@3: scope:[print_sdword] from print_sdword::@1 + (byte*) print_char_cursor#84 ← phi( print_sdword::@1/(byte*) print_char_cursor#17 ) + (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#84 + to:print_sdword::@return +print_sdword::@2: scope:[print_sdword] from print_sdword + (signed dword) print_sdword::dw#6 ← phi( print_sdword/(signed dword) print_sdword::dw#3 ) + (byte*) print_char_cursor#142 ← phi( print_sdword/(byte*) print_char_cursor#153 ) + (byte) print_char::ch#3 ← (byte) '-' + call print_char + to:print_sdword::@4 +print_sdword::@4: scope:[print_sdword] from print_sdword::@2 + (signed dword) print_sdword::dw#5 ← phi( print_sdword::@2/(signed dword) print_sdword::dw#6 ) + (byte*) print_char_cursor#85 ← phi( print_sdword::@2/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#19 ← (byte*) print_char_cursor#85 + (signed dword~) print_sdword::$5 ← - (signed dword) print_sdword::dw#5 + (signed dword) print_sdword::dw#0 ← (signed dword~) print_sdword::$5 + to:print_sdword::@1 +print_sdword::@return: scope:[print_sdword] from print_sdword::@3 + (byte*) print_char_cursor#86 ← phi( print_sdword::@3/(byte*) print_char_cursor#18 ) + (byte*) print_char_cursor#20 ← (byte*) print_char_cursor#86 + return + to:@return +@12: scope:[] from @begin + (byte*) print_screen#6 ← phi( @begin/(byte*) print_screen#0 ) + (byte*) print_char_cursor#154 ← phi( @begin/(byte*) print_char_cursor#0 ) + (byte*) print_line_cursor#50 ← phi( @begin/(byte*) print_line_cursor#0 ) + (byte[]) print_hextab#0 ← (const string) $0 + to:@24 +print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 + (byte*) print_char_cursor#143 ← phi( print_sbyte::@2/(byte*) print_char_cursor#138 print_word/(byte*) print_char_cursor#139 print_word::@1/(byte*) print_char_cursor#12 testChar::@1/(byte*) print_char_cursor#34 ) + (byte) print_byte::b#4 ← phi( print_sbyte::@2/(byte) print_byte::b#0 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(byte) print_byte::b#3 ) + (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) print_char::ch#4 ← *((byte[]) print_hextab#0 + (byte~) print_byte::$0) + call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + (byte) print_byte::b#5 ← phi( print_byte/(byte) print_byte::b#4 ) + (byte*) print_char_cursor#87 ← phi( print_byte/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#21 ← (byte*) print_char_cursor#87 + (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte/signed byte/word/signed word/dword/signed dword) $f + (byte) print_char::ch#5 ← *((byte[]) print_hextab#0 + (byte~) print_byte::$2) + call print_char + to:print_byte::@2 +print_byte::@2: scope:[print_byte] from print_byte::@1 + (byte*) print_char_cursor#88 ← phi( print_byte::@1/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#88 + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@2 + (byte*) print_char_cursor#89 ← phi( print_byte::@2/(byte*) print_char_cursor#22 ) + (byte*) print_char_cursor#23 ← (byte*) print_char_cursor#89 + return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sdword::@2 print_sword::@2 testChar::@2 testChar::@4 testInt::@2 testInt::@4 testLong::@2 testLong::@4 testShort::@2 testShort::@4 + (byte*) print_char_cursor#90 ← phi( print_byte/(byte*) print_char_cursor#143 print_byte::@1/(byte*) print_char_cursor#21 print_sbyte::@1/(byte*) print_char_cursor#136 print_sbyte::@3/(byte*) print_char_cursor#137 print_sdword::@2/(byte*) print_char_cursor#142 print_sword::@2/(byte*) print_char_cursor#135 testChar::@2/(byte*) print_char_cursor#35 testChar::@4/(byte*) print_char_cursor#37 testInt::@2/(byte*) print_char_cursor#51 testInt::@4/(byte*) print_char_cursor#53 testLong::@2/(byte*) print_char_cursor#59 testLong::@4/(byte*) print_char_cursor#61 testShort::@2/(byte*) print_char_cursor#43 testShort::@4/(byte*) print_char_cursor#45 ) + (byte) print_char::ch#14 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 print_sbyte::@1/(byte) print_char::ch#1 print_sbyte::@3/(byte) print_char::ch#2 print_sdword::@2/(byte) print_char::ch#3 print_sword::@2/(byte) print_char::ch#0 testChar::@2/(byte) print_char::ch#6 testChar::@4/(byte) print_char::ch#7 testInt::@2/(byte) print_char::ch#10 testInt::@4/(byte) print_char::ch#11 testLong::@2/(byte) print_char::ch#12 testLong::@4/(byte) print_char::ch#13 testShort::@2/(byte) print_char::ch#8 testShort::@4/(byte) print_char::ch#9 ) + *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 + (byte*) print_char_cursor#24 ← ++ (byte*) print_char_cursor#90 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + (byte*) print_char_cursor#91 ← phi( print_char/(byte*) print_char_cursor#24 ) + (byte*) print_char_cursor#25 ← (byte*) print_char_cursor#91 + return + to:@return +print_cls: scope:[print_cls] from main + (byte*) print_screen#1 ← phi( main/(byte*) print_screen#4 ) + (byte*) print_cls::sc#0 ← (byte*) print_screen#1 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 print_cls::@1/(byte*) print_screen#2 ) + (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 ) + *((byte*) print_cls::sc#2) ← (byte) ' ' + (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (word/signed word/dword/signed dword) $3e8 + (bool~) print_cls::$1 ← (byte*) print_cls::sc#1 != (byte*~) print_cls::$0 + if((bool~) print_cls::$1) goto print_cls::@1 + to:print_cls::@2 +print_cls::@2: scope:[print_cls] from print_cls::@1 + (byte*) print_screen#3 ← phi( print_cls::@1/(byte*) print_screen#2 ) + (byte*) print_line_cursor#3 ← (byte*) print_screen#3 + (byte*) print_char_cursor#26 ← (byte*) print_line_cursor#3 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@2 + (byte*) print_char_cursor#92 ← phi( print_cls::@2/(byte*) print_char_cursor#26 ) + (byte*) print_line_cursor#23 ← phi( print_cls::@2/(byte*) print_line_cursor#3 ) + (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#23 + (byte*) print_char_cursor#27 ← (byte*) print_char_cursor#92 + return + to:@return +main: scope:[main] from @24 + (byte*) print_char_cursor#144 ← phi( @24/(byte*) print_char_cursor#149 ) + (byte*) print_line_cursor#40 ← phi( @24/(byte*) print_line_cursor#45 ) + (byte*) print_screen#4 ← phi( @24/(byte*) print_screen#5 ) + call print_cls + to:main::@1 +main::@1: scope:[main] from main + (byte*) print_char_cursor#93 ← phi( main/(byte*) print_char_cursor#27 ) + (byte*) print_line_cursor#24 ← phi( main/(byte*) print_line_cursor#4 ) + (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#24 + (byte*) print_char_cursor#28 ← (byte*) print_char_cursor#93 + call testChar + to:main::@2 +main::@2: scope:[main] from main::@1 + (byte*) print_line_cursor#25 ← phi( main::@1/(byte*) print_line_cursor#12 ) + (byte*) print_char_cursor#94 ← phi( main::@1/(byte*) print_char_cursor#41 ) + (byte*) print_char_cursor#29 ← (byte*) print_char_cursor#94 + (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#25 + call testShort + to:main::@3 +main::@3: scope:[main] from main::@2 + (byte*) print_line_cursor#26 ← phi( main::@2/(byte*) print_line_cursor#14 ) + (byte*) print_char_cursor#95 ← phi( main::@2/(byte*) print_char_cursor#49 ) + (byte*) print_char_cursor#30 ← (byte*) print_char_cursor#95 + (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#26 + call testInt + to:main::@4 +main::@4: scope:[main] from main::@3 + (byte*) print_line_cursor#27 ← phi( main::@3/(byte*) print_line_cursor#16 ) + (byte*) print_char_cursor#96 ← phi( main::@3/(byte*) print_char_cursor#57 ) + (byte*) print_char_cursor#31 ← (byte*) print_char_cursor#96 + (byte*) print_line_cursor#8 ← (byte*) print_line_cursor#27 + call testLong + to:main::@5 +main::@5: scope:[main] from main::@4 + (byte*) print_line_cursor#28 ← phi( main::@4/(byte*) print_line_cursor#18 ) + (byte*) print_char_cursor#97 ← phi( main::@4/(byte*) print_char_cursor#65 ) + (byte*) print_char_cursor#32 ← (byte*) print_char_cursor#97 + (byte*) print_line_cursor#9 ← (byte*) print_line_cursor#28 + to:main::@return +main::@return: scope:[main] from main::@5 + (byte*) print_char_cursor#98 ← phi( main::@5/(byte*) print_char_cursor#32 ) + (byte*) print_line_cursor#29 ← phi( main::@5/(byte*) print_line_cursor#9 ) + (byte*) print_line_cursor#10 ← (byte*) print_line_cursor#29 + (byte*) print_char_cursor#33 ← (byte*) print_char_cursor#98 + return + to:@return +testChar: scope:[testChar] from main::@1 + (byte*) print_line_cursor#67 ← phi( main::@1/(byte*) print_line_cursor#5 ) + (byte*) print_char_cursor#145 ← phi( main::@1/(byte*) print_char_cursor#28 ) + (byte) testChar::u#0 ← (byte/signed byte/word/signed word/dword/signed dword) $e + (signed byte/signed word/signed dword~) testChar::$0 ← - (byte/signed byte/word/signed word/dword/signed dword) $e + (signed byte) testChar::n#0 ← (signed byte/signed word/signed dword~) testChar::$0 + (signed byte/signed word/signed dword~) testChar::$1 ← - (byte/signed byte/word/signed word/dword/signed dword) $e + (signed byte) testChar::s#0 ← (signed byte/signed word/signed dword~) testChar::$1 + (byte*) print_str::str#1 ← (const string) testChar::str + call print_str + to:testChar::@1 +testChar::@1: scope:[testChar] from testChar + (byte*) print_line_cursor#63 ← phi( testChar/(byte*) print_line_cursor#67 ) + (signed byte) testChar::s#5 ← phi( testChar/(signed byte) testChar::s#0 ) + (signed byte) testChar::n#3 ← phi( testChar/(signed byte) testChar::n#0 ) + (byte*) print_char_cursor#99 ← phi( testChar/(byte*) print_char_cursor#2 ) + (byte*) print_char_cursor#34 ← (byte*) print_char_cursor#99 + (byte) print_byte::b#3 ← (byte) testChar::u#0 + call print_byte + to:testChar::@2 +testChar::@2: scope:[testChar] from testChar::@1 + (byte*) print_line_cursor#59 ← phi( testChar::@1/(byte*) print_line_cursor#63 ) + (signed byte) testChar::s#4 ← phi( testChar::@1/(signed byte) testChar::s#5 ) + (signed byte) testChar::n#2 ← phi( testChar::@1/(signed byte) testChar::n#3 ) + (byte*) print_char_cursor#100 ← phi( testChar::@1/(byte*) print_char_cursor#23 ) + (byte*) print_char_cursor#35 ← (byte*) print_char_cursor#100 + (byte) print_char::ch#6 ← (byte) ' ' + call print_char + to:testChar::@3 +testChar::@3: scope:[testChar] from testChar::@2 + (byte*) print_line_cursor#55 ← phi( testChar::@2/(byte*) print_line_cursor#59 ) + (signed byte) testChar::s#3 ← phi( testChar::@2/(signed byte) testChar::s#4 ) + (signed byte) testChar::n#1 ← phi( testChar::@2/(signed byte) testChar::n#2 ) + (byte*) print_char_cursor#101 ← phi( testChar::@2/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#36 ← (byte*) print_char_cursor#101 + (signed byte) print_sbyte::b#1 ← (signed byte) testChar::n#1 + call print_sbyte + to:testChar::@4 +testChar::@4: scope:[testChar] from testChar::@3 + (byte*) print_line_cursor#51 ← phi( testChar::@3/(byte*) print_line_cursor#55 ) + (signed byte) testChar::s#2 ← phi( testChar::@3/(signed byte) testChar::s#3 ) + (byte*) print_char_cursor#102 ← phi( testChar::@3/(byte*) print_char_cursor#11 ) + (byte*) print_char_cursor#37 ← (byte*) print_char_cursor#102 + (byte) print_char::ch#7 ← (byte) ' ' + call print_char + to:testChar::@5 +testChar::@5: scope:[testChar] from testChar::@4 + (byte*) print_line_cursor#46 ← phi( testChar::@4/(byte*) print_line_cursor#51 ) + (signed byte) testChar::s#1 ← phi( testChar::@4/(signed byte) testChar::s#2 ) + (byte*) print_char_cursor#103 ← phi( testChar::@4/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#38 ← (byte*) print_char_cursor#103 + (signed byte) print_sbyte::b#2 ← (signed byte) testChar::s#1 + call print_sbyte + to:testChar::@6 +testChar::@6: scope:[testChar] from testChar::@5 + (byte*) print_line_cursor#41 ← phi( testChar::@5/(byte*) print_line_cursor#46 ) + (byte*) print_char_cursor#104 ← phi( testChar::@5/(byte*) print_char_cursor#11 ) + (byte*) print_char_cursor#39 ← (byte*) print_char_cursor#104 + call print_ln + to:testChar::@7 +testChar::@7: scope:[testChar] from testChar::@6 + (byte*) print_char_cursor#105 ← phi( testChar::@6/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#30 ← phi( testChar::@6/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#11 ← (byte*) print_line_cursor#30 + (byte*) print_char_cursor#40 ← (byte*) print_char_cursor#105 + to:testChar::@return +testChar::@return: scope:[testChar] from testChar::@7 + (byte*) print_line_cursor#31 ← phi( testChar::@7/(byte*) print_line_cursor#11 ) + (byte*) print_char_cursor#106 ← phi( testChar::@7/(byte*) print_char_cursor#40 ) + (byte*) print_char_cursor#41 ← (byte*) print_char_cursor#106 + (byte*) print_line_cursor#12 ← (byte*) print_line_cursor#31 + return + to:@return +testShort: scope:[testShort] from main::@2 + (byte*) print_line_cursor#68 ← phi( main::@2/(byte*) print_line_cursor#6 ) + (byte*) print_char_cursor#146 ← phi( main::@2/(byte*) print_char_cursor#29 ) + (word) testShort::u#0 ← (word/signed word/dword/signed dword) $578 + (signed word/signed dword~) testShort::$0 ← - (word/signed word/dword/signed dword) $578 + (signed word) testShort::n#0 ← (signed word/signed dword~) testShort::$0 + (signed word/signed dword~) testShort::$1 ← - (word/signed word/dword/signed dword) $578 + (signed word) testShort::s#0 ← (signed word/signed dword~) testShort::$1 + (byte*) print_str::str#2 ← (const string) testShort::str + call print_str + to:testShort::@1 +testShort::@1: scope:[testShort] from testShort + (byte*) print_line_cursor#64 ← phi( testShort/(byte*) print_line_cursor#68 ) + (signed word) testShort::s#5 ← phi( testShort/(signed word) testShort::s#0 ) + (signed word) testShort::n#3 ← phi( testShort/(signed word) testShort::n#0 ) + (byte*) print_char_cursor#107 ← phi( testShort/(byte*) print_char_cursor#2 ) + (byte*) print_char_cursor#42 ← (byte*) print_char_cursor#107 + (word) print_word::w#3 ← (word) testShort::u#0 + call print_word + to:testShort::@2 +testShort::@2: scope:[testShort] from testShort::@1 + (byte*) print_line_cursor#60 ← phi( testShort::@1/(byte*) print_line_cursor#64 ) + (signed word) testShort::s#4 ← phi( testShort::@1/(signed word) testShort::s#5 ) + (signed word) testShort::n#2 ← phi( testShort::@1/(signed word) testShort::n#3 ) + (byte*) print_char_cursor#108 ← phi( testShort::@1/(byte*) print_char_cursor#14 ) + (byte*) print_char_cursor#43 ← (byte*) print_char_cursor#108 + (byte) print_char::ch#8 ← (byte) ' ' + call print_char + to:testShort::@3 +testShort::@3: scope:[testShort] from testShort::@2 + (byte*) print_line_cursor#56 ← phi( testShort::@2/(byte*) print_line_cursor#60 ) + (signed word) testShort::s#3 ← phi( testShort::@2/(signed word) testShort::s#4 ) + (signed word) testShort::n#1 ← phi( testShort::@2/(signed word) testShort::n#2 ) + (byte*) print_char_cursor#109 ← phi( testShort::@2/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#44 ← (byte*) print_char_cursor#109 + (signed word) print_sword::w#1 ← (signed word) testShort::n#1 + call print_sword + to:testShort::@4 +testShort::@4: scope:[testShort] from testShort::@3 + (byte*) print_line_cursor#52 ← phi( testShort::@3/(byte*) print_line_cursor#56 ) + (signed word) testShort::s#2 ← phi( testShort::@3/(signed word) testShort::s#3 ) + (byte*) print_char_cursor#110 ← phi( testShort::@3/(byte*) print_char_cursor#7 ) + (byte*) print_char_cursor#45 ← (byte*) print_char_cursor#110 + (byte) print_char::ch#9 ← (byte) ' ' + call print_char + to:testShort::@5 +testShort::@5: scope:[testShort] from testShort::@4 + (byte*) print_line_cursor#47 ← phi( testShort::@4/(byte*) print_line_cursor#52 ) + (signed word) testShort::s#1 ← phi( testShort::@4/(signed word) testShort::s#2 ) + (byte*) print_char_cursor#111 ← phi( testShort::@4/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#46 ← (byte*) print_char_cursor#111 + (signed word) print_sword::w#2 ← (signed word) testShort::s#1 + call print_sword + to:testShort::@6 +testShort::@6: scope:[testShort] from testShort::@5 + (byte*) print_line_cursor#42 ← phi( testShort::@5/(byte*) print_line_cursor#47 ) + (byte*) print_char_cursor#112 ← phi( testShort::@5/(byte*) print_char_cursor#7 ) + (byte*) print_char_cursor#47 ← (byte*) print_char_cursor#112 + call print_ln + to:testShort::@7 +testShort::@7: scope:[testShort] from testShort::@6 + (byte*) print_char_cursor#113 ← phi( testShort::@6/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#32 ← phi( testShort::@6/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#13 ← (byte*) print_line_cursor#32 + (byte*) print_char_cursor#48 ← (byte*) print_char_cursor#113 + to:testShort::@return +testShort::@return: scope:[testShort] from testShort::@7 + (byte*) print_line_cursor#33 ← phi( testShort::@7/(byte*) print_line_cursor#13 ) + (byte*) print_char_cursor#114 ← phi( testShort::@7/(byte*) print_char_cursor#48 ) + (byte*) print_char_cursor#49 ← (byte*) print_char_cursor#114 + (byte*) print_line_cursor#14 ← (byte*) print_line_cursor#33 + return + to:@return +testInt: scope:[testInt] from main::@3 + (byte*) print_line_cursor#69 ← phi( main::@3/(byte*) print_line_cursor#7 ) + (byte*) print_char_cursor#147 ← phi( main::@3/(byte*) print_char_cursor#30 ) + (word) testInt::u#0 ← (word/signed word/dword/signed dword) $578 + (signed word/signed dword~) testInt::$0 ← - (word/signed word/dword/signed dword) $578 + (signed word) testInt::n#0 ← (signed word/signed dword~) testInt::$0 + (signed word/signed dword~) testInt::$1 ← - (word/signed word/dword/signed dword) $578 + (signed word) testInt::s#0 ← (signed word/signed dword~) testInt::$1 + (byte*) print_str::str#3 ← (const string) testInt::str + call print_str + to:testInt::@1 +testInt::@1: scope:[testInt] from testInt + (byte*) print_line_cursor#65 ← phi( testInt/(byte*) print_line_cursor#69 ) + (signed word) testInt::s#5 ← phi( testInt/(signed word) testInt::s#0 ) + (signed word) testInt::n#3 ← phi( testInt/(signed word) testInt::n#0 ) + (byte*) print_char_cursor#115 ← phi( testInt/(byte*) print_char_cursor#2 ) + (byte*) print_char_cursor#50 ← (byte*) print_char_cursor#115 + (word) print_word::w#4 ← (word) testInt::u#0 + call print_word + to:testInt::@2 +testInt::@2: scope:[testInt] from testInt::@1 + (byte*) print_line_cursor#61 ← phi( testInt::@1/(byte*) print_line_cursor#65 ) + (signed word) testInt::s#4 ← phi( testInt::@1/(signed word) testInt::s#5 ) + (signed word) testInt::n#2 ← phi( testInt::@1/(signed word) testInt::n#3 ) + (byte*) print_char_cursor#116 ← phi( testInt::@1/(byte*) print_char_cursor#14 ) + (byte*) print_char_cursor#51 ← (byte*) print_char_cursor#116 + (byte) print_char::ch#10 ← (byte) ' ' + call print_char + to:testInt::@3 +testInt::@3: scope:[testInt] from testInt::@2 + (byte*) print_line_cursor#57 ← phi( testInt::@2/(byte*) print_line_cursor#61 ) + (signed word) testInt::s#3 ← phi( testInt::@2/(signed word) testInt::s#4 ) + (signed word) testInt::n#1 ← phi( testInt::@2/(signed word) testInt::n#2 ) + (byte*) print_char_cursor#117 ← phi( testInt::@2/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#52 ← (byte*) print_char_cursor#117 + (signed word) print_sword::w#3 ← (signed word) testInt::n#1 + call print_sword + to:testInt::@4 +testInt::@4: scope:[testInt] from testInt::@3 + (byte*) print_line_cursor#53 ← phi( testInt::@3/(byte*) print_line_cursor#57 ) + (signed word) testInt::s#2 ← phi( testInt::@3/(signed word) testInt::s#3 ) + (byte*) print_char_cursor#118 ← phi( testInt::@3/(byte*) print_char_cursor#7 ) + (byte*) print_char_cursor#53 ← (byte*) print_char_cursor#118 + (byte) print_char::ch#11 ← (byte) ' ' + call print_char + to:testInt::@5 +testInt::@5: scope:[testInt] from testInt::@4 + (byte*) print_line_cursor#48 ← phi( testInt::@4/(byte*) print_line_cursor#53 ) + (signed word) testInt::s#1 ← phi( testInt::@4/(signed word) testInt::s#2 ) + (byte*) print_char_cursor#119 ← phi( testInt::@4/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#54 ← (byte*) print_char_cursor#119 + (signed word) print_sword::w#4 ← (signed word) testInt::s#1 + call print_sword + to:testInt::@6 +testInt::@6: scope:[testInt] from testInt::@5 + (byte*) print_line_cursor#43 ← phi( testInt::@5/(byte*) print_line_cursor#48 ) + (byte*) print_char_cursor#120 ← phi( testInt::@5/(byte*) print_char_cursor#7 ) + (byte*) print_char_cursor#55 ← (byte*) print_char_cursor#120 + call print_ln + to:testInt::@7 +testInt::@7: scope:[testInt] from testInt::@6 + (byte*) print_char_cursor#121 ← phi( testInt::@6/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#34 ← phi( testInt::@6/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#15 ← (byte*) print_line_cursor#34 + (byte*) print_char_cursor#56 ← (byte*) print_char_cursor#121 + to:testInt::@return +testInt::@return: scope:[testInt] from testInt::@7 + (byte*) print_line_cursor#35 ← phi( testInt::@7/(byte*) print_line_cursor#15 ) + (byte*) print_char_cursor#122 ← phi( testInt::@7/(byte*) print_char_cursor#56 ) + (byte*) print_char_cursor#57 ← (byte*) print_char_cursor#122 + (byte*) print_line_cursor#16 ← (byte*) print_line_cursor#35 + return + to:@return +testLong: scope:[testLong] from main::@4 + (byte*) print_line_cursor#70 ← phi( main::@4/(byte*) print_line_cursor#8 ) + (byte*) print_char_cursor#148 ← phi( main::@4/(byte*) print_char_cursor#31 ) + (dword) testLong::u#0 ← (dword/signed dword) $222e0 + (signed dword~) testLong::$0 ← - (dword/signed dword) $222e0 + (signed dword) testLong::n#0 ← (signed dword~) testLong::$0 + (signed dword~) testLong::$1 ← - (dword/signed dword) $222e0 + (signed dword) testLong::s#0 ← (signed dword~) testLong::$1 + (byte*) print_str::str#4 ← (const string) testLong::str + call print_str + to:testLong::@1 +testLong::@1: scope:[testLong] from testLong + (byte*) print_line_cursor#66 ← phi( testLong/(byte*) print_line_cursor#70 ) + (signed dword) testLong::s#5 ← phi( testLong/(signed dword) testLong::s#0 ) + (signed dword) testLong::n#3 ← phi( testLong/(signed dword) testLong::n#0 ) + (byte*) print_char_cursor#123 ← phi( testLong/(byte*) print_char_cursor#2 ) + (byte*) print_char_cursor#58 ← (byte*) print_char_cursor#123 + (dword) print_dword::dw#1 ← (dword) testLong::u#0 + call print_dword + to:testLong::@2 +testLong::@2: scope:[testLong] from testLong::@1 + (byte*) print_line_cursor#62 ← phi( testLong::@1/(byte*) print_line_cursor#66 ) + (signed dword) testLong::s#4 ← phi( testLong::@1/(signed dword) testLong::s#5 ) + (signed dword) testLong::n#2 ← phi( testLong::@1/(signed dword) testLong::n#3 ) + (byte*) print_char_cursor#124 ← phi( testLong::@1/(byte*) print_char_cursor#17 ) + (byte*) print_char_cursor#59 ← (byte*) print_char_cursor#124 + (byte) print_char::ch#12 ← (byte) ' ' + call print_char + to:testLong::@3 +testLong::@3: scope:[testLong] from testLong::@2 + (byte*) print_line_cursor#58 ← phi( testLong::@2/(byte*) print_line_cursor#62 ) + (signed dword) testLong::s#3 ← phi( testLong::@2/(signed dword) testLong::s#4 ) + (signed dword) testLong::n#1 ← phi( testLong::@2/(signed dword) testLong::n#2 ) + (byte*) print_char_cursor#125 ← phi( testLong::@2/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#60 ← (byte*) print_char_cursor#125 + (signed dword) print_sdword::dw#1 ← (signed dword) testLong::n#1 + call print_sdword + to:testLong::@4 +testLong::@4: scope:[testLong] from testLong::@3 + (byte*) print_line_cursor#54 ← phi( testLong::@3/(byte*) print_line_cursor#58 ) + (signed dword) testLong::s#2 ← phi( testLong::@3/(signed dword) testLong::s#3 ) + (byte*) print_char_cursor#126 ← phi( testLong::@3/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#61 ← (byte*) print_char_cursor#126 + (byte) print_char::ch#13 ← (byte) ' ' + call print_char + to:testLong::@5 +testLong::@5: scope:[testLong] from testLong::@4 + (byte*) print_line_cursor#49 ← phi( testLong::@4/(byte*) print_line_cursor#54 ) + (signed dword) testLong::s#1 ← phi( testLong::@4/(signed dword) testLong::s#2 ) + (byte*) print_char_cursor#127 ← phi( testLong::@4/(byte*) print_char_cursor#25 ) + (byte*) print_char_cursor#62 ← (byte*) print_char_cursor#127 + (signed dword) print_sdword::dw#2 ← (signed dword) testLong::s#1 + call print_sdword + to:testLong::@6 +testLong::@6: scope:[testLong] from testLong::@5 + (byte*) print_line_cursor#44 ← phi( testLong::@5/(byte*) print_line_cursor#49 ) + (byte*) print_char_cursor#128 ← phi( testLong::@5/(byte*) print_char_cursor#20 ) + (byte*) print_char_cursor#63 ← (byte*) print_char_cursor#128 + call print_ln + to:testLong::@7 +testLong::@7: scope:[testLong] from testLong::@6 + (byte*) print_char_cursor#129 ← phi( testLong::@6/(byte*) print_char_cursor#4 ) + (byte*) print_line_cursor#36 ← phi( testLong::@6/(byte*) print_line_cursor#2 ) + (byte*) print_line_cursor#17 ← (byte*) print_line_cursor#36 + (byte*) print_char_cursor#64 ← (byte*) print_char_cursor#129 + to:testLong::@return +testLong::@return: scope:[testLong] from testLong::@7 + (byte*) print_line_cursor#37 ← phi( testLong::@7/(byte*) print_line_cursor#17 ) + (byte*) print_char_cursor#130 ← phi( testLong::@7/(byte*) print_char_cursor#64 ) + (byte*) print_char_cursor#65 ← (byte*) print_char_cursor#130 + (byte*) print_line_cursor#18 ← (byte*) print_line_cursor#37 + return + to:@return +@24: scope:[] from @12 + (byte*) print_screen#5 ← phi( @12/(byte*) print_screen#6 ) + (byte*) print_char_cursor#149 ← phi( @12/(byte*) print_char_cursor#154 ) + (byte*) print_line_cursor#45 ← phi( @12/(byte*) print_line_cursor#50 ) + call main + to:@25 +@25: scope:[] from @24 + (byte*) print_char_cursor#131 ← phi( @24/(byte*) print_char_cursor#33 ) + (byte*) print_line_cursor#38 ← phi( @24/(byte*) print_line_cursor#10 ) + (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#38 + (byte*) print_char_cursor#66 ← (byte*) print_char_cursor#131 + to:@end +@end: scope:[] from @25 + +SYMBOL TABLE SSA +(const string) $0 = (string) "0123456789abcdef" +(label) @12 +(label) @24 +(label) @25 +(label) @begin +(label) @end +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@return +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(byte~) print_byte::$2 +(label) print_byte::@1 +(label) print_byte::@2 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 +(byte) print_byte::b#1 +(byte) print_byte::b#2 +(byte) print_byte::b#3 +(byte) print_byte::b#4 +(byte) print_byte::b#5 +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 +(byte) print_char::ch#1 +(byte) print_char::ch#10 +(byte) print_char::ch#11 +(byte) print_char::ch#12 +(byte) print_char::ch#13 +(byte) print_char::ch#14 +(byte) print_char::ch#2 +(byte) print_char::ch#3 +(byte) print_char::ch#4 +(byte) print_char::ch#5 +(byte) print_char::ch#6 +(byte) print_char::ch#7 +(byte) print_char::ch#8 +(byte) print_char::ch#9 +(byte*) print_char_cursor +(byte*) print_char_cursor#0 +(byte*) print_char_cursor#1 +(byte*) print_char_cursor#10 +(byte*) print_char_cursor#100 +(byte*) print_char_cursor#101 +(byte*) print_char_cursor#102 +(byte*) print_char_cursor#103 +(byte*) print_char_cursor#104 +(byte*) print_char_cursor#105 +(byte*) print_char_cursor#106 +(byte*) print_char_cursor#107 +(byte*) print_char_cursor#108 +(byte*) print_char_cursor#109 +(byte*) print_char_cursor#11 +(byte*) print_char_cursor#110 +(byte*) print_char_cursor#111 +(byte*) print_char_cursor#112 +(byte*) print_char_cursor#113 +(byte*) print_char_cursor#114 +(byte*) print_char_cursor#115 +(byte*) print_char_cursor#116 +(byte*) print_char_cursor#117 +(byte*) print_char_cursor#118 +(byte*) print_char_cursor#119 +(byte*) print_char_cursor#12 +(byte*) print_char_cursor#120 +(byte*) print_char_cursor#121 +(byte*) print_char_cursor#122 +(byte*) print_char_cursor#123 +(byte*) print_char_cursor#124 +(byte*) print_char_cursor#125 +(byte*) print_char_cursor#126 +(byte*) print_char_cursor#127 +(byte*) print_char_cursor#128 +(byte*) print_char_cursor#129 +(byte*) print_char_cursor#13 +(byte*) print_char_cursor#130 +(byte*) print_char_cursor#131 +(byte*) print_char_cursor#132 +(byte*) print_char_cursor#133 +(byte*) print_char_cursor#134 +(byte*) print_char_cursor#135 +(byte*) print_char_cursor#136 +(byte*) print_char_cursor#137 +(byte*) print_char_cursor#138 +(byte*) print_char_cursor#139 +(byte*) print_char_cursor#14 +(byte*) print_char_cursor#140 +(byte*) print_char_cursor#141 +(byte*) print_char_cursor#142 +(byte*) print_char_cursor#143 +(byte*) print_char_cursor#144 +(byte*) print_char_cursor#145 +(byte*) print_char_cursor#146 +(byte*) print_char_cursor#147 +(byte*) print_char_cursor#148 +(byte*) print_char_cursor#149 +(byte*) print_char_cursor#15 +(byte*) print_char_cursor#150 +(byte*) print_char_cursor#151 +(byte*) print_char_cursor#152 +(byte*) print_char_cursor#153 +(byte*) print_char_cursor#154 +(byte*) print_char_cursor#16 +(byte*) print_char_cursor#17 +(byte*) print_char_cursor#18 +(byte*) print_char_cursor#19 +(byte*) print_char_cursor#2 +(byte*) print_char_cursor#20 +(byte*) print_char_cursor#21 +(byte*) print_char_cursor#22 +(byte*) print_char_cursor#23 +(byte*) print_char_cursor#24 +(byte*) print_char_cursor#25 +(byte*) print_char_cursor#26 +(byte*) print_char_cursor#27 +(byte*) print_char_cursor#28 +(byte*) print_char_cursor#29 +(byte*) print_char_cursor#3 +(byte*) print_char_cursor#30 +(byte*) print_char_cursor#31 +(byte*) print_char_cursor#32 +(byte*) print_char_cursor#33 +(byte*) print_char_cursor#34 +(byte*) print_char_cursor#35 +(byte*) print_char_cursor#36 +(byte*) print_char_cursor#37 +(byte*) print_char_cursor#38 +(byte*) print_char_cursor#39 +(byte*) print_char_cursor#4 +(byte*) print_char_cursor#40 +(byte*) print_char_cursor#41 +(byte*) print_char_cursor#42 +(byte*) print_char_cursor#43 +(byte*) print_char_cursor#44 +(byte*) print_char_cursor#45 +(byte*) print_char_cursor#46 +(byte*) print_char_cursor#47 +(byte*) print_char_cursor#48 +(byte*) print_char_cursor#49 +(byte*) print_char_cursor#5 +(byte*) print_char_cursor#50 +(byte*) print_char_cursor#51 +(byte*) print_char_cursor#52 +(byte*) print_char_cursor#53 +(byte*) print_char_cursor#54 +(byte*) print_char_cursor#55 +(byte*) print_char_cursor#56 +(byte*) print_char_cursor#57 +(byte*) print_char_cursor#58 +(byte*) print_char_cursor#59 +(byte*) print_char_cursor#6 +(byte*) print_char_cursor#60 +(byte*) print_char_cursor#61 +(byte*) print_char_cursor#62 +(byte*) print_char_cursor#63 +(byte*) print_char_cursor#64 +(byte*) print_char_cursor#65 +(byte*) print_char_cursor#66 +(byte*) print_char_cursor#67 +(byte*) print_char_cursor#68 +(byte*) print_char_cursor#69 +(byte*) print_char_cursor#7 +(byte*) print_char_cursor#70 +(byte*) print_char_cursor#71 +(byte*) print_char_cursor#72 +(byte*) print_char_cursor#73 +(byte*) print_char_cursor#74 +(byte*) print_char_cursor#75 +(byte*) print_char_cursor#76 +(byte*) print_char_cursor#77 +(byte*) print_char_cursor#78 +(byte*) print_char_cursor#79 +(byte*) print_char_cursor#8 +(byte*) print_char_cursor#80 +(byte*) print_char_cursor#81 +(byte*) print_char_cursor#82 +(byte*) print_char_cursor#83 +(byte*) print_char_cursor#84 +(byte*) print_char_cursor#85 +(byte*) print_char_cursor#86 +(byte*) print_char_cursor#87 +(byte*) print_char_cursor#88 +(byte*) print_char_cursor#89 +(byte*) print_char_cursor#9 +(byte*) print_char_cursor#90 +(byte*) print_char_cursor#91 +(byte*) print_char_cursor#92 +(byte*) print_char_cursor#93 +(byte*) print_char_cursor#94 +(byte*) print_char_cursor#95 +(byte*) print_char_cursor#96 +(byte*) print_char_cursor#97 +(byte*) print_char_cursor#98 +(byte*) print_char_cursor#99 +(void()) print_cls() +(byte*~) print_cls::$0 +(bool~) print_cls::$1 +(label) print_cls::@1 +(label) print_cls::@2 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#0 +(byte*) print_cls::sc#1 +(byte*) print_cls::sc#2 +(void()) print_dword((dword) print_dword::dw) +(word~) print_dword::$0 +(word~) print_dword::$2 +(label) print_dword::@1 +(label) print_dword::@2 +(label) print_dword::@return +(dword) print_dword::dw +(dword) print_dword::dw#0 +(dword) print_dword::dw#1 +(dword) print_dword::dw#2 +(dword) print_dword::dw#3 +(byte[]) print_hextab +(byte[]) print_hextab#0 +(byte*) print_line_cursor +(byte*) print_line_cursor#0 +(byte*) print_line_cursor#1 +(byte*) print_line_cursor#10 +(byte*) print_line_cursor#11 +(byte*) print_line_cursor#12 +(byte*) print_line_cursor#13 +(byte*) print_line_cursor#14 +(byte*) print_line_cursor#15 +(byte*) print_line_cursor#16 +(byte*) print_line_cursor#17 +(byte*) print_line_cursor#18 +(byte*) print_line_cursor#19 +(byte*) print_line_cursor#2 +(byte*) print_line_cursor#20 +(byte*) print_line_cursor#21 +(byte*) print_line_cursor#22 +(byte*) print_line_cursor#23 +(byte*) print_line_cursor#24 +(byte*) print_line_cursor#25 +(byte*) print_line_cursor#26 +(byte*) print_line_cursor#27 +(byte*) print_line_cursor#28 +(byte*) print_line_cursor#29 +(byte*) print_line_cursor#3 +(byte*) print_line_cursor#30 +(byte*) print_line_cursor#31 +(byte*) print_line_cursor#32 +(byte*) print_line_cursor#33 +(byte*) print_line_cursor#34 +(byte*) print_line_cursor#35 +(byte*) print_line_cursor#36 +(byte*) print_line_cursor#37 +(byte*) print_line_cursor#38 +(byte*) print_line_cursor#39 +(byte*) print_line_cursor#4 +(byte*) print_line_cursor#40 +(byte*) print_line_cursor#41 +(byte*) print_line_cursor#42 +(byte*) print_line_cursor#43 +(byte*) print_line_cursor#44 +(byte*) print_line_cursor#45 +(byte*) print_line_cursor#46 +(byte*) print_line_cursor#47 +(byte*) print_line_cursor#48 +(byte*) print_line_cursor#49 +(byte*) print_line_cursor#5 +(byte*) print_line_cursor#50 +(byte*) print_line_cursor#51 +(byte*) print_line_cursor#52 +(byte*) print_line_cursor#53 +(byte*) print_line_cursor#54 +(byte*) print_line_cursor#55 +(byte*) print_line_cursor#56 +(byte*) print_line_cursor#57 +(byte*) print_line_cursor#58 +(byte*) print_line_cursor#59 +(byte*) print_line_cursor#6 +(byte*) print_line_cursor#60 +(byte*) print_line_cursor#61 +(byte*) print_line_cursor#62 +(byte*) print_line_cursor#63 +(byte*) print_line_cursor#64 +(byte*) print_line_cursor#65 +(byte*) print_line_cursor#66 +(byte*) print_line_cursor#67 +(byte*) print_line_cursor#68 +(byte*) print_line_cursor#69 +(byte*) print_line_cursor#7 +(byte*) print_line_cursor#70 +(byte*) print_line_cursor#8 +(byte*) print_line_cursor#9 +(void()) print_ln() +(byte*~) print_ln::$0 +(bool~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@2 +(label) print_ln::@return +(void()) print_sbyte((signed byte) print_sbyte::b) +(bool~) print_sbyte::$0 +(byte~) print_sbyte::$1 +(signed byte~) print_sbyte::$5 +(label) print_sbyte::@1 +(label) print_sbyte::@2 +(label) print_sbyte::@3 +(label) print_sbyte::@5 +(label) print_sbyte::@6 +(label) print_sbyte::@7 +(label) print_sbyte::@return +(signed byte) print_sbyte::b +(signed byte) print_sbyte::b#0 +(signed byte) print_sbyte::b#1 +(signed byte) print_sbyte::b#2 +(signed byte) print_sbyte::b#3 +(signed byte) print_sbyte::b#4 +(signed byte) print_sbyte::b#5 +(signed byte) print_sbyte::b#6 +(signed byte) print_sbyte::b#7 +(signed byte) print_sbyte::b#8 +(byte*) print_screen +(byte*) print_screen#0 +(byte*) print_screen#1 +(byte*) print_screen#2 +(byte*) print_screen#3 +(byte*) print_screen#4 +(byte*) print_screen#5 +(byte*) print_screen#6 +(void()) print_sdword((signed dword) print_sdword::dw) +(bool~) print_sdword::$0 +(bool~) print_sdword::$1 +(dword~) print_sdword::$2 +(signed dword~) print_sdword::$5 +(label) print_sdword::@1 +(label) print_sdword::@2 +(label) print_sdword::@3 +(label) print_sdword::@4 +(label) print_sdword::@return +(signed dword) print_sdword::dw +(signed dword) print_sdword::dw#0 +(signed dword) print_sdword::dw#1 +(signed dword) print_sdword::dw#2 +(signed dword) print_sdword::dw#3 +(signed dword) print_sdword::dw#4 +(signed dword) print_sdword::dw#5 +(signed dword) print_sdword::dw#6 +(void()) print_str((byte*) print_str::str) +(bool~) print_str::$0 +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 +(byte*) print_str::str#1 +(byte*) print_str::str#2 +(byte*) print_str::str#3 +(byte*) print_str::str#4 +(byte*) print_str::str#5 +(byte*) print_str::str#6 +(byte*) print_str::str#7 +(void()) print_sword((signed word) print_sword::w) +(bool~) print_sword::$0 +(bool~) print_sword::$1 +(word~) print_sword::$2 +(signed word~) print_sword::$5 +(label) print_sword::@1 +(label) print_sword::@2 +(label) print_sword::@3 +(label) print_sword::@4 +(label) print_sword::@return +(signed word) print_sword::w +(signed word) print_sword::w#0 +(signed word) print_sword::w#1 +(signed word) print_sword::w#2 +(signed word) print_sword::w#3 +(signed word) print_sword::w#4 +(signed word) print_sword::w#5 +(signed word) print_sword::w#6 +(signed word) print_sword::w#7 +(signed word) print_sword::w#8 +(void()) print_word((word) print_word::w) +(byte~) print_word::$0 +(byte~) print_word::$2 +(label) print_word::@1 +(label) print_word::@2 +(label) print_word::@return +(word) print_word::w +(word) print_word::w#0 +(word) print_word::w#1 +(word) print_word::w#2 +(word) print_word::w#3 +(word) print_word::w#4 +(word) print_word::w#5 +(word) print_word::w#6 +(void()) testChar() +(signed byte/signed word/signed dword~) testChar::$0 +(signed byte/signed word/signed dword~) testChar::$1 +(label) testChar::@1 +(label) testChar::@2 +(label) testChar::@3 +(label) testChar::@4 +(label) testChar::@5 +(label) testChar::@6 +(label) testChar::@7 +(label) testChar::@return +(signed byte) testChar::n +(signed byte) testChar::n#0 +(signed byte) testChar::n#1 +(signed byte) testChar::n#2 +(signed byte) testChar::n#3 +(signed byte) testChar::s +(signed byte) testChar::s#0 +(signed byte) testChar::s#1 +(signed byte) testChar::s#2 +(signed byte) testChar::s#3 +(signed byte) testChar::s#4 +(signed byte) testChar::s#5 +(const string) testChar::str = (string) "char: @" +(byte) testChar::u +(byte) testChar::u#0 +(void()) testInt() +(signed word/signed dword~) testInt::$0 +(signed word/signed dword~) testInt::$1 +(label) testInt::@1 +(label) testInt::@2 +(label) testInt::@3 +(label) testInt::@4 +(label) testInt::@5 +(label) testInt::@6 +(label) testInt::@7 +(label) testInt::@return +(signed word) testInt::n +(signed word) testInt::n#0 +(signed word) testInt::n#1 +(signed word) testInt::n#2 +(signed word) testInt::n#3 +(signed word) testInt::s +(signed word) testInt::s#0 +(signed word) testInt::s#1 +(signed word) testInt::s#2 +(signed word) testInt::s#3 +(signed word) testInt::s#4 +(signed word) testInt::s#5 +(const string) testInt::str = (string) "int: @" +(word) testInt::u +(word) testInt::u#0 +(void()) testLong() +(signed dword~) testLong::$0 +(signed dword~) testLong::$1 +(label) testLong::@1 +(label) testLong::@2 +(label) testLong::@3 +(label) testLong::@4 +(label) testLong::@5 +(label) testLong::@6 +(label) testLong::@7 +(label) testLong::@return +(signed dword) testLong::n +(signed dword) testLong::n#0 +(signed dword) testLong::n#1 +(signed dword) testLong::n#2 +(signed dword) testLong::n#3 +(signed dword) testLong::s +(signed dword) testLong::s#0 +(signed dword) testLong::s#1 +(signed dword) testLong::s#2 +(signed dword) testLong::s#3 +(signed dword) testLong::s#4 +(signed dword) testLong::s#5 +(const string) testLong::str = (string) "long: @" +(dword) testLong::u +(dword) testLong::u#0 +(void()) testShort() +(signed word/signed dword~) testShort::$0 +(signed word/signed dword~) testShort::$1 +(label) testShort::@1 +(label) testShort::@2 +(label) testShort::@3 +(label) testShort::@4 +(label) testShort::@5 +(label) testShort::@6 +(label) testShort::@7 +(label) testShort::@return +(signed word) testShort::n +(signed word) testShort::n#0 +(signed word) testShort::n#1 +(signed word) testShort::n#2 +(signed word) testShort::n#3 +(signed word) testShort::s +(signed word) testShort::s#0 +(signed word) testShort::s#1 +(signed word) testShort::s#2 +(signed word) testShort::s#3 +(signed word) testShort::s#4 +(signed word) testShort::s#5 +(const string) testShort::str = (string) "short: @" +(word) testShort::u +(word) testShort::u#0 + +Inversing boolean not [28] (bool~) print_sword::$1 ← (signed word) print_sword::w#5 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [27] (bool~) print_sword::$0 ← (signed word) print_sword::w#5 < (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not [100] (bool~) print_sdword::$1 ← (signed dword) print_sdword::dw#3 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [99] (bool~) print_sdword::$0 ← (signed dword) print_sdword::dw#3 < (byte/signed byte/word/signed word/dword/signed dword) 0 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#50 (byte*) print_char_cursor#154 (byte*) print_screen#6 (byte*) print_line_cursor#45 (byte*) print_char_cursor#149 (byte*) print_screen#5 +Alias (byte*) print_str::str#5 = (byte*) print_str::str#6 +Alias (byte*) print_char_cursor#132 = (byte*) print_char_cursor#67 (byte*) print_char_cursor#68 (byte*) print_char_cursor#2 +Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#21 (byte*) print_char_cursor#3 (byte*) print_line_cursor#22 (byte*) print_char_cursor#70 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4 +Alias (word) print_word::w#0 = (word~) print_sword::$2 +Alias (byte*) print_char_cursor#5 = (byte*) print_char_cursor#71 (byte*) print_char_cursor#73 (byte*) print_char_cursor#7 +Alias (byte*) print_char_cursor#135 = (byte*) print_char_cursor#151 +Alias (signed word) print_sword::w#5 = (signed word) print_sword::w#8 (signed word) print_sword::w#7 +Alias (byte*) print_char_cursor#6 = (byte*) print_char_cursor#72 +Alias (signed word) print_sword::w#0 = (signed word~) print_sword::$5 +Alias (byte*) print_char_cursor#136 = (byte*) print_char_cursor#152 (byte*) print_char_cursor#137 +Alias (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#6 (signed byte) print_sbyte::b#4 (signed byte) print_sbyte::b#8 (signed byte) print_sbyte::b#7 +Alias (byte*) print_char_cursor#74 = (byte*) print_char_cursor#8 +Alias (signed byte) print_sbyte::b#0 = (signed byte~) print_sbyte::$5 +Alias (byte*) print_char_cursor#75 = (byte*) print_char_cursor#9 +Alias (byte) print_byte::b#0 = (byte~) print_sbyte::$1 +Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#76 (byte*) print_char_cursor#77 (byte*) print_char_cursor#11 +Alias (byte) print_byte::b#1 = (byte~) print_word::$0 +Alias (word) print_word::w#5 = (word) print_word::w#6 +Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#78 +Alias (byte) print_byte::b#2 = (byte~) print_word::$2 +Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#79 (byte*) print_char_cursor#80 (byte*) print_char_cursor#14 +Alias (word) print_word::w#1 = (word~) print_dword::$0 +Alias (dword) print_dword::dw#2 = (dword) print_dword::dw#3 +Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#81 +Alias (word) print_word::w#2 = (word~) print_dword::$2 +Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#82 (byte*) print_char_cursor#83 (byte*) print_char_cursor#17 +Alias (dword) print_dword::dw#0 = (dword~) print_sdword::$2 +Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#84 (byte*) print_char_cursor#86 (byte*) print_char_cursor#20 +Alias (byte*) print_char_cursor#142 = (byte*) print_char_cursor#153 +Alias (signed dword) print_sdword::dw#3 = (signed dword) print_sdword::dw#6 (signed dword) print_sdword::dw#5 +Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#85 +Alias (signed dword) print_sdword::dw#0 = (signed dword~) print_sdword::$5 +Alias (byte) print_byte::b#4 = (byte) print_byte::b#5 +Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#87 +Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#88 (byte*) print_char_cursor#89 (byte*) print_char_cursor#23 +Alias (byte*) print_char_cursor#24 = (byte*) print_char_cursor#91 (byte*) print_char_cursor#25 +Alias (byte*) print_line_cursor#23 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_line_cursor#3 (byte*) print_char_cursor#26 (byte*) print_char_cursor#92 (byte*) print_line_cursor#4 (byte*) print_char_cursor#27 +Alias (byte*) print_line_cursor#24 = (byte*) print_line_cursor#5 +Alias (byte*) print_char_cursor#28 = (byte*) print_char_cursor#93 +Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#94 +Alias (byte*) print_line_cursor#25 = (byte*) print_line_cursor#6 +Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#95 +Alias (byte*) print_line_cursor#26 = (byte*) print_line_cursor#7 +Alias (byte*) print_char_cursor#31 = (byte*) print_char_cursor#96 +Alias (byte*) print_line_cursor#27 = (byte*) print_line_cursor#8 +Alias (byte*) print_char_cursor#32 = (byte*) print_char_cursor#97 (byte*) print_char_cursor#98 (byte*) print_char_cursor#33 +Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#9 (byte*) print_line_cursor#28 (byte*) print_line_cursor#29 +Alias (signed byte) testChar::n#0 = (signed byte/signed word/signed dword~) testChar::$0 (signed byte) testChar::n#3 (signed byte) testChar::n#2 (signed byte) testChar::n#1 +Alias (signed byte) testChar::s#0 = (signed byte/signed word/signed dword~) testChar::$1 (signed byte) testChar::s#5 (signed byte) testChar::s#4 (signed byte) testChar::s#3 (signed byte) testChar::s#2 (signed byte) testChar::s#1 +Alias (byte*) print_line_cursor#41 = (byte*) print_line_cursor#63 (byte*) print_line_cursor#67 (byte*) print_line_cursor#59 (byte*) print_line_cursor#55 (byte*) print_line_cursor#51 (byte*) print_line_cursor#46 +Alias (byte*) print_char_cursor#34 = (byte*) print_char_cursor#99 +Alias (byte*) print_char_cursor#100 = (byte*) print_char_cursor#35 +Alias (byte*) print_char_cursor#101 = (byte*) print_char_cursor#36 +Alias (byte*) print_char_cursor#102 = (byte*) print_char_cursor#37 +Alias (byte*) print_char_cursor#103 = (byte*) print_char_cursor#38 +Alias (byte*) print_char_cursor#104 = (byte*) print_char_cursor#39 +Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#30 (byte*) print_line_cursor#31 (byte*) print_line_cursor#12 +Alias (byte*) print_char_cursor#105 = (byte*) print_char_cursor#40 (byte*) print_char_cursor#106 (byte*) print_char_cursor#41 +Alias (signed word) testShort::n#0 = (signed word/signed dword~) testShort::$0 (signed word) testShort::n#3 (signed word) testShort::n#2 (signed word) testShort::n#1 +Alias (signed word) testShort::s#0 = (signed word/signed dword~) testShort::$1 (signed word) testShort::s#5 (signed word) testShort::s#4 (signed word) testShort::s#3 (signed word) testShort::s#2 (signed word) testShort::s#1 +Alias (byte*) print_line_cursor#42 = (byte*) print_line_cursor#64 (byte*) print_line_cursor#68 (byte*) print_line_cursor#60 (byte*) print_line_cursor#56 (byte*) print_line_cursor#52 (byte*) print_line_cursor#47 +Alias (byte*) print_char_cursor#107 = (byte*) print_char_cursor#42 +Alias (byte*) print_char_cursor#108 = (byte*) print_char_cursor#43 +Alias (byte*) print_char_cursor#109 = (byte*) print_char_cursor#44 +Alias (byte*) print_char_cursor#110 = (byte*) print_char_cursor#45 +Alias (byte*) print_char_cursor#111 = (byte*) print_char_cursor#46 +Alias (byte*) print_char_cursor#112 = (byte*) print_char_cursor#47 +Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#32 (byte*) print_line_cursor#33 (byte*) print_line_cursor#14 +Alias (byte*) print_char_cursor#113 = (byte*) print_char_cursor#48 (byte*) print_char_cursor#114 (byte*) print_char_cursor#49 +Alias (signed word) testInt::n#0 = (signed word/signed dword~) testInt::$0 (signed word) testInt::n#3 (signed word) testInt::n#2 (signed word) testInt::n#1 +Alias (signed word) testInt::s#0 = (signed word/signed dword~) testInt::$1 (signed word) testInt::s#5 (signed word) testInt::s#4 (signed word) testInt::s#3 (signed word) testInt::s#2 (signed word) testInt::s#1 +Alias (byte*) print_line_cursor#43 = (byte*) print_line_cursor#65 (byte*) print_line_cursor#69 (byte*) print_line_cursor#61 (byte*) print_line_cursor#57 (byte*) print_line_cursor#53 (byte*) print_line_cursor#48 +Alias (byte*) print_char_cursor#115 = (byte*) print_char_cursor#50 +Alias (byte*) print_char_cursor#116 = (byte*) print_char_cursor#51 +Alias (byte*) print_char_cursor#117 = (byte*) print_char_cursor#52 +Alias (byte*) print_char_cursor#118 = (byte*) print_char_cursor#53 +Alias (byte*) print_char_cursor#119 = (byte*) print_char_cursor#54 +Alias (byte*) print_char_cursor#120 = (byte*) print_char_cursor#55 +Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#34 (byte*) print_line_cursor#35 (byte*) print_line_cursor#16 +Alias (byte*) print_char_cursor#121 = (byte*) print_char_cursor#56 (byte*) print_char_cursor#122 (byte*) print_char_cursor#57 +Alias (signed dword) testLong::n#0 = (signed dword~) testLong::$0 (signed dword) testLong::n#3 (signed dword) testLong::n#2 (signed dword) testLong::n#1 +Alias (signed dword) testLong::s#0 = (signed dword~) testLong::$1 (signed dword) testLong::s#5 (signed dword) testLong::s#4 (signed dword) testLong::s#3 (signed dword) testLong::s#2 (signed dword) testLong::s#1 +Alias (byte*) print_line_cursor#44 = (byte*) print_line_cursor#66 (byte*) print_line_cursor#70 (byte*) print_line_cursor#62 (byte*) print_line_cursor#58 (byte*) print_line_cursor#54 (byte*) print_line_cursor#49 +Alias (byte*) print_char_cursor#123 = (byte*) print_char_cursor#58 +Alias (byte*) print_char_cursor#124 = (byte*) print_char_cursor#59 +Alias (byte*) print_char_cursor#125 = (byte*) print_char_cursor#60 +Alias (byte*) print_char_cursor#126 = (byte*) print_char_cursor#61 +Alias (byte*) print_char_cursor#127 = (byte*) print_char_cursor#62 +Alias (byte*) print_char_cursor#128 = (byte*) print_char_cursor#63 +Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#36 (byte*) print_line_cursor#37 (byte*) print_line_cursor#18 +Alias (byte*) print_char_cursor#129 = (byte*) print_char_cursor#64 (byte*) print_char_cursor#130 (byte*) print_char_cursor#65 +Alias (byte*) print_line_cursor#19 = (byte*) print_line_cursor#38 +Alias (byte*) print_char_cursor#131 = (byte*) print_char_cursor#66 +Successful SSA optimization Pass2AliasElimination +Self Phi Eliminated (byte*) print_char_cursor#69 +Self Phi Eliminated (byte*) print_line_cursor#23 +Successful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) print_char_cursor#69 (byte*) print_char_cursor#133 +Redundant Phi (byte*) print_char_cursor#5 (byte*) print_char_cursor#13 +Redundant Phi (byte*) print_char_cursor#6 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#74 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#75 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#10 (byte*) print_char_cursor#22 +Redundant Phi (byte*) print_char_cursor#12 (byte*) print_char_cursor#22 +Redundant Phi (byte*) print_char_cursor#13 (byte*) print_char_cursor#22 +Redundant Phi (byte*) print_char_cursor#15 (byte*) print_char_cursor#13 +Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#13 +Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#16 +Redundant Phi (byte*) print_char_cursor#19 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#21 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#22 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4 +Redundant Phi (byte*) print_line_cursor#23 (byte*) print_screen#1 +Redundant Phi (byte*) print_screen#4 (byte*) print_line_cursor#0 +Redundant Phi (byte*) print_line_cursor#40 (byte*) print_line_cursor#0 +Redundant Phi (byte*) print_char_cursor#144 (byte*) print_line_cursor#0 +Redundant Phi (byte*) print_line_cursor#24 (byte*) print_line_cursor#23 +Redundant Phi (byte*) print_char_cursor#28 (byte*) print_line_cursor#23 +Redundant Phi (byte*) print_char_cursor#29 (byte*) print_char_cursor#105 +Redundant Phi (byte*) print_line_cursor#25 (byte*) print_line_cursor#11 +Redundant Phi (byte*) print_char_cursor#30 (byte*) print_char_cursor#113 +Redundant Phi (byte*) print_line_cursor#26 (byte*) print_line_cursor#13 +Redundant Phi (byte*) print_char_cursor#31 (byte*) print_char_cursor#121 +Redundant Phi (byte*) print_line_cursor#27 (byte*) print_line_cursor#15 +Redundant Phi (byte*) print_char_cursor#32 (byte*) print_char_cursor#129 +Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#17 +Redundant Phi (byte*) print_char_cursor#145 (byte*) print_char_cursor#28 +Redundant Phi (byte*) print_line_cursor#41 (byte*) print_line_cursor#24 +Redundant Phi (byte*) print_char_cursor#34 (byte*) print_char_cursor#132 +Redundant Phi (byte*) print_char_cursor#100 (byte*) print_char_cursor#22 +Redundant Phi (byte*) print_char_cursor#101 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#102 (byte*) print_char_cursor#10 +Redundant Phi (byte*) print_char_cursor#103 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#104 (byte*) print_char_cursor#10 +Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_char_cursor#105 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_char_cursor#146 (byte*) print_char_cursor#29 +Redundant Phi (byte*) print_line_cursor#42 (byte*) print_line_cursor#25 +Redundant Phi (byte*) print_char_cursor#107 (byte*) print_char_cursor#132 +Redundant Phi (byte*) print_char_cursor#108 (byte*) print_char_cursor#13 +Redundant Phi (byte*) print_char_cursor#109 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#110 (byte*) print_char_cursor#5 +Redundant Phi (byte*) print_char_cursor#111 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#112 (byte*) print_char_cursor#5 +Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_char_cursor#113 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_char_cursor#147 (byte*) print_char_cursor#30 +Redundant Phi (byte*) print_line_cursor#43 (byte*) print_line_cursor#26 +Redundant Phi (byte*) print_char_cursor#115 (byte*) print_char_cursor#132 +Redundant Phi (byte*) print_char_cursor#116 (byte*) print_char_cursor#13 +Redundant Phi (byte*) print_char_cursor#117 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#118 (byte*) print_char_cursor#5 +Redundant Phi (byte*) print_char_cursor#119 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#120 (byte*) print_char_cursor#5 +Redundant Phi (byte*) print_line_cursor#15 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_char_cursor#121 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_char_cursor#148 (byte*) print_char_cursor#31 +Redundant Phi (byte*) print_line_cursor#44 (byte*) print_line_cursor#27 +Redundant Phi (byte*) print_char_cursor#123 (byte*) print_char_cursor#132 +Redundant Phi (byte*) print_char_cursor#124 (byte*) print_char_cursor#16 +Redundant Phi (byte*) print_char_cursor#125 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#126 (byte*) print_char_cursor#18 +Redundant Phi (byte*) print_char_cursor#127 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#128 (byte*) print_char_cursor#18 +Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_char_cursor#129 (byte*) print_line_cursor#1 +Redundant Phi (byte*) print_line_cursor#19 (byte*) print_line_cursor#10 +Redundant Phi (byte*) print_char_cursor#131 (byte*) print_char_cursor#32 +Successful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte*) print_char_cursor#133 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#135 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#136 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#138 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#142 (byte*) print_char_cursor#24 +Successful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte*) print_char_cursor#134 (byte*) print_char_cursor#24 +Redundant Phi (byte*) print_char_cursor#141 (byte*) print_char_cursor#24 +Successful SSA optimization Pass2RedundantPhiElimination +Simple Condition (bool~) print_str::$0 [6] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 +Simple Condition (bool~) print_ln::$1 [19] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 +Simple Condition (bool~) print_sword::$1 [29] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 +Simple Condition (bool~) print_sbyte::$0 [48] if((signed byte) print_sbyte::b#3<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 +Simple Condition (bool~) print_sdword::$1 [101] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 +Simple Condition (bool~) print_cls::$1 [147] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) print_line_cursor#0 = ((byte*))$400 +Constant (const byte) print_char::ch#0 = '-' +Constant (const byte) print_char::ch#1 = '-' +Constant (const byte) print_char::ch#2 = ' ' +Constant (const byte) print_char::ch#3 = '-' +Constant (const byte[]) print_hextab#0 = $0 +Constant (const byte) testChar::u#0 = $e +Constant (const signed byte) testChar::n#0 = -$e +Constant (const signed byte) testChar::s#0 = -$e +Constant (const byte*) print_str::str#1 = testChar::str +Constant (const byte) print_char::ch#6 = ' ' +Constant (const byte) print_char::ch#7 = ' ' +Constant (const word) testShort::u#0 = $578 +Constant (const signed word) testShort::n#0 = -$578 +Constant (const signed word) testShort::s#0 = -$578 +Constant (const byte*) print_str::str#2 = testShort::str +Constant (const byte) print_char::ch#8 = ' ' +Constant (const byte) print_char::ch#9 = ' ' +Constant (const word) testInt::u#0 = $578 +Constant (const signed word) testInt::n#0 = -$578 +Constant (const signed word) testInt::s#0 = -$578 +Constant (const byte*) print_str::str#3 = testInt::str +Constant (const byte) print_char::ch#10 = ' ' +Constant (const byte) print_char::ch#11 = ' ' +Constant (const dword) testLong::u#0 = $222e0 +Constant (const signed dword) testLong::n#0 = -$222e0 +Constant (const signed dword) testLong::s#0 = -$222e0 +Constant (const byte*) print_str::str#4 = testLong::str +Constant (const byte) print_char::ch#12 = ' ' +Constant (const byte) print_char::ch#13 = ' ' +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 +Constant (const byte*) print_cls::$0 = print_line_cursor#0+$3e8 +Constant (const byte) print_byte::b#3 = testChar::u#0 +Constant (const signed byte) print_sbyte::b#1 = testChar::n#0 +Constant (const signed byte) print_sbyte::b#2 = testChar::s#0 +Constant (const word) print_word::w#3 = testShort::u#0 +Constant (const signed word) print_sword::w#1 = testShort::n#0 +Constant (const signed word) print_sword::w#2 = testShort::s#0 +Constant (const word) print_word::w#4 = testInt::u#0 +Constant (const signed word) print_sword::w#3 = testInt::n#0 +Constant (const signed word) print_sword::w#4 = testInt::s#0 +Constant (const dword) print_dword::dw#1 = testLong::u#0 +Constant (const signed dword) print_sdword::dw#1 = testLong::n#0 +Constant (const signed dword) print_sdword::dw#2 = testLong::s#0 +Successful SSA optimization Pass2ConstantIdentification +Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#6 +Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sbyte::b#5 +Successful SSA optimization Pass2NopCastElimination +Culled Empty Block (label) print_ln::@2 +Culled Empty Block (label) print_sword::@3 +Culled Empty Block (label) print_sbyte::@6 +Culled Empty Block (label) print_sbyte::@7 +Culled Empty Block (label) print_word::@2 +Culled Empty Block (label) print_dword::@2 +Culled Empty Block (label) print_sdword::@3 +Culled Empty Block (label) @12 +Culled Empty Block (label) print_byte::@2 +Culled Empty Block (label) print_cls::@2 +Culled Empty Block (label) main::@5 +Culled Empty Block (label) testChar::@7 +Culled Empty Block (label) testShort::@7 +Culled Empty Block (label) testInt::@7 +Culled Empty Block (label) testLong::@7 +Culled Empty Block (label) @25 +Successful SSA optimization Pass2CullEmptyBlocks +Inlining constant with var siblings (const byte*) print_str::str#1 +Inlining constant with var siblings (const byte*) print_str::str#2 +Inlining constant with var siblings (const byte*) print_str::str#3 +Inlining constant with var siblings (const byte*) print_str::str#4 +Inlining constant with var siblings (const signed word) print_sword::w#1 +Inlining constant with var siblings (const signed word) print_sword::w#2 +Inlining constant with var siblings (const signed word) print_sword::w#3 +Inlining constant with var siblings (const signed word) print_sword::w#4 +Inlining constant with var siblings (const signed byte) print_sbyte::b#1 +Inlining constant with var siblings (const signed byte) print_sbyte::b#2 +Inlining constant with var siblings (const word) print_word::w#3 +Inlining constant with var siblings (const word) print_word::w#4 +Inlining constant with var siblings (const dword) print_dword::dw#1 +Inlining constant with var siblings (const signed dword) print_sdword::dw#1 +Inlining constant with var siblings (const signed dword) print_sdword::dw#2 +Inlining constant with var siblings (const byte) print_byte::b#3 +Inlining constant with var siblings (const byte) print_char::ch#0 +Inlining constant with var siblings (const byte) print_char::ch#1 +Inlining constant with var siblings (const byte) print_char::ch#2 +Inlining constant with var siblings (const byte) print_char::ch#3 +Inlining constant with var siblings (const byte) print_char::ch#6 +Inlining constant with var siblings (const byte) print_char::ch#7 +Inlining constant with var siblings (const byte) print_char::ch#8 +Inlining constant with var siblings (const byte) print_char::ch#9 +Inlining constant with var siblings (const byte) print_char::ch#10 +Inlining constant with var siblings (const byte) print_char::ch#11 +Inlining constant with var siblings (const byte) print_char::ch#12 +Inlining constant with var siblings (const byte) print_char::ch#13 +Inlining constant with var siblings (const byte*) print_cls::sc#0 +Inlining constant with var siblings (const byte*) print_line_cursor#0 +Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8 +Constant inlined print_char::ch#13 = (byte) ' ' +Constant inlined print_sbyte::b#1 = (const signed byte) testChar::n#0 +Constant inlined print_sbyte::b#2 = (const signed byte) testChar::s#0 +Constant inlined print_char::ch#10 = (byte) ' ' +Constant inlined print_sword::w#1 = (const signed word) testShort::n#0 +Constant inlined print_char::ch#11 = (byte) ' ' +Constant inlined print_sword::w#2 = (const signed word) testShort::s#0 +Constant inlined print_char::ch#12 = (byte) ' ' +Constant inlined print_sword::w#3 = (const signed word) testInt::n#0 +Constant inlined $0 = (const byte[]) print_hextab#0 +Constant inlined print_char::ch#7 = (byte) ' ' +Constant inlined print_sword::w#4 = (const signed word) testInt::s#0 +Constant inlined print_dword::dw#1 = (const dword) testLong::u#0 +Constant inlined print_char::ch#6 = (byte) ' ' +Constant inlined print_char::ch#9 = (byte) ' ' +Constant inlined print_char::ch#8 = (byte) ' ' +Constant inlined print_sdword::dw#2 = (const signed dword) testLong::s#0 +Constant inlined print_sdword::dw#1 = (const signed dword) testLong::n#0 +Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) $400 +Constant inlined print_byte::b#3 = (const byte) testChar::u#0 +Constant inlined print_word::w#3 = (const word) testShort::u#0 +Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) $400 +Constant inlined print_word::w#4 = (const word) testInt::u#0 +Constant inlined print_char::ch#3 = (byte) '-' +Constant inlined print_char::ch#2 = (byte) ' ' +Constant inlined print_char::ch#1 = (byte) '-' +Constant inlined print_char::ch#0 = (byte) '-' +Constant inlined print_str::str#4 = (const string) testLong::str +Constant inlined print_str::str#3 = (const string) testInt::str +Constant inlined print_str::str#2 = (const string) testShort::str +Constant inlined print_str::str#1 = (const string) testChar::str +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting print_sdword::@5(between print_sdword and print_sdword::@1) +Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1) +Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @24 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of testLong::@3 +Adding NOP phi() at start of testLong::@5 +Adding NOP phi() at start of testInt::@3 +Adding NOP phi() at start of testInt::@5 +Adding NOP phi() at start of testShort::@3 +Adding NOP phi() at start of testShort::@5 +Adding NOP phi() at start of testChar +Adding NOP phi() at start of testChar::@3 +Adding NOP phi() at start of testChar::@5 +Adding NOP phi() at start of testChar::@6 +Adding NOP phi() at start of print_cls +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to print_cls:5 testChar:7 testShort:9 testInt:11 testLong:13 +Calls in [testLong] to print_str:16 print_dword:18 print_char:20 print_sdword:22 print_char:24 print_sdword:26 print_ln:28 +Calls in [print_sdword] to print_char:40 print_dword:47 +Calls in [print_dword] to print_word:54 print_word:58 +Calls in [print_word] to print_byte:64 print_byte:68 +Calls in [print_byte] to print_char:75 print_char:80 +Calls in [testInt] to print_str:98 print_word:100 print_char:102 print_sword:104 print_char:106 print_sword:108 print_ln:110 +Calls in [print_sword] to print_char:115 print_word:121 +Calls in [testShort] to print_str:125 print_word:127 print_char:129 print_sword:131 print_char:133 print_sword:135 print_ln:137 +Calls in [testChar] to print_str:140 print_byte:142 print_char:144 print_sbyte:146 print_char:148 print_sbyte:150 print_ln:152 +Calls in [print_sbyte] to print_char:157 print_byte:162 print_char:165 + +Created 21 initial phi equivalence classes +Not coalescing [15] print_char_cursor#181 ← print_line_cursor#1 +Coalesced [17] print_char_cursor#156 ← print_char_cursor#132 +Coalesced [19] print_char_cursor#176 ← print_char_cursor#24 +Coalesced (already) [23] print_char_cursor#177 ← print_char_cursor#24 +Coalesced [27] print_line_cursor#72 ← print_line_cursor#1 +Coalesced [31] print_line_cursor#74 ← print_line_cursor#39 +Coalesced (already) [36] print_line_cursor#75 ← print_line_cursor#1 +Coalesced (already) [39] print_char_cursor#170 ← print_char_cursor#24 +Coalesced [42] print_sdword::dw#8 ← print_sdword::dw#0 +Coalesced [45] print_dword::dw#4 ← print_dword::dw#0 +Coalesced [46] print_char_cursor#155 ← print_char_cursor#24 +Coalesced [49] print_sdword::dw#7 ← print_sdword::dw#3 +Coalesced [52] print_word::w#7 ← print_word::w#1 +Coalesced [53] print_char_cursor#157 ← print_char_cursor#140 +Coalesced [56] print_word::w#8 ← print_word::w#2 +Coalesced (already) [57] print_char_cursor#158 ← print_char_cursor#24 +Coalesced [62] print_byte::b#7 ← print_byte::b#1 +Coalesced [63] print_char_cursor#163 ← print_char_cursor#139 +Coalesced [66] print_byte::b#8 ← print_byte::b#2 +Coalesced (already) [67] print_char_cursor#164 ← print_char_cursor#24 +Coalesced [73] print_char::ch#15 ← print_char::ch#4 +Coalesced (already) [74] print_char_cursor#166 ← print_char_cursor#143 +Coalesced [78] print_char::ch#16 ← print_char::ch#5 +Coalesced (already) [79] print_char_cursor#167 ← print_char_cursor#24 +Coalesced [87] print_str::str#8 ← print_str::str#7 +Coalesced [88] print_char_cursor#183 ← print_char_cursor#150 +Coalesced [95] print_str::str#9 ← print_str::str#0 +Coalesced [96] print_char_cursor#184 ← print_char_cursor#1 +Not coalescing [97] print_char_cursor#180 ← print_line_cursor#1 +Coalesced (already) [99] print_char_cursor#160 ← print_char_cursor#132 +Coalesced (already) [101] print_char_cursor#174 ← print_char_cursor#24 +Coalesced (already) [105] print_char_cursor#175 ← print_char_cursor#24 +Coalesced (already) [109] print_line_cursor#71 ← print_line_cursor#1 +Coalesced (already) [114] print_char_cursor#171 ← print_char_cursor#24 +Coalesced [117] print_sword::w#10 ← print_sword::w#0 +Coalesced (already) [120] print_char_cursor#159 ← print_char_cursor#24 +Coalesced [123] print_sword::w#9 ← print_sword::w#5 +Not coalescing [124] print_char_cursor#182 ← print_line_cursor#1 +Coalesced (already) [126] print_char_cursor#161 ← print_char_cursor#132 +Coalesced (already) [128] print_char_cursor#178 ← print_char_cursor#24 +Coalesced (already) [132] print_char_cursor#179 ← print_char_cursor#24 +Coalesced (already) [136] print_line_cursor#73 ← print_line_cursor#1 +Coalesced (already) [141] print_char_cursor#165 ← print_char_cursor#132 +Coalesced (already) [143] print_char_cursor#172 ← print_char_cursor#24 +Coalesced (already) [147] print_char_cursor#173 ← print_char_cursor#24 +Coalesced (already) [156] print_char_cursor#169 ← print_char_cursor#24 +Coalesced [158] print_sbyte::b#10 ← print_sbyte::b#3 +Coalesced (already) [161] print_char_cursor#162 ← print_char_cursor#24 +Coalesced (already) [164] print_char_cursor#168 ← print_char_cursor#24 +Coalesced [167] print_sbyte::b#9 ← print_sbyte::b#0 +Coalesced [174] print_cls::sc#3 ← print_cls::sc#1 +Coalesced down to 11 phi equivalence classes +Culled Empty Block (label) print_ln::@3 +Culled Empty Block (label) print_sdword::@5 +Culled Empty Block (label) print_sword::@5 +Culled Empty Block (label) print_cls::@3 +Renumbering block @24 to @1 +Renumbering block print_sword::@4 to print_sword::@3 +Renumbering block print_sbyte::@5 to print_sbyte::@4 +Renumbering block print_sdword::@4 to print_sdword::@3 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of testLong::@1 +Adding NOP phi() at start of testLong::@2 +Adding NOP phi() at start of testLong::@3 +Adding NOP phi() at start of testLong::@4 +Adding NOP phi() at start of testLong::@5 +Adding NOP phi() at start of testLong::@6 +Adding NOP phi() at start of print_sdword::@2 +Adding NOP phi() at start of testInt::@1 +Adding NOP phi() at start of testInt::@2 +Adding NOP phi() at start of testInt::@3 +Adding NOP phi() at start of testInt::@4 +Adding NOP phi() at start of testInt::@5 +Adding NOP phi() at start of testInt::@6 +Adding NOP phi() at start of print_sword::@2 +Adding NOP phi() at start of testShort::@1 +Adding NOP phi() at start of testShort::@2 +Adding NOP phi() at start of testShort::@3 +Adding NOP phi() at start of testShort::@4 +Adding NOP phi() at start of testShort::@5 +Adding NOP phi() at start of testShort::@6 +Adding NOP phi() at start of testChar +Adding NOP phi() at start of testChar::@1 +Adding NOP phi() at start of testChar::@2 +Adding NOP phi() at start of testChar::@3 +Adding NOP phi() at start of testChar::@4 +Adding NOP phi() at start of testChar::@5 +Adding NOP phi() at start of testChar::@6 +Adding NOP phi() at start of print_sbyte::@3 +Adding NOP phi() at start of print_sbyte::@1 +Adding NOP phi() at start of print_cls + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + [5] call print_cls + to:main::@1 +main::@1: scope:[main] from main + [6] phi() + [7] call testChar + to:main::@2 +main::@2: scope:[main] from main::@1 + [8] phi() + [9] call testShort + to:main::@3 +main::@3: scope:[main] from main::@2 + [10] phi() + [11] call testInt + to:main::@4 +main::@4: scope:[main] from main::@3 + [12] phi() + [13] call testLong + to:main::@return +main::@return: scope:[main] from main::@4 + [14] return + to:@return +testLong: scope:[testLong] from main::@4 + [15] (byte*~) print_char_cursor#181 ← (byte*) print_line_cursor#1 + [16] call print_str + to:testLong::@1 +testLong::@1: scope:[testLong] from testLong + [17] phi() + [18] call print_dword + to:testLong::@2 +testLong::@2: scope:[testLong] from testLong::@1 + [19] phi() + [20] call print_char + to:testLong::@3 +testLong::@3: scope:[testLong] from testLong::@2 + [21] phi() + [22] call print_sdword + to:testLong::@4 +testLong::@4: scope:[testLong] from testLong::@3 + [23] phi() + [24] call print_char + to:testLong::@5 +testLong::@5: scope:[testLong] from testLong::@4 + [25] phi() + [26] call print_sdword + to:testLong::@6 +testLong::@6: scope:[testLong] from testLong::@5 + [27] phi() + [28] call print_ln + to:testLong::@return +testLong::@return: scope:[testLong] from testLong::@6 + [29] return + to:@return +print_ln: scope:[print_ln] from testChar::@6 testInt::@6 testLong::@6 testShort::@6 + [30] (byte*) print_line_cursor#39 ← phi( testChar::@6/((byte*))(word/signed word/dword/signed dword) $400 testInt::@6/(byte*) print_line_cursor#1 testLong::@6/(byte*) print_line_cursor#1 testShort::@6/(byte*) print_line_cursor#1 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [31] (byte*) print_line_cursor#20 ← phi( print_ln/(byte*) print_line_cursor#39 print_ln::@1/(byte*) print_line_cursor#1 ) + [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 + [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [34] return + to:@return +print_sdword: scope:[print_sdword] from testLong::@3 testLong::@5 + [35] (signed dword) print_sdword::dw#3 ← phi( testLong::@3/(const signed dword) testLong::n#0 testLong::@5/(const signed dword) testLong::s#0 ) + [36] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 + to:print_sdword::@2 +print_sdword::@2: scope:[print_sdword] from print_sdword + [37] phi() + [38] call print_char + to:print_sdword::@3 +print_sdword::@3: scope:[print_sdword] from print_sdword::@2 + [39] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#3 + to:print_sdword::@1 +print_sdword::@1: scope:[print_sdword] from print_sdword print_sdword::@3 + [40] (signed dword) print_sdword::dw#4 ← phi( print_sdword/(signed dword) print_sdword::dw#3 print_sdword::@3/(signed dword) print_sdword::dw#0 ) + [41] (dword) print_dword::dw#0 ← ((dword)) (signed dword) print_sdword::dw#4 + [42] call print_dword + to:print_sdword::@return +print_sdword::@return: scope:[print_sdword] from print_sdword::@1 + [43] return + to:@return +print_dword: scope:[print_dword] from print_sdword::@1 testLong::@1 + [44] (byte*) print_char_cursor#140 ← phi( print_sdword::@1/(byte*) print_char_cursor#24 testLong::@1/(byte*) print_char_cursor#132 ) + [44] (dword) print_dword::dw#2 ← phi( print_sdword::@1/(dword) print_dword::dw#0 testLong::@1/(const dword) testLong::u#0 ) + [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 + [46] call print_word + to:print_dword::@1 +print_dword::@1: scope:[print_dword] from print_dword + [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 + [48] call print_word + to:print_dword::@return +print_dword::@return: scope:[print_dword] from print_dword::@1 + [49] return + to:@return +print_word: scope:[print_word] from print_dword print_dword::@1 print_sword::@1 testInt::@1 testShort::@1 + [50] (byte*) print_char_cursor#139 ← phi( print_dword/(byte*) print_char_cursor#140 print_dword::@1/(byte*) print_char_cursor#24 print_sword::@1/(byte*) print_char_cursor#24 testInt::@1/(byte*) print_char_cursor#132 testShort::@1/(byte*) print_char_cursor#132 ) + [50] (word) print_word::w#5 ← phi( print_dword/(word) print_word::w#1 print_dword::@1/(word) print_word::w#2 print_sword::@1/(word~) print_word::w#9 testInt::@1/(const word) testInt::u#0 testShort::@1/(const word) testShort::u#0 ) + [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 + [52] call print_byte + to:print_word::@1 +print_word::@1: scope:[print_word] from print_word + [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 + [54] call print_byte + to:print_word::@return +print_word::@return: scope:[print_word] from print_word::@1 + [55] return + to:@return +print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 testChar::@1 + [56] (byte*) print_char_cursor#143 ← phi( print_sbyte::@2/(byte*) print_char_cursor#24 print_word/(byte*) print_char_cursor#139 print_word::@1/(byte*) print_char_cursor#24 testChar::@1/(byte*) print_char_cursor#132 ) + [56] (byte) print_byte::b#4 ← phi( print_sbyte::@2/(byte~) print_byte::b#6 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 testChar::@1/(const byte) testChar::u#0 ) + [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 + [58] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) + [59] call print_char + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) $f + [61] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) + [62] call print_char + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [63] return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sdword::@2 print_sword::@2 testChar::@2 testChar::@4 testInt::@2 testInt::@4 testLong::@2 testLong::@4 testShort::@2 testShort::@4 + [64] (byte*) print_char_cursor#90 ← phi( print_byte/(byte*) print_char_cursor#143 print_byte::@1/(byte*) print_char_cursor#24 print_sbyte::@1/(byte*) print_char_cursor#24 print_sbyte::@3/(byte*) print_char_cursor#24 print_sdword::@2/(byte*) print_char_cursor#24 print_sword::@2/(byte*) print_char_cursor#24 testChar::@2/(byte*) print_char_cursor#24 testChar::@4/(byte*) print_char_cursor#24 testInt::@2/(byte*) print_char_cursor#24 testInt::@4/(byte*) print_char_cursor#24 testLong::@2/(byte*) print_char_cursor#24 testLong::@4/(byte*) print_char_cursor#24 testShort::@2/(byte*) print_char_cursor#24 testShort::@4/(byte*) print_char_cursor#24 ) + [64] (byte) print_char::ch#14 ← phi( print_byte/(byte) print_char::ch#4 print_byte::@1/(byte) print_char::ch#5 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sdword::@2/(byte) '-' print_sword::@2/(byte) '-' testChar::@2/(byte) ' ' testChar::@4/(byte) ' ' testInt::@2/(byte) ' ' testInt::@4/(byte) ' ' testLong::@2/(byte) ' ' testLong::@4/(byte) ' ' testShort::@2/(byte) ' ' testShort::@4/(byte) ' ' ) + [65] *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 + [66] (byte*) print_char_cursor#24 ← ++ (byte*) print_char_cursor#90 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [67] return + to:@return +print_str: scope:[print_str] from testChar testInt testLong testShort + [68] (byte*) print_char_cursor#150 ← phi( testChar/((byte*))(word/signed word/dword/signed dword) $400 testInt/(byte*~) print_char_cursor#180 testLong/(byte*~) print_char_cursor#181 testShort/(byte*~) print_char_cursor#182 ) + [68] (byte*) print_str::str#7 ← phi( testChar/(const string) testChar::str testInt/(const string) testInt::str testLong/(const string) testLong::str testShort/(const string) testShort::str ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + [69] (byte*) print_char_cursor#132 ← phi( print_str/(byte*) print_char_cursor#150 print_str::@2/(byte*) print_char_cursor#1 ) + [69] (byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#7 print_str::@2/(byte*) print_str::str#0 ) + [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 + to:print_str::@return +print_str::@return: scope:[print_str] from print_str::@1 + [71] return + to:@return +print_str::@2: scope:[print_str] from print_str::@1 + [72] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#5) + [73] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#132 + [74] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#5 + to:print_str::@1 +testInt: scope:[testInt] from main::@3 + [75] (byte*~) print_char_cursor#180 ← (byte*) print_line_cursor#1 + [76] call print_str + to:testInt::@1 +testInt::@1: scope:[testInt] from testInt + [77] phi() + [78] call print_word + to:testInt::@2 +testInt::@2: scope:[testInt] from testInt::@1 + [79] phi() + [80] call print_char + to:testInt::@3 +testInt::@3: scope:[testInt] from testInt::@2 + [81] phi() + [82] call print_sword + to:testInt::@4 +testInt::@4: scope:[testInt] from testInt::@3 + [83] phi() + [84] call print_char + to:testInt::@5 +testInt::@5: scope:[testInt] from testInt::@4 + [85] phi() + [86] call print_sword + to:testInt::@6 +testInt::@6: scope:[testInt] from testInt::@5 + [87] phi() + [88] call print_ln + to:testInt::@return +testInt::@return: scope:[testInt] from testInt::@6 + [89] return + to:@return +print_sword: scope:[print_sword] from testInt::@3 testInt::@5 testShort::@3 testShort::@5 + [90] (signed word) print_sword::w#5 ← phi( testInt::@3/(const signed word) testInt::n#0 testInt::@5/(const signed word) testInt::s#0 testShort::@3/(const signed word) testShort::n#0 testShort::@5/(const signed word) testShort::s#0 ) + [91] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 + to:print_sword::@2 +print_sword::@2: scope:[print_sword] from print_sword + [92] phi() + [93] call print_char + to:print_sword::@3 +print_sword::@3: scope:[print_sword] from print_sword::@2 + [94] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 + to:print_sword::@1 +print_sword::@1: scope:[print_sword] from print_sword print_sword::@3 + [95] (signed word) print_sword::w#6 ← phi( print_sword/(signed word) print_sword::w#5 print_sword::@3/(signed word) print_sword::w#0 ) + [96] (word~) print_word::w#9 ← (word)(signed word) print_sword::w#6 + [97] call print_word + to:print_sword::@return +print_sword::@return: scope:[print_sword] from print_sword::@1 + [98] return + to:@return +testShort: scope:[testShort] from main::@2 + [99] (byte*~) print_char_cursor#182 ← (byte*) print_line_cursor#1 + [100] call print_str + to:testShort::@1 +testShort::@1: scope:[testShort] from testShort + [101] phi() + [102] call print_word + to:testShort::@2 +testShort::@2: scope:[testShort] from testShort::@1 + [103] phi() + [104] call print_char + to:testShort::@3 +testShort::@3: scope:[testShort] from testShort::@2 + [105] phi() + [106] call print_sword + to:testShort::@4 +testShort::@4: scope:[testShort] from testShort::@3 + [107] phi() + [108] call print_char + to:testShort::@5 +testShort::@5: scope:[testShort] from testShort::@4 + [109] phi() + [110] call print_sword + to:testShort::@6 +testShort::@6: scope:[testShort] from testShort::@5 + [111] phi() + [112] call print_ln + to:testShort::@return +testShort::@return: scope:[testShort] from testShort::@6 + [113] return + to:@return +testChar: scope:[testChar] from main::@1 + [114] phi() + [115] call print_str + to:testChar::@1 +testChar::@1: scope:[testChar] from testChar + [116] phi() + [117] call print_byte + to:testChar::@2 +testChar::@2: scope:[testChar] from testChar::@1 + [118] phi() + [119] call print_char + to:testChar::@3 +testChar::@3: scope:[testChar] from testChar::@2 + [120] phi() + [121] call print_sbyte + to:testChar::@4 +testChar::@4: scope:[testChar] from testChar::@3 + [122] phi() + [123] call print_char + to:testChar::@5 +testChar::@5: scope:[testChar] from testChar::@4 + [124] phi() + [125] call print_sbyte + to:testChar::@6 +testChar::@6: scope:[testChar] from testChar::@5 + [126] phi() + [127] call print_ln + to:testChar::@return +testChar::@return: scope:[testChar] from testChar::@6 + [128] return + to:@return +print_sbyte: scope:[print_sbyte] from testChar::@3 testChar::@5 + [129] (signed byte) print_sbyte::b#3 ← phi( testChar::@3/(const signed byte) testChar::n#0 testChar::@5/(const signed byte) testChar::s#0 ) + [130] if((signed byte) print_sbyte::b#3<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 + to:print_sbyte::@3 +print_sbyte::@3: scope:[print_sbyte] from print_sbyte + [131] phi() + [132] call print_char + to:print_sbyte::@2 +print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 + [133] (signed byte) print_sbyte::b#5 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#3 ) + [134] (byte~) print_byte::b#6 ← (byte)(signed byte) print_sbyte::b#5 + [135] call print_byte + to:print_sbyte::@return +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 + [136] return + to:@return +print_sbyte::@1: scope:[print_sbyte] from print_sbyte + [137] phi() + [138] call print_char + to:print_sbyte::@4 +print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 + [139] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 + to:print_sbyte::@2 +print_cls: scope:[print_cls] from main + [140] phi() + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [141] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) $400 print_cls::@1/(byte*) print_cls::sc#1 ) + [142] *((byte*) print_cls::sc#2) ← (byte) ' ' + [143] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + [144] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [145] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(void()) main() +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 4.0 +(byte~) print_byte::$2 4.0 +(byte) print_byte::b +(byte) print_byte::b#1 4.0 +(byte) print_byte::b#2 4.0 +(byte) print_byte::b#4 2.5 +(byte~) print_byte::b#6 4.0 +(void()) print_char((byte) print_char::ch) +(byte) print_char::ch +(byte) print_char::ch#14 6.0 +(byte) print_char::ch#4 4.0 +(byte) print_char::ch#5 4.0 +(byte*) print_char_cursor +(byte*) print_char_cursor#1 11.0 +(byte*) print_char_cursor#132 3.583333333333333 +(byte*) print_char_cursor#139 6.0 +(byte*) print_char_cursor#140 3.0 +(byte*) print_char_cursor#143 3.333333333333333 +(byte*) print_char_cursor#150 8.0 +(byte*~) print_char_cursor#180 4.0 +(byte*~) print_char_cursor#181 4.0 +(byte*~) print_char_cursor#182 4.0 +(byte*) print_char_cursor#24 0.5568181818181817 +(byte*) print_char_cursor#90 16.0 +(void()) print_cls() +(byte*) print_cls::sc +(byte*) print_cls::sc#1 16.5 +(byte*) print_cls::sc#2 16.5 +(void()) print_dword((dword) print_dword::dw) +(dword) print_dword::dw +(dword) print_dword::dw#0 4.0 +(dword) print_dword::dw#2 2.0 +(byte[]) print_hextab +(byte*) print_line_cursor +(byte*) print_line_cursor#1 0.8333333333333333 +(byte*) print_line_cursor#20 24.0 +(byte*) print_line_cursor#39 8.0 +(void()) print_ln() +(void()) print_sbyte((signed byte) print_sbyte::b) +(signed byte) print_sbyte::b +(signed byte) print_sbyte::b#0 4.0 +(signed byte) print_sbyte::b#3 1.0 +(signed byte) print_sbyte::b#5 4.0 +(byte*) print_screen +(void()) print_sdword((signed dword) print_sdword::dw) +(signed dword) print_sdword::dw +(signed dword) print_sdword::dw#0 4.0 +(signed dword) print_sdword::dw#3 1.5 +(signed dword) print_sdword::dw#4 6.0 +(void()) print_str((byte*) print_str::str) +(byte*) print_str::str +(byte*) print_str::str#0 22.0 +(byte*) print_str::str#5 11.5 +(byte*) print_str::str#7 2.0 +(void()) print_sword((signed word) print_sword::w) +(signed word) print_sword::w +(signed word) print_sword::w#0 4.0 +(signed word) print_sword::w#5 1.5 +(signed word) print_sword::w#6 4.0 +(void()) print_word((word) print_word::w) +(word) print_word::w +(word) print_word::w#1 4.0 +(word) print_word::w#2 4.0 +(word) print_word::w#5 3.333333333333333 +(word~) print_word::w#9 4.0 +(void()) testChar() +(signed byte) testChar::n +(signed byte) testChar::s +(byte) testChar::u +(void()) testInt() +(signed word) testInt::n +(signed word) testInt::s +(word) testInt::u +(void()) testLong() +(signed dword) testLong::n +(signed dword) testLong::s +(dword) testLong::u +(void()) testShort() +(signed word) testShort::n +(signed word) testShort::s +(word) testShort::u + +Initial phi equivalence classes +[ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +[ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] +[ print_dword::dw#2 print_dword::dw#0 ] +[ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 ] +[ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] +[ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] +[ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] +[ print_str::str#5 print_str::str#7 print_str::str#0 ] +[ print_sword::w#6 print_sword::w#5 print_sword::w#0 ] +[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +[ print_cls::sc#2 print_cls::sc#1 ] +Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] +Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] +Complete equivalence classes +[ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +[ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] +[ print_dword::dw#2 print_dword::dw#0 ] +[ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 ] +[ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] +[ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] +[ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] +[ print_str::str#5 print_str::str#7 print_str::str#0 ] +[ print_sword::w#6 print_sword::w#5 print_sword::w#0 ] +[ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +[ print_cls::sc#2 print_cls::sc#1 ] +[ print_byte::$0 ] +[ print_byte::$2 ] +Allocated zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +Allocated zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] +Allocated zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] +Allocated zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 ] +Allocated zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] +Allocated zp ZP_BYTE:15 [ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] +Allocated zp ZP_WORD:16 [ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] +Allocated zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] +Allocated zp ZP_WORD:20 [ print_sword::w#6 print_sword::w#5 print_sword::w#0 ] +Allocated zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +Allocated zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] +Allocated zp ZP_BYTE:25 [ print_byte::$0 ] +Allocated zp ZP_BYTE:26 [ print_byte::$2 ] + +INITIAL ASM +//SEG0 File Comments +// Tests the different standard C types +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label print_char_cursor = $10 + .label print_line_cursor = 2 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + //SEG11 [5] call print_cls + //SEG12 [140] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + //SEG14 main::@1 + b1: + //SEG15 [7] call testChar + //SEG16 [114] phi from main::@1 to testChar [phi:main::@1->testChar] + testChar_from_b1: + jsr testChar + //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + //SEG18 main::@2 + b2: + //SEG19 [9] call testShort + jsr testShort + //SEG20 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + jmp b3 + //SEG21 main::@3 + b3: + //SEG22 [11] call testInt + jsr testInt + //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + jmp b4 + //SEG24 main::@4 + b4: + //SEG25 [13] call testLong + jsr testLong + jmp breturn + //SEG26 main::@return + breturn: + //SEG27 [14] return + rts +} +//SEG28 testLong +testLong: { + .const u = $222e0 + .const n = -$222e0 + .const s = -$222e0 + //SEG29 [15] (byte*~) print_char_cursor#181 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG30 [16] call print_str + //SEG31 [68] phi from testLong to print_str [phi:testLong->print_str] + print_str_from_testLong: + //SEG32 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#181 [phi:testLong->print_str#0] -- register_copy + //SEG33 [68] phi (byte*) print_str::str#7 = (const string) testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG34 [17] phi from testLong to testLong::@1 [phi:testLong->testLong::@1] + b1_from_testLong: + jmp b1 + //SEG35 testLong::@1 + b1: + //SEG36 [18] call print_dword + //SEG37 [44] phi from testLong::@1 to print_dword [phi:testLong::@1->print_dword] + print_dword_from_b1: + //SEG38 [44] phi (byte*) print_char_cursor#140 = (byte*) print_char_cursor#132 [phi:testLong::@1->print_dword#0] -- register_copy + //SEG39 [44] phi (dword) print_dword::dw#2 = (const dword) testLong::u#0 [phi:testLong::@1->print_dword#1] -- vduz1=vduc1 + lda #u + sta print_dword.dw+1 + lda #>$10 + sta print_dword.dw+2 + lda #>u>>$10 + sta print_dword.dw+3 + jsr print_dword + //SEG40 [19] phi from testLong::@1 to testLong::@2 [phi:testLong::@1->testLong::@2] + b2_from_b1: + jmp b2 + //SEG41 testLong::@2 + b2: + //SEG42 [20] call print_char + //SEG43 [64] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] + print_char_from_b2: + //SEG44 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testLong::@2->print_char#0] -- register_copy + //SEG45 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testLong::@2->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG46 [21] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] + b3_from_b2: + jmp b3 + //SEG47 testLong::@3 + b3: + //SEG48 [22] call print_sdword + //SEG49 [35] phi from testLong::@3 to print_sdword [phi:testLong::@3->print_sdword] + print_sdword_from_b3: + //SEG50 [35] phi (signed dword) print_sdword::dw#3 = (const signed dword) testLong::n#0 [phi:testLong::@3->print_sdword#0] -- vdsz1=vdsc1 + lda #n + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>n>>$10 + sta print_sdword.dw+3 + jsr print_sdword + //SEG51 [23] phi from testLong::@3 to testLong::@4 [phi:testLong::@3->testLong::@4] + b4_from_b3: + jmp b4 + //SEG52 testLong::@4 + b4: + //SEG53 [24] call print_char + //SEG54 [64] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] + print_char_from_b4: + //SEG55 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testLong::@4->print_char#0] -- register_copy + //SEG56 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testLong::@4->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG57 [25] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] + b5_from_b4: + jmp b5 + //SEG58 testLong::@5 + b5: + //SEG59 [26] call print_sdword + //SEG60 [35] phi from testLong::@5 to print_sdword [phi:testLong::@5->print_sdword] + print_sdword_from_b5: + //SEG61 [35] phi (signed dword) print_sdword::dw#3 = (const signed dword) testLong::s#0 [phi:testLong::@5->print_sdword#0] -- vdsz1=vdsc1 + lda #s + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>s>>$10 + sta print_sdword.dw+3 + jsr print_sdword + //SEG62 [27] phi from testLong::@5 to testLong::@6 [phi:testLong::@5->testLong::@6] + b6_from_b5: + jmp b6 + //SEG63 testLong::@6 + b6: + //SEG64 [28] call print_ln + //SEG65 [30] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] + print_ln_from_b6: + //SEG66 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testLong::@6->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + //SEG67 testLong::@return + breturn: + //SEG68 [29] return + rts + str: .text "long: @" +} +//SEG69 print_ln +// Print a newline +print_ln: { + //SEG70 [31] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG71 [31] phi (byte*) print_line_cursor#20 = (byte*) print_line_cursor#39 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG72 print_ln::@1 + b1: + //SEG73 [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + //SEG74 [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + lda print_line_cursor+1 + cmp print_char_cursor+1 + bcc b1_from_b1 + bne !+ + lda print_line_cursor + cmp print_char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG75 print_ln::@return + breturn: + //SEG76 [34] return + rts +} +//SEG77 print_sdword +// Print a signed dword as HEX +// print_sdword(signed dword zeropage(4) dw) +print_sdword: { + .label dw = 4 + //SEG78 [36] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 -- vdsz1_ge_0_then_la1 + lda dw+3 + bpl b1_from_print_sdword + //SEG79 [37] phi from print_sdword to print_sdword::@2 [phi:print_sdword->print_sdword::@2] + b2_from_print_sdword: + jmp b2 + //SEG80 print_sdword::@2 + b2: + //SEG81 [38] call print_char + //SEG82 [64] phi from print_sdword::@2 to print_char [phi:print_sdword::@2->print_char] + print_char_from_b2: + //SEG83 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sdword::@2->print_char#0] -- register_copy + //SEG84 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sdword::@2->print_char#1] -- vbuz1=vbuc1 + lda #'-' + sta print_char.ch + jsr print_char + jmp b3 + //SEG85 print_sdword::@3 + b3: + //SEG86 [39] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#3 -- vdsz1=_neg_vdsz1 + sec + lda dw + eor #$ff + adc #0 + sta dw + lda dw+1 + eor #$ff + adc #0 + sta dw+1 + lda dw+2 + eor #$ff + adc #0 + sta dw+2 + lda dw+3 + eor #$ff + adc #0 + sta dw+3 + //SEG87 [40] phi from print_sdword print_sdword::@3 to print_sdword::@1 [phi:print_sdword/print_sdword::@3->print_sdword::@1] + b1_from_print_sdword: + b1_from_b3: + //SEG88 [40] phi (signed dword) print_sdword::dw#4 = (signed dword) print_sdword::dw#3 [phi:print_sdword/print_sdword::@3->print_sdword::@1#0] -- register_copy + jmp b1 + //SEG89 print_sdword::@1 + b1: + //SEG90 [41] (dword) print_dword::dw#0 ← ((dword)) (signed dword) print_sdword::dw#4 -- vduz1=_dword_vdsz2 + lda dw + sta print_dword.dw + lda dw+1 + sta print_dword.dw+1 + lda dw+2 + sta print_dword.dw+2 + lda dw+3 + sta print_dword.dw+3 + //SEG91 [42] call print_dword + //SEG92 [44] phi from print_sdword::@1 to print_dword [phi:print_sdword::@1->print_dword] + print_dword_from_b1: + //SEG93 [44] phi (byte*) print_char_cursor#140 = (byte*) print_char_cursor#24 [phi:print_sdword::@1->print_dword#0] -- register_copy + //SEG94 [44] phi (dword) print_dword::dw#2 = (dword) print_dword::dw#0 [phi:print_sdword::@1->print_dword#1] -- register_copy + jsr print_dword + jmp breturn + //SEG95 print_sdword::@return + breturn: + //SEG96 [43] return + rts +} +//SEG97 print_dword +// Print a dword as HEX +// print_dword(dword zeropage(8) dw) +print_dword: { + .label dw = 8 + //SEG98 [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 -- vwuz1=_hi_vduz2 + lda dw+2 + sta print_word.w + lda dw+3 + sta print_word.w+1 + //SEG99 [46] call print_word + //SEG100 [50] phi from print_dword to print_word [phi:print_dword->print_word] + print_word_from_print_dword: + //SEG101 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#140 [phi:print_dword->print_word#0] -- register_copy + //SEG102 [50] phi (word) print_word::w#5 = (word) print_word::w#1 [phi:print_dword->print_word#1] -- register_copy + jsr print_word + jmp b1 + //SEG103 print_dword::@1 + b1: + //SEG104 [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 -- vwuz1=_lo_vduz2 + lda dw + sta print_word.w + lda dw+1 + sta print_word.w+1 + //SEG105 [48] call print_word + //SEG106 [50] phi from print_dword::@1 to print_word [phi:print_dword::@1->print_word] + print_word_from_b1: + //SEG107 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#24 [phi:print_dword::@1->print_word#0] -- register_copy + //SEG108 [50] phi (word) print_word::w#5 = (word) print_word::w#2 [phi:print_dword::@1->print_word#1] -- register_copy + jsr print_word + jmp breturn + //SEG109 print_dword::@return + breturn: + //SEG110 [49] return + rts +} +//SEG111 print_word +// Print a word as HEX +// print_word(word zeropage($c) w) +print_word: { + .label w = $c + //SEG112 [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 -- vbuz1=_hi_vwuz2 + lda w+1 + sta print_byte.b + //SEG113 [52] call print_byte + //SEG114 [56] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + //SEG115 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#139 [phi:print_word->print_byte#0] -- register_copy + //SEG116 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + //SEG117 print_word::@1 + b1: + //SEG118 [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 -- vbuz1=_lo_vwuz2 + lda w + sta print_byte.b + //SEG119 [54] call print_byte + //SEG120 [56] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + //SEG121 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#24 [phi:print_word::@1->print_byte#0] -- register_copy + //SEG122 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + //SEG123 print_word::@return + breturn: + //SEG124 [55] return + rts +} +//SEG125 print_byte +// Print a byte as HEX +// print_byte(byte zeropage($e) b) +print_byte: { + .label _0 = $19 + .label _2 = $1a + .label b = $e + //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz2_ror_4 + lda b + lsr + lsr + lsr + lsr + sta _0 + //SEG127 [58] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _0 + lda print_hextab,y + sta print_char.ch + //SEG128 [59] call print_char + //SEG129 [64] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG130 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy + //SEG131 [64] phi (byte) print_char::ch#14 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG132 print_byte::@1 + b1: + //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and b + sta _2 + //SEG134 [61] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _2 + lda print_hextab,y + sta print_char.ch + //SEG135 [62] call print_char + //SEG136 [64] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG137 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG138 [64] phi (byte) print_char::ch#14 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG139 print_byte::@return + breturn: + //SEG140 [63] return + rts +} +//SEG141 print_char +// Print a single char +// print_char(byte zeropage($f) ch) +print_char: { + .label ch = $f + //SEG142 [65] *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 -- _deref_pbuz1=vbuz2 + lda ch + ldy #0 + sta (print_char_cursor),y + //SEG143 [66] (byte*) print_char_cursor#24 ← ++ (byte*) print_char_cursor#90 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + jmp breturn + //SEG144 print_char::@return + breturn: + //SEG145 [67] return + rts +} +//SEG146 print_str +// Print a zero-terminated string +// print_str(byte* zeropage($12) str) +print_str: { + .label str = $12 + //SEG147 [69] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + //SEG148 [69] phi (byte*) print_char_cursor#132 = (byte*) print_char_cursor#150 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG149 [69] phi (byte*) print_str::str#5 = (byte*) print_str::str#7 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + //SEG150 print_str::@1 + b1: + //SEG151 [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG152 print_str::@return + breturn: + //SEG153 [71] return + rts + //SEG154 print_str::@2 + b2: + //SEG155 [72] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#5) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (print_char_cursor),y + //SEG156 [73] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#132 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + //SEG157 [74] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#5 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} +//SEG158 testInt +testInt: { + .const u = $578 + .const n = -$578 + .const s = -$578 + //SEG159 [75] (byte*~) print_char_cursor#180 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG160 [76] call print_str + //SEG161 [68] phi from testInt to print_str [phi:testInt->print_str] + print_str_from_testInt: + //SEG162 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#180 [phi:testInt->print_str#0] -- register_copy + //SEG163 [68] phi (byte*) print_str::str#7 = (const string) testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG164 [77] phi from testInt to testInt::@1 [phi:testInt->testInt::@1] + b1_from_testInt: + jmp b1 + //SEG165 testInt::@1 + b1: + //SEG166 [78] call print_word + //SEG167 [50] phi from testInt::@1 to print_word [phi:testInt::@1->print_word] + print_word_from_b1: + //SEG168 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#132 [phi:testInt::@1->print_word#0] -- register_copy + //SEG169 [50] phi (word) print_word::w#5 = (const word) testInt::u#0 [phi:testInt::@1->print_word#1] -- vwuz1=vwuc1 + lda #u + sta print_word.w+1 + jsr print_word + //SEG170 [79] phi from testInt::@1 to testInt::@2 [phi:testInt::@1->testInt::@2] + b2_from_b1: + jmp b2 + //SEG171 testInt::@2 + b2: + //SEG172 [80] call print_char + //SEG173 [64] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] + print_char_from_b2: + //SEG174 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testInt::@2->print_char#0] -- register_copy + //SEG175 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testInt::@2->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG176 [81] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] + b3_from_b2: + jmp b3 + //SEG177 testInt::@3 + b3: + //SEG178 [82] call print_sword + //SEG179 [90] phi from testInt::@3 to print_sword [phi:testInt::@3->print_sword] + print_sword_from_b3: + //SEG180 [90] phi (signed word) print_sword::w#5 = (const signed word) testInt::n#0 [phi:testInt::@3->print_sword#0] -- vwsz1=vwsc1 + lda #n + sta print_sword.w+1 + jsr print_sword + //SEG181 [83] phi from testInt::@3 to testInt::@4 [phi:testInt::@3->testInt::@4] + b4_from_b3: + jmp b4 + //SEG182 testInt::@4 + b4: + //SEG183 [84] call print_char + //SEG184 [64] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] + print_char_from_b4: + //SEG185 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testInt::@4->print_char#0] -- register_copy + //SEG186 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testInt::@4->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG187 [85] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] + b5_from_b4: + jmp b5 + //SEG188 testInt::@5 + b5: + //SEG189 [86] call print_sword + //SEG190 [90] phi from testInt::@5 to print_sword [phi:testInt::@5->print_sword] + print_sword_from_b5: + //SEG191 [90] phi (signed word) print_sword::w#5 = (const signed word) testInt::s#0 [phi:testInt::@5->print_sword#0] -- vwsz1=vwsc1 + lda #s + sta print_sword.w+1 + jsr print_sword + //SEG192 [87] phi from testInt::@5 to testInt::@6 [phi:testInt::@5->testInt::@6] + b6_from_b5: + jmp b6 + //SEG193 testInt::@6 + b6: + //SEG194 [88] call print_ln + //SEG195 [30] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] + print_ln_from_b6: + //SEG196 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testInt::@6->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + //SEG197 testInt::@return + breturn: + //SEG198 [89] return + rts + str: .text "int: @" +} +//SEG199 print_sword +// Print a signed word as HEX +// print_sword(signed word zeropage($14) w) +print_sword: { + .label w = $14 + //SEG200 [91] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 -- vwsz1_ge_0_then_la1 + lda w+1 + bpl b1_from_print_sword + //SEG201 [92] phi from print_sword to print_sword::@2 [phi:print_sword->print_sword::@2] + b2_from_print_sword: + jmp b2 + //SEG202 print_sword::@2 + b2: + //SEG203 [93] call print_char + //SEG204 [64] phi from print_sword::@2 to print_char [phi:print_sword::@2->print_char] + print_char_from_b2: + //SEG205 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sword::@2->print_char#0] -- register_copy + //SEG206 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sword::@2->print_char#1] -- vbuz1=vbuc1 + lda #'-' + sta print_char.ch + jsr print_char + jmp b3 + //SEG207 print_sword::@3 + b3: + //SEG208 [94] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 -- vwsz1=_neg_vwsz1 + sec + lda w + eor #$ff + adc #0 + sta w + lda w+1 + eor #$ff + adc #0 + sta w+1 + //SEG209 [95] phi from print_sword print_sword::@3 to print_sword::@1 [phi:print_sword/print_sword::@3->print_sword::@1] + b1_from_print_sword: + b1_from_b3: + //SEG210 [95] phi (signed word) print_sword::w#6 = (signed word) print_sword::w#5 [phi:print_sword/print_sword::@3->print_sword::@1#0] -- register_copy + jmp b1 + //SEG211 print_sword::@1 + b1: + //SEG212 [96] (word~) print_word::w#9 ← (word)(signed word) print_sword::w#6 -- vwuz1=vwuz2 + lda w + sta print_word.w + lda w+1 + sta print_word.w+1 + //SEG213 [97] call print_word + //SEG214 [50] phi from print_sword::@1 to print_word [phi:print_sword::@1->print_word] + print_word_from_b1: + //SEG215 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#24 [phi:print_sword::@1->print_word#0] -- register_copy + //SEG216 [50] phi (word) print_word::w#5 = (word~) print_word::w#9 [phi:print_sword::@1->print_word#1] -- register_copy + jsr print_word + jmp breturn + //SEG217 print_sword::@return + breturn: + //SEG218 [98] return + rts +} +//SEG219 testShort +testShort: { + .const u = $578 + .const n = -$578 + .const s = -$578 + //SEG220 [99] (byte*~) print_char_cursor#182 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG221 [100] call print_str + //SEG222 [68] phi from testShort to print_str [phi:testShort->print_str] + print_str_from_testShort: + //SEG223 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#182 [phi:testShort->print_str#0] -- register_copy + //SEG224 [68] phi (byte*) print_str::str#7 = (const string) testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG225 [101] phi from testShort to testShort::@1 [phi:testShort->testShort::@1] + b1_from_testShort: + jmp b1 + //SEG226 testShort::@1 + b1: + //SEG227 [102] call print_word + //SEG228 [50] phi from testShort::@1 to print_word [phi:testShort::@1->print_word] + print_word_from_b1: + //SEG229 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#132 [phi:testShort::@1->print_word#0] -- register_copy + //SEG230 [50] phi (word) print_word::w#5 = (const word) testShort::u#0 [phi:testShort::@1->print_word#1] -- vwuz1=vwuc1 + lda #u + sta print_word.w+1 + jsr print_word + //SEG231 [103] phi from testShort::@1 to testShort::@2 [phi:testShort::@1->testShort::@2] + b2_from_b1: + jmp b2 + //SEG232 testShort::@2 + b2: + //SEG233 [104] call print_char + //SEG234 [64] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] + print_char_from_b2: + //SEG235 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testShort::@2->print_char#0] -- register_copy + //SEG236 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testShort::@2->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG237 [105] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] + b3_from_b2: + jmp b3 + //SEG238 testShort::@3 + b3: + //SEG239 [106] call print_sword + //SEG240 [90] phi from testShort::@3 to print_sword [phi:testShort::@3->print_sword] + print_sword_from_b3: + //SEG241 [90] phi (signed word) print_sword::w#5 = (const signed word) testShort::n#0 [phi:testShort::@3->print_sword#0] -- vwsz1=vwsc1 + lda #n + sta print_sword.w+1 + jsr print_sword + //SEG242 [107] phi from testShort::@3 to testShort::@4 [phi:testShort::@3->testShort::@4] + b4_from_b3: + jmp b4 + //SEG243 testShort::@4 + b4: + //SEG244 [108] call print_char + //SEG245 [64] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] + print_char_from_b4: + //SEG246 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testShort::@4->print_char#0] -- register_copy + //SEG247 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testShort::@4->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG248 [109] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] + b5_from_b4: + jmp b5 + //SEG249 testShort::@5 + b5: + //SEG250 [110] call print_sword + //SEG251 [90] phi from testShort::@5 to print_sword [phi:testShort::@5->print_sword] + print_sword_from_b5: + //SEG252 [90] phi (signed word) print_sword::w#5 = (const signed word) testShort::s#0 [phi:testShort::@5->print_sword#0] -- vwsz1=vwsc1 + lda #s + sta print_sword.w+1 + jsr print_sword + //SEG253 [111] phi from testShort::@5 to testShort::@6 [phi:testShort::@5->testShort::@6] + b6_from_b5: + jmp b6 + //SEG254 testShort::@6 + b6: + //SEG255 [112] call print_ln + //SEG256 [30] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] + print_ln_from_b6: + //SEG257 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testShort::@6->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + //SEG258 testShort::@return + breturn: + //SEG259 [113] return + rts + str: .text "short: @" +} +//SEG260 testChar +testChar: { + .const u = $e + .const n = -$e + .const s = -$e + //SEG261 [115] call print_str + //SEG262 [68] phi from testChar to print_str [phi:testChar->print_str] + print_str_from_testChar: + //SEG263 [68] phi (byte*) print_char_cursor#150 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:testChar->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + //SEG264 [68] phi (byte*) print_str::str#7 = (const string) testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG265 [116] phi from testChar to testChar::@1 [phi:testChar->testChar::@1] + b1_from_testChar: + jmp b1 + //SEG266 testChar::@1 + b1: + //SEG267 [117] call print_byte + //SEG268 [56] phi from testChar::@1 to print_byte [phi:testChar::@1->print_byte] + print_byte_from_b1: + //SEG269 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#132 [phi:testChar::@1->print_byte#0] -- register_copy + //SEG270 [56] phi (byte) print_byte::b#4 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuz1=vbuc1 + lda #u + sta print_byte.b + jsr print_byte + //SEG271 [118] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] + b2_from_b1: + jmp b2 + //SEG272 testChar::@2 + b2: + //SEG273 [119] call print_char + //SEG274 [64] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] + print_char_from_b2: + //SEG275 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testChar::@2->print_char#0] -- register_copy + //SEG276 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testChar::@2->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG277 [120] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] + b3_from_b2: + jmp b3 + //SEG278 testChar::@3 + b3: + //SEG279 [121] call print_sbyte + //SEG280 [129] phi from testChar::@3 to print_sbyte [phi:testChar::@3->print_sbyte] + print_sbyte_from_b3: + //SEG281 [129] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::n#0 [phi:testChar::@3->print_sbyte#0] -- vbsz1=vbsc1 + lda #n + sta print_sbyte.b + jsr print_sbyte + //SEG282 [122] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] + b4_from_b3: + jmp b4 + //SEG283 testChar::@4 + b4: + //SEG284 [123] call print_char + //SEG285 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] + print_char_from_b4: + //SEG286 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testChar::@4->print_char#0] -- register_copy + //SEG287 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG288 [124] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] + b5_from_b4: + jmp b5 + //SEG289 testChar::@5 + b5: + //SEG290 [125] call print_sbyte + //SEG291 [129] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] + print_sbyte_from_b5: + //SEG292 [129] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::s#0 [phi:testChar::@5->print_sbyte#0] -- vbsz1=vbsc1 + lda #s + sta print_sbyte.b + jsr print_sbyte + //SEG293 [126] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] + b6_from_b5: + jmp b6 + //SEG294 testChar::@6 + b6: + //SEG295 [127] call print_ln + //SEG296 [30] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] + print_ln_from_b6: + //SEG297 [30] phi (byte*) print_line_cursor#39 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + jmp breturn + //SEG298 testChar::@return + breturn: + //SEG299 [128] return + rts + str: .text "char: @" +} +//SEG300 print_sbyte +// Print a signed byte as HEX +// print_sbyte(signed byte zeropage($16) b) +print_sbyte: { + .label b = $16 + //SEG301 [130] if((signed byte) print_sbyte::b#3<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 -- vbsz1_lt_0_then_la1 + lda b + bmi b1_from_print_sbyte + //SEG302 [131] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] + b3_from_print_sbyte: + jmp b3 + //SEG303 print_sbyte::@3 + b3: + //SEG304 [132] call print_char + //SEG305 [64] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] + print_char_from_b3: + //SEG306 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sbyte::@3->print_char#0] -- register_copy + //SEG307 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuz1=vbuc1 + lda #' ' + sta print_char.ch + jsr print_char + //SEG308 [133] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] + b2_from_b3: + b2_from_b4: + //SEG309 [133] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy + jmp b2 + //SEG310 print_sbyte::@2 + b2: + //SEG311 [134] (byte~) print_byte::b#6 ← (byte)(signed byte) print_sbyte::b#5 -- vbuz1=vbuz2 + lda b + sta print_byte.b + //SEG312 [135] call print_byte + //SEG313 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + print_byte_from_b2: + //SEG314 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#24 [phi:print_sbyte::@2->print_byte#0] -- register_copy + //SEG315 [56] phi (byte) print_byte::b#4 = (byte~) print_byte::b#6 [phi:print_sbyte::@2->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + //SEG316 print_sbyte::@return + breturn: + //SEG317 [136] return + rts + //SEG318 [137] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + b1_from_print_sbyte: + jmp b1 + //SEG319 print_sbyte::@1 + b1: + //SEG320 [138] call print_char + //SEG321 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + print_char_from_b1: + //SEG322 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sbyte::@1->print_char#0] -- register_copy + //SEG323 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuz1=vbuc1 + lda #'-' + sta print_char.ch + jsr print_char + jmp b4 + //SEG324 print_sbyte::@4 + b4: + //SEG325 [139] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsz1=_neg_vbsz1 + lda b + eor #$ff + clc + adc #1 + sta b + jmp b2_from_b4 +} +//SEG326 print_cls +// Clear the screen. Also resets current line/char cursor. +print_cls: { + .label sc = $17 + //SEG327 [141] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG328 [141] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG329 [141] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG330 [141] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG331 print_cls::@1 + b1: + //SEG332 [142] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG333 [143] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG334 [144] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG335 print_cls::@return + breturn: + //SEG336 [145] return + rts +} + print_hextab: .text "0123456789abcdef" + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [15] (byte*~) print_char_cursor#181 ← (byte*) print_line_cursor#1 [ print_char_cursor#181 print_line_cursor#1 ] ( main:2::testLong:13 [ print_char_cursor#181 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ print_line_cursor#1 print_char_cursor#24 ] ( main:2::testLong:13::print_ln:28 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testInt:11::print_ln:88 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testShort:9::print_ln:112 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testChar:7::print_ln:127 [ print_line_cursor#1 print_char_cursor#24 ] ) always clobbers reg byte a +Statement [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#24 ] ( main:2::testLong:13::print_ln:28 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testInt:11::print_ln:88 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testShort:9::print_ln:112 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testChar:7::print_ln:127 [ print_line_cursor#1 print_char_cursor#24 ] ) always clobbers reg byte a +Statement [36] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 [ print_char_cursor#24 print_sdword::dw#3 ] ( main:2::testLong:13::print_sdword:22 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#3 ] main:2::testLong:13::print_sdword:26 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#3 ] ) always clobbers reg byte a +Statement [39] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#3 [ print_char_cursor#24 print_sdword::dw#0 ] ( main:2::testLong:13::print_sdword:22 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#0 ] main:2::testLong:13::print_sdword:26 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#0 ] ) always clobbers reg byte a +Statement [41] (dword) print_dword::dw#0 ← ((dword)) (signed dword) print_sdword::dw#4 [ print_char_cursor#24 print_dword::dw#0 ] ( main:2::testLong:13::print_sdword:22 [ print_line_cursor#1 print_char_cursor#24 print_dword::dw#0 ] main:2::testLong:13::print_sdword:26 [ print_line_cursor#1 print_char_cursor#24 print_dword::dw#0 ] ) always clobbers reg byte a +Statement [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 [ print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] ( main:2::testLong:13::print_dword:18 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] main:2::testLong:13::print_sdword:22::print_dword:42 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] main:2::testLong:13::print_sdword:26::print_dword:42 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] ) always clobbers reg byte a +Statement [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 [ print_char_cursor#24 print_word::w#2 ] ( main:2::testLong:13::print_dword:18 [ print_line_cursor#1 print_char_cursor#24 print_word::w#2 ] main:2::testLong:13::print_sdword:22::print_dword:42 [ print_line_cursor#1 print_char_cursor#24 print_word::w#2 ] main:2::testLong:13::print_sdword:26::print_dword:42 [ print_line_cursor#1 print_char_cursor#24 print_word::w#2 ] ) always clobbers reg byte a +Statement [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#139 print_byte::b#1 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testInt:11::print_sword:82::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testInt:11::print_sword:86::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testShort:9::print_sword:106::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testShort:9::print_sword:110::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testShort:9::print_word:102 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] ) always clobbers reg byte a +Statement [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#24 print_byte::b#2 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testInt:11::print_sword:82::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testInt:11::print_sword:86::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testShort:9::print_sword:106::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testShort:9::print_sword:110::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testShort:9::print_word:102 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] ) always clobbers reg byte a +Statement [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_word:102::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_word:102::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testChar:7::print_byte:117 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testChar:7::print_sbyte:121::print_byte:135 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testChar:7::print_sbyte:125::print_byte:135 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] +Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) $f [ print_char_cursor#24 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_word:102::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_word:102::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testChar:7::print_byte:117 [ print_char_cursor#24 print_byte::$2 ] main:2::testChar:7::print_sbyte:121::print_byte:135 [ print_char_cursor#24 print_byte::$2 ] main:2::testChar:7::print_sbyte:125::print_byte:135 [ print_char_cursor#24 print_byte::$2 ] ) always clobbers reg byte a +Statement [65] *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 [ print_char_cursor#90 ] ( main:2::testLong:13::print_char:20 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_char:24 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testChar:7::print_byte:117::print_char:59 [ print_byte::b#4 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_byte:135::print_char:59 [ print_byte::b#4 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_byte:135::print_char:59 [ print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testChar:7::print_byte:117::print_char:62 [ print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_byte:135::print_char:62 [ print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_byte:135::print_char:62 [ print_char_cursor#90 ] main:2::testInt:11::print_char:80 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_char:84 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testShort:9::print_char:104 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_char:108 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testChar:7::print_char:119 [ print_char_cursor#90 ] main:2::testChar:7::print_char:123 [ print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_char:132 [ print_sbyte::b#3 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_char:132 [ print_sbyte::b#3 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_char:138 [ print_sbyte::b#3 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_char:138 [ print_sbyte::b#3 print_char_cursor#90 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +Statement [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#132 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testShort:9::print_str:100 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testChar:7::print_str:115 [ print_char_cursor#132 print_str::str#5 ] ) always clobbers reg byte a reg byte y +Statement [72] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#5) [ print_char_cursor#132 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testShort:9::print_str:100 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testChar:7::print_str:115 [ print_char_cursor#132 print_str::str#5 ] ) always clobbers reg byte a reg byte y +Statement [75] (byte*~) print_char_cursor#180 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#180 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#180 ] ) always clobbers reg byte a +Statement [91] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#24 print_sword::w#5 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] main:2::testShort:9::print_sword:106 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] ) always clobbers reg byte a +Statement [94] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 [ print_char_cursor#24 print_sword::w#0 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] main:2::testShort:9::print_sword:106 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] ) always clobbers reg byte a +Statement [96] (word~) print_word::w#9 ← (word)(signed word) print_sword::w#6 [ print_char_cursor#24 print_word::w#9 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] main:2::testShort:9::print_sword:106 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] ) always clobbers reg byte a +Statement [99] (byte*~) print_char_cursor#182 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#182 ] ( main:2::testShort:9 [ print_line_cursor#1 print_char_cursor#182 ] ) always clobbers reg byte a +Statement [139] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#24 print_sbyte::b#0 ] ( main:2::testChar:7::print_sbyte:121 [ print_char_cursor#24 print_sbyte::b#0 ] main:2::testChar:7::print_sbyte:125 [ print_char_cursor#24 print_sbyte::b#0 ] ) always clobbers reg byte a +Statement [142] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [144] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Statement [15] (byte*~) print_char_cursor#181 ← (byte*) print_line_cursor#1 [ print_char_cursor#181 print_line_cursor#1 ] ( main:2::testLong:13 [ print_char_cursor#181 print_line_cursor#1 ] ) always clobbers reg byte a +Statement [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ print_line_cursor#1 print_char_cursor#24 ] ( main:2::testLong:13::print_ln:28 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testInt:11::print_ln:88 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testShort:9::print_ln:112 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testChar:7::print_ln:127 [ print_line_cursor#1 print_char_cursor#24 ] ) always clobbers reg byte a +Statement [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#24 ] ( main:2::testLong:13::print_ln:28 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testInt:11::print_ln:88 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testShort:9::print_ln:112 [ print_line_cursor#1 print_char_cursor#24 ] main:2::testChar:7::print_ln:127 [ print_line_cursor#1 print_char_cursor#24 ] ) always clobbers reg byte a +Statement [36] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 [ print_char_cursor#24 print_sdword::dw#3 ] ( main:2::testLong:13::print_sdword:22 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#3 ] main:2::testLong:13::print_sdword:26 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#3 ] ) always clobbers reg byte a +Statement [39] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#3 [ print_char_cursor#24 print_sdword::dw#0 ] ( main:2::testLong:13::print_sdword:22 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#0 ] main:2::testLong:13::print_sdword:26 [ print_line_cursor#1 print_char_cursor#24 print_sdword::dw#0 ] ) always clobbers reg byte a +Statement [41] (dword) print_dword::dw#0 ← ((dword)) (signed dword) print_sdword::dw#4 [ print_char_cursor#24 print_dword::dw#0 ] ( main:2::testLong:13::print_sdword:22 [ print_line_cursor#1 print_char_cursor#24 print_dword::dw#0 ] main:2::testLong:13::print_sdword:26 [ print_line_cursor#1 print_char_cursor#24 print_dword::dw#0 ] ) always clobbers reg byte a +Statement [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 [ print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] ( main:2::testLong:13::print_dword:18 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] main:2::testLong:13::print_sdword:22::print_dword:42 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] main:2::testLong:13::print_sdword:26::print_dword:42 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#140 print_word::w#1 ] ) always clobbers reg byte a +Statement [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 [ print_char_cursor#24 print_word::w#2 ] ( main:2::testLong:13::print_dword:18 [ print_line_cursor#1 print_char_cursor#24 print_word::w#2 ] main:2::testLong:13::print_sdword:22::print_dword:42 [ print_line_cursor#1 print_char_cursor#24 print_word::w#2 ] main:2::testLong:13::print_sdword:26::print_dword:42 [ print_line_cursor#1 print_char_cursor#24 print_word::w#2 ] ) always clobbers reg byte a +Statement [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#139 print_byte::b#1 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testInt:11::print_sword:82::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testInt:11::print_sword:86::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testShort:9::print_sword:106::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testShort:9::print_sword:110::print_word:97 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] main:2::testShort:9::print_word:102 [ print_line_cursor#1 print_word::w#5 print_char_cursor#139 print_byte::b#1 ] ) always clobbers reg byte a +Statement [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 [ print_char_cursor#24 print_byte::b#2 ] ( main:2::testLong:13::print_dword:18::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_dword:18::print_word:48 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testInt:11::print_word:78 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testInt:11::print_sword:82::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testInt:11::print_sword:86::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testShort:9::print_sword:106::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testShort:9::print_sword:110::print_word:97 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] main:2::testShort:9::print_word:102 [ print_line_cursor#1 print_char_cursor#24 print_byte::b#2 ] ) always clobbers reg byte a +Statement [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_word:102::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testShort:9::print_word:102::print_byte:54 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testChar:7::print_byte:117 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testChar:7::print_sbyte:121::print_byte:135 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] main:2::testChar:7::print_sbyte:125::print_byte:135 [ print_byte::b#4 print_char_cursor#143 print_byte::$0 ] ) always clobbers reg byte a +Statement [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) $f [ print_char_cursor#24 print_byte::$2 ] ( main:2::testLong:13::print_dword:18::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_word:102::print_byte:52 [ print_line_cursor#1 print_word::w#5 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_word:78::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testShort:9::print_word:102::print_byte:54 [ print_line_cursor#1 print_char_cursor#24 print_byte::$2 ] main:2::testChar:7::print_byte:117 [ print_char_cursor#24 print_byte::$2 ] main:2::testChar:7::print_sbyte:121::print_byte:135 [ print_char_cursor#24 print_byte::$2 ] main:2::testChar:7::print_sbyte:125::print_byte:135 [ print_char_cursor#24 print_byte::$2 ] ) always clobbers reg byte a +Statement [65] *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 [ print_char_cursor#90 ] ( main:2::testLong:13::print_char:20 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_char:24 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_char:38 [ print_line_cursor#1 print_sdword::dw#3 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:52::print_char:59 [ print_line_cursor#1 print_word::w#5 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:59 [ print_line_cursor#1 print_dword::dw#2 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:54::print_char:59 [ print_line_cursor#1 print_byte::b#4 print_char_cursor#90 ] main:2::testChar:7::print_byte:117::print_char:59 [ print_byte::b#4 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_byte:135::print_char:59 [ print_byte::b#4 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_byte:135::print_char:59 [ print_byte::b#4 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:52::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:52::print_char:62 [ print_line_cursor#1 print_word::w#5 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:46::print_byte:54::print_char:62 [ print_line_cursor#1 print_dword::dw#2 print_char_cursor#90 ] main:2::testLong:13::print_dword:18::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_sdword:22::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testLong:13::print_sdword:26::print_dword:42::print_word:48::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_word:78::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_word:97::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_word:102::print_byte:54::print_char:62 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testChar:7::print_byte:117::print_char:62 [ print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_byte:135::print_char:62 [ print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_byte:135::print_char:62 [ print_char_cursor#90 ] main:2::testInt:11::print_char:80 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_char:84 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testInt:11::print_sword:82::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testInt:11::print_sword:86::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:106::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testShort:9::print_sword:110::print_char:93 [ print_line_cursor#1 print_sword::w#5 print_char_cursor#90 ] main:2::testShort:9::print_char:104 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testShort:9::print_char:108 [ print_line_cursor#1 print_char_cursor#90 ] main:2::testChar:7::print_char:119 [ print_char_cursor#90 ] main:2::testChar:7::print_char:123 [ print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_char:132 [ print_sbyte::b#3 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_char:132 [ print_sbyte::b#3 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:121::print_char:138 [ print_sbyte::b#3 print_char_cursor#90 ] main:2::testChar:7::print_sbyte:125::print_char:138 [ print_sbyte::b#3 print_char_cursor#90 ] ) always clobbers reg byte y +Statement [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 [ print_char_cursor#132 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testShort:9::print_str:100 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testChar:7::print_str:115 [ print_char_cursor#132 print_str::str#5 ] ) always clobbers reg byte a reg byte y +Statement [72] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#5) [ print_char_cursor#132 print_str::str#5 ] ( main:2::testLong:13::print_str:16 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testInt:11::print_str:76 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testShort:9::print_str:100 [ print_line_cursor#1 print_char_cursor#132 print_str::str#5 ] main:2::testChar:7::print_str:115 [ print_char_cursor#132 print_str::str#5 ] ) always clobbers reg byte a reg byte y +Statement [75] (byte*~) print_char_cursor#180 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#180 ] ( main:2::testInt:11 [ print_line_cursor#1 print_char_cursor#180 ] ) always clobbers reg byte a +Statement [91] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#24 print_sword::w#5 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] main:2::testShort:9::print_sword:106 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#5 ] ) always clobbers reg byte a +Statement [94] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 [ print_char_cursor#24 print_sword::w#0 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] main:2::testShort:9::print_sword:106 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#24 print_sword::w#0 ] ) always clobbers reg byte a +Statement [96] (word~) print_word::w#9 ← (word)(signed word) print_sword::w#6 [ print_char_cursor#24 print_word::w#9 ] ( main:2::testInt:11::print_sword:82 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] main:2::testInt:11::print_sword:86 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] main:2::testShort:9::print_sword:106 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] main:2::testShort:9::print_sword:110 [ print_line_cursor#1 print_char_cursor#24 print_word::w#9 ] ) always clobbers reg byte a +Statement [99] (byte*~) print_char_cursor#182 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#182 ] ( main:2::testShort:9 [ print_line_cursor#1 print_char_cursor#182 ] ) always clobbers reg byte a +Statement [139] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#24 print_sbyte::b#0 ] ( main:2::testChar:7::print_sbyte:121 [ print_char_cursor#24 print_sbyte::b#0 ] main:2::testChar:7::print_sbyte:125 [ print_char_cursor#24 print_sbyte::b#0 ] ) always clobbers reg byte a +Statement [142] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [144] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] : zp ZP_DWORD:4 , +Potential registers zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] : zp ZP_DWORD:8 , +Potential registers zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 ] : zp ZP_WORD:12 , +Potential registers zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] : zp ZP_BYTE:14 , reg byte x , +Potential registers zp ZP_BYTE:15 [ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:16 [ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] : zp ZP_WORD:18 , +Potential registers zp ZP_WORD:20 [ print_sword::w#6 print_sword::w#5 print_sword::w#0 ] : zp ZP_WORD:20 , +Potential registers zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:23 , +Potential registers zp ZP_BYTE:25 [ print_byte::$0 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ print_byte::$2 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [] 63.47: zp ZP_WORD:16 [ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] 32.83: zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +Uplift Scope [print_str] 35.5: zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] +Uplift Scope [print_cls] 33: zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] +Uplift Scope [print_byte] 14.5: zp ZP_BYTE:14 [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] 4: zp ZP_BYTE:25 [ print_byte::$0 ] 4: zp ZP_BYTE:26 [ print_byte::$2 ] +Uplift Scope [print_word] 15.33: zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 ] +Uplift Scope [print_char] 14: zp ZP_BYTE:15 [ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] +Uplift Scope [print_sdword] 11.5: zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] +Uplift Scope [print_sword] 9.5: zp ZP_WORD:20 [ print_sword::w#6 print_sword::w#5 print_sword::w#0 ] +Uplift Scope [print_sbyte] 9: zp ZP_BYTE:22 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +Uplift Scope [print_dword] 6: zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] +Uplift Scope [print_ln] +Uplift Scope [main] +Uplift Scope [testChar] +Uplift Scope [testShort] +Uplift Scope [testInt] +Uplift Scope [testLong] + +Uplifting [] best 2675 combination zp ZP_WORD:16 [ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] +Uplifting [print_str] best 2675 combination zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] +Uplifting [print_cls] best 2675 combination zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] +Uplifting [print_byte] best 2655 combination reg byte x [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_word] best 2655 combination zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 ] +Uplifting [print_char] best 2610 combination reg byte a [ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] +Uplifting [print_sdword] best 2610 combination zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] +Uplifting [print_sword] best 2610 combination zp ZP_WORD:20 [ print_sword::w#6 print_sword::w#5 print_sword::w#0 ] +Uplifting [print_sbyte] best 2598 combination reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +Uplifting [print_dword] best 2598 combination zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] +Uplifting [print_ln] best 2598 combination +Uplifting [main] best 2598 combination +Uplifting [testChar] best 2598 combination +Uplifting [testShort] best 2598 combination +Uplifting [testInt] best 2598 combination +Uplifting [testLong] best 2598 combination +Coalescing zero page register with common assignment [ zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 ] ] with [ zp ZP_DWORD:8 [ print_dword::dw#2 print_dword::dw#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 ] ] with [ zp ZP_WORD:20 [ print_sword::w#6 print_sword::w#5 print_sword::w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 ] ] with [ zp ZP_WORD:23 [ print_cls::sc#2 print_cls::sc#1 ] ] +Coalescing zero page register [ zp ZP_WORD:12 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 print_sword::w#6 print_sword::w#5 print_sword::w#0 ] ] with [ zp ZP_WORD:18 [ print_str::str#5 print_str::str#7 print_str::str#0 ] ] +Allocated (was zp ZP_WORD:12) zp ZP_WORD:8 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 print_sword::w#6 print_sword::w#5 print_sword::w#0 print_str::str#5 print_str::str#7 print_str::str#0 ] +Allocated (was zp ZP_WORD:16) zp ZP_WORD:10 [ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Tests the different standard C types +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label print_char_cursor = $a + .label print_line_cursor = 2 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + //SEG11 [5] call print_cls + //SEG12 [140] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + //SEG14 main::@1 + b1: + //SEG15 [7] call testChar + //SEG16 [114] phi from main::@1 to testChar [phi:main::@1->testChar] + testChar_from_b1: + jsr testChar + //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + //SEG18 main::@2 + b2: + //SEG19 [9] call testShort + jsr testShort + //SEG20 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + jmp b3 + //SEG21 main::@3 + b3: + //SEG22 [11] call testInt + jsr testInt + //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + b4_from_b3: + jmp b4 + //SEG24 main::@4 + b4: + //SEG25 [13] call testLong + jsr testLong + jmp breturn + //SEG26 main::@return + breturn: + //SEG27 [14] return + rts +} +//SEG28 testLong +testLong: { + .const u = $222e0 + .const n = -$222e0 + .const s = -$222e0 + //SEG29 [15] (byte*~) print_char_cursor#181 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG30 [16] call print_str + //SEG31 [68] phi from testLong to print_str [phi:testLong->print_str] + print_str_from_testLong: + //SEG32 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#181 [phi:testLong->print_str#0] -- register_copy + //SEG33 [68] phi (byte*) print_str::str#7 = (const string) testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG34 [17] phi from testLong to testLong::@1 [phi:testLong->testLong::@1] + b1_from_testLong: + jmp b1 + //SEG35 testLong::@1 + b1: + //SEG36 [18] call print_dword + //SEG37 [44] phi from testLong::@1 to print_dword [phi:testLong::@1->print_dword] + print_dword_from_b1: + //SEG38 [44] phi (byte*) print_char_cursor#140 = (byte*) print_char_cursor#132 [phi:testLong::@1->print_dword#0] -- register_copy + //SEG39 [44] phi (dword) print_dword::dw#2 = (const dword) testLong::u#0 [phi:testLong::@1->print_dword#1] -- vduz1=vduc1 + lda #u + sta print_dword.dw+1 + lda #>$10 + sta print_dword.dw+2 + lda #>u>>$10 + sta print_dword.dw+3 + jsr print_dword + //SEG40 [19] phi from testLong::@1 to testLong::@2 [phi:testLong::@1->testLong::@2] + b2_from_b1: + jmp b2 + //SEG41 testLong::@2 + b2: + //SEG42 [20] call print_char + //SEG43 [64] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] + print_char_from_b2: + //SEG44 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testLong::@2->print_char#0] -- register_copy + //SEG45 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG46 [21] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] + b3_from_b2: + jmp b3 + //SEG47 testLong::@3 + b3: + //SEG48 [22] call print_sdword + //SEG49 [35] phi from testLong::@3 to print_sdword [phi:testLong::@3->print_sdword] + print_sdword_from_b3: + //SEG50 [35] phi (signed dword) print_sdword::dw#3 = (const signed dword) testLong::n#0 [phi:testLong::@3->print_sdword#0] -- vdsz1=vdsc1 + lda #n + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>n>>$10 + sta print_sdword.dw+3 + jsr print_sdword + //SEG51 [23] phi from testLong::@3 to testLong::@4 [phi:testLong::@3->testLong::@4] + b4_from_b3: + jmp b4 + //SEG52 testLong::@4 + b4: + //SEG53 [24] call print_char + //SEG54 [64] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] + print_char_from_b4: + //SEG55 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testLong::@4->print_char#0] -- register_copy + //SEG56 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG57 [25] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] + b5_from_b4: + jmp b5 + //SEG58 testLong::@5 + b5: + //SEG59 [26] call print_sdword + //SEG60 [35] phi from testLong::@5 to print_sdword [phi:testLong::@5->print_sdword] + print_sdword_from_b5: + //SEG61 [35] phi (signed dword) print_sdword::dw#3 = (const signed dword) testLong::s#0 [phi:testLong::@5->print_sdword#0] -- vdsz1=vdsc1 + lda #s + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>s>>$10 + sta print_sdword.dw+3 + jsr print_sdword + //SEG62 [27] phi from testLong::@5 to testLong::@6 [phi:testLong::@5->testLong::@6] + b6_from_b5: + jmp b6 + //SEG63 testLong::@6 + b6: + //SEG64 [28] call print_ln + //SEG65 [30] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] + print_ln_from_b6: + //SEG66 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testLong::@6->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + //SEG67 testLong::@return + breturn: + //SEG68 [29] return + rts + str: .text "long: @" +} +//SEG69 print_ln +// Print a newline +print_ln: { + //SEG70 [31] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG71 [31] phi (byte*) print_line_cursor#20 = (byte*) print_line_cursor#39 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG72 print_ln::@1 + b1: + //SEG73 [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + //SEG74 [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + lda print_line_cursor+1 + cmp print_char_cursor+1 + bcc b1_from_b1 + bne !+ + lda print_line_cursor + cmp print_char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG75 print_ln::@return + breturn: + //SEG76 [34] return + rts +} +//SEG77 print_sdword +// Print a signed dword as HEX +// print_sdword(signed dword zeropage(4) dw) +print_sdword: { + .label dw = 4 + //SEG78 [36] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 -- vdsz1_ge_0_then_la1 + lda dw+3 + bpl b1_from_print_sdword + //SEG79 [37] phi from print_sdword to print_sdword::@2 [phi:print_sdword->print_sdword::@2] + b2_from_print_sdword: + jmp b2 + //SEG80 print_sdword::@2 + b2: + //SEG81 [38] call print_char + //SEG82 [64] phi from print_sdword::@2 to print_char [phi:print_sdword::@2->print_char] + print_char_from_b2: + //SEG83 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sdword::@2->print_char#0] -- register_copy + //SEG84 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sdword::@2->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + jmp b3 + //SEG85 print_sdword::@3 + b3: + //SEG86 [39] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#3 -- vdsz1=_neg_vdsz1 + sec + lda dw + eor #$ff + adc #0 + sta dw + lda dw+1 + eor #$ff + adc #0 + sta dw+1 + lda dw+2 + eor #$ff + adc #0 + sta dw+2 + lda dw+3 + eor #$ff + adc #0 + sta dw+3 + //SEG87 [40] phi from print_sdword print_sdword::@3 to print_sdword::@1 [phi:print_sdword/print_sdword::@3->print_sdword::@1] + b1_from_print_sdword: + b1_from_b3: + //SEG88 [40] phi (signed dword) print_sdword::dw#4 = (signed dword) print_sdword::dw#3 [phi:print_sdword/print_sdword::@3->print_sdword::@1#0] -- register_copy + jmp b1 + //SEG89 print_sdword::@1 + b1: + //SEG90 [41] (dword) print_dword::dw#0 ← ((dword)) (signed dword) print_sdword::dw#4 -- vduz1=_dword_vdsz1 + //SEG91 [42] call print_dword + //SEG92 [44] phi from print_sdword::@1 to print_dword [phi:print_sdword::@1->print_dword] + print_dword_from_b1: + //SEG93 [44] phi (byte*) print_char_cursor#140 = (byte*) print_char_cursor#24 [phi:print_sdword::@1->print_dword#0] -- register_copy + //SEG94 [44] phi (dword) print_dword::dw#2 = (dword) print_dword::dw#0 [phi:print_sdword::@1->print_dword#1] -- register_copy + jsr print_dword + jmp breturn + //SEG95 print_sdword::@return + breturn: + //SEG96 [43] return + rts +} +//SEG97 print_dword +// Print a dword as HEX +// print_dword(dword zeropage(4) dw) +print_dword: { + .label dw = 4 + //SEG98 [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 -- vwuz1=_hi_vduz2 + lda dw+2 + sta print_word.w + lda dw+3 + sta print_word.w+1 + //SEG99 [46] call print_word + //SEG100 [50] phi from print_dword to print_word [phi:print_dword->print_word] + print_word_from_print_dword: + //SEG101 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#140 [phi:print_dword->print_word#0] -- register_copy + //SEG102 [50] phi (word) print_word::w#5 = (word) print_word::w#1 [phi:print_dword->print_word#1] -- register_copy + jsr print_word + jmp b1 + //SEG103 print_dword::@1 + b1: + //SEG104 [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 -- vwuz1=_lo_vduz2 + lda dw + sta print_word.w + lda dw+1 + sta print_word.w+1 + //SEG105 [48] call print_word + //SEG106 [50] phi from print_dword::@1 to print_word [phi:print_dword::@1->print_word] + print_word_from_b1: + //SEG107 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#24 [phi:print_dword::@1->print_word#0] -- register_copy + //SEG108 [50] phi (word) print_word::w#5 = (word) print_word::w#2 [phi:print_dword::@1->print_word#1] -- register_copy + jsr print_word + jmp breturn + //SEG109 print_dword::@return + breturn: + //SEG110 [49] return + rts +} +//SEG111 print_word +// Print a word as HEX +// print_word(word zeropage(8) w) +print_word: { + .label w = 8 + //SEG112 [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 -- vbuxx=_hi_vwuz1 + lda w+1 + tax + //SEG113 [52] call print_byte + //SEG114 [56] phi from print_word to print_byte [phi:print_word->print_byte] + print_byte_from_print_word: + //SEG115 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#139 [phi:print_word->print_byte#0] -- register_copy + //SEG116 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + jmp b1 + //SEG117 print_word::@1 + b1: + //SEG118 [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 -- vbuxx=_lo_vwuz1 + lda w + tax + //SEG119 [54] call print_byte + //SEG120 [56] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + print_byte_from_b1: + //SEG121 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#24 [phi:print_word::@1->print_byte#0] -- register_copy + //SEG122 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + //SEG123 print_word::@return + breturn: + //SEG124 [55] return + rts +} +//SEG125 print_byte +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + //SEG127 [58] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda print_hextab,y + //SEG128 [59] call print_char + //SEG129 [64] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG130 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy + //SEG131 [64] phi (byte) print_char::ch#14 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG132 print_byte::@1 + b1: + //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuxx=vbuxx_band_vbuc1 + lda #$f + axs #0 + //SEG134 [61] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx + lda print_hextab,x + //SEG135 [62] call print_char + //SEG136 [64] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG137 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG138 [64] phi (byte) print_char::ch#14 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG139 print_byte::@return + breturn: + //SEG140 [63] return + rts +} +//SEG141 print_char +// Print a single char +// print_char(byte register(A) ch) +print_char: { + //SEG142 [65] *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 -- _deref_pbuz1=vbuaa + ldy #0 + sta (print_char_cursor),y + //SEG143 [66] (byte*) print_char_cursor#24 ← ++ (byte*) print_char_cursor#90 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + jmp breturn + //SEG144 print_char::@return + breturn: + //SEG145 [67] return + rts +} +//SEG146 print_str +// Print a zero-terminated string +// print_str(byte* zeropage(8) str) +print_str: { + .label str = 8 + //SEG147 [69] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + //SEG148 [69] phi (byte*) print_char_cursor#132 = (byte*) print_char_cursor#150 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG149 [69] phi (byte*) print_str::str#5 = (byte*) print_str::str#7 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + //SEG150 print_str::@1 + b1: + //SEG151 [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG152 print_str::@return + breturn: + //SEG153 [71] return + rts + //SEG154 print_str::@2 + b2: + //SEG155 [72] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#5) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (print_char_cursor),y + //SEG156 [73] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#132 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + //SEG157 [74] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#5 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} +//SEG158 testInt +testInt: { + .const u = $578 + .const n = -$578 + .const s = -$578 + //SEG159 [75] (byte*~) print_char_cursor#180 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG160 [76] call print_str + //SEG161 [68] phi from testInt to print_str [phi:testInt->print_str] + print_str_from_testInt: + //SEG162 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#180 [phi:testInt->print_str#0] -- register_copy + //SEG163 [68] phi (byte*) print_str::str#7 = (const string) testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG164 [77] phi from testInt to testInt::@1 [phi:testInt->testInt::@1] + b1_from_testInt: + jmp b1 + //SEG165 testInt::@1 + b1: + //SEG166 [78] call print_word + //SEG167 [50] phi from testInt::@1 to print_word [phi:testInt::@1->print_word] + print_word_from_b1: + //SEG168 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#132 [phi:testInt::@1->print_word#0] -- register_copy + //SEG169 [50] phi (word) print_word::w#5 = (const word) testInt::u#0 [phi:testInt::@1->print_word#1] -- vwuz1=vwuc1 + lda #u + sta print_word.w+1 + jsr print_word + //SEG170 [79] phi from testInt::@1 to testInt::@2 [phi:testInt::@1->testInt::@2] + b2_from_b1: + jmp b2 + //SEG171 testInt::@2 + b2: + //SEG172 [80] call print_char + //SEG173 [64] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] + print_char_from_b2: + //SEG174 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testInt::@2->print_char#0] -- register_copy + //SEG175 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG176 [81] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] + b3_from_b2: + jmp b3 + //SEG177 testInt::@3 + b3: + //SEG178 [82] call print_sword + //SEG179 [90] phi from testInt::@3 to print_sword [phi:testInt::@3->print_sword] + print_sword_from_b3: + //SEG180 [90] phi (signed word) print_sword::w#5 = (const signed word) testInt::n#0 [phi:testInt::@3->print_sword#0] -- vwsz1=vwsc1 + lda #n + sta print_sword.w+1 + jsr print_sword + //SEG181 [83] phi from testInt::@3 to testInt::@4 [phi:testInt::@3->testInt::@4] + b4_from_b3: + jmp b4 + //SEG182 testInt::@4 + b4: + //SEG183 [84] call print_char + //SEG184 [64] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] + print_char_from_b4: + //SEG185 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testInt::@4->print_char#0] -- register_copy + //SEG186 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG187 [85] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] + b5_from_b4: + jmp b5 + //SEG188 testInt::@5 + b5: + //SEG189 [86] call print_sword + //SEG190 [90] phi from testInt::@5 to print_sword [phi:testInt::@5->print_sword] + print_sword_from_b5: + //SEG191 [90] phi (signed word) print_sword::w#5 = (const signed word) testInt::s#0 [phi:testInt::@5->print_sword#0] -- vwsz1=vwsc1 + lda #s + sta print_sword.w+1 + jsr print_sword + //SEG192 [87] phi from testInt::@5 to testInt::@6 [phi:testInt::@5->testInt::@6] + b6_from_b5: + jmp b6 + //SEG193 testInt::@6 + b6: + //SEG194 [88] call print_ln + //SEG195 [30] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] + print_ln_from_b6: + //SEG196 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testInt::@6->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + //SEG197 testInt::@return + breturn: + //SEG198 [89] return + rts + str: .text "int: @" +} +//SEG199 print_sword +// Print a signed word as HEX +// print_sword(signed word zeropage(8) w) +print_sword: { + .label w = 8 + //SEG200 [91] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 -- vwsz1_ge_0_then_la1 + lda w+1 + bpl b1_from_print_sword + //SEG201 [92] phi from print_sword to print_sword::@2 [phi:print_sword->print_sword::@2] + b2_from_print_sword: + jmp b2 + //SEG202 print_sword::@2 + b2: + //SEG203 [93] call print_char + //SEG204 [64] phi from print_sword::@2 to print_char [phi:print_sword::@2->print_char] + print_char_from_b2: + //SEG205 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sword::@2->print_char#0] -- register_copy + //SEG206 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sword::@2->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + jmp b3 + //SEG207 print_sword::@3 + b3: + //SEG208 [94] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 -- vwsz1=_neg_vwsz1 + sec + lda w + eor #$ff + adc #0 + sta w + lda w+1 + eor #$ff + adc #0 + sta w+1 + //SEG209 [95] phi from print_sword print_sword::@3 to print_sword::@1 [phi:print_sword/print_sword::@3->print_sword::@1] + b1_from_print_sword: + b1_from_b3: + //SEG210 [95] phi (signed word) print_sword::w#6 = (signed word) print_sword::w#5 [phi:print_sword/print_sword::@3->print_sword::@1#0] -- register_copy + jmp b1 + //SEG211 print_sword::@1 + b1: + //SEG212 [96] (word~) print_word::w#9 ← (word)(signed word) print_sword::w#6 + //SEG213 [97] call print_word + //SEG214 [50] phi from print_sword::@1 to print_word [phi:print_sword::@1->print_word] + print_word_from_b1: + //SEG215 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#24 [phi:print_sword::@1->print_word#0] -- register_copy + //SEG216 [50] phi (word) print_word::w#5 = (word~) print_word::w#9 [phi:print_sword::@1->print_word#1] -- register_copy + jsr print_word + jmp breturn + //SEG217 print_sword::@return + breturn: + //SEG218 [98] return + rts +} +//SEG219 testShort +testShort: { + .const u = $578 + .const n = -$578 + .const s = -$578 + //SEG220 [99] (byte*~) print_char_cursor#182 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG221 [100] call print_str + //SEG222 [68] phi from testShort to print_str [phi:testShort->print_str] + print_str_from_testShort: + //SEG223 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#182 [phi:testShort->print_str#0] -- register_copy + //SEG224 [68] phi (byte*) print_str::str#7 = (const string) testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG225 [101] phi from testShort to testShort::@1 [phi:testShort->testShort::@1] + b1_from_testShort: + jmp b1 + //SEG226 testShort::@1 + b1: + //SEG227 [102] call print_word + //SEG228 [50] phi from testShort::@1 to print_word [phi:testShort::@1->print_word] + print_word_from_b1: + //SEG229 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#132 [phi:testShort::@1->print_word#0] -- register_copy + //SEG230 [50] phi (word) print_word::w#5 = (const word) testShort::u#0 [phi:testShort::@1->print_word#1] -- vwuz1=vwuc1 + lda #u + sta print_word.w+1 + jsr print_word + //SEG231 [103] phi from testShort::@1 to testShort::@2 [phi:testShort::@1->testShort::@2] + b2_from_b1: + jmp b2 + //SEG232 testShort::@2 + b2: + //SEG233 [104] call print_char + //SEG234 [64] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] + print_char_from_b2: + //SEG235 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testShort::@2->print_char#0] -- register_copy + //SEG236 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG237 [105] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] + b3_from_b2: + jmp b3 + //SEG238 testShort::@3 + b3: + //SEG239 [106] call print_sword + //SEG240 [90] phi from testShort::@3 to print_sword [phi:testShort::@3->print_sword] + print_sword_from_b3: + //SEG241 [90] phi (signed word) print_sword::w#5 = (const signed word) testShort::n#0 [phi:testShort::@3->print_sword#0] -- vwsz1=vwsc1 + lda #n + sta print_sword.w+1 + jsr print_sword + //SEG242 [107] phi from testShort::@3 to testShort::@4 [phi:testShort::@3->testShort::@4] + b4_from_b3: + jmp b4 + //SEG243 testShort::@4 + b4: + //SEG244 [108] call print_char + //SEG245 [64] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] + print_char_from_b4: + //SEG246 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testShort::@4->print_char#0] -- register_copy + //SEG247 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG248 [109] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] + b5_from_b4: + jmp b5 + //SEG249 testShort::@5 + b5: + //SEG250 [110] call print_sword + //SEG251 [90] phi from testShort::@5 to print_sword [phi:testShort::@5->print_sword] + print_sword_from_b5: + //SEG252 [90] phi (signed word) print_sword::w#5 = (const signed word) testShort::s#0 [phi:testShort::@5->print_sword#0] -- vwsz1=vwsc1 + lda #s + sta print_sword.w+1 + jsr print_sword + //SEG253 [111] phi from testShort::@5 to testShort::@6 [phi:testShort::@5->testShort::@6] + b6_from_b5: + jmp b6 + //SEG254 testShort::@6 + b6: + //SEG255 [112] call print_ln + //SEG256 [30] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] + print_ln_from_b6: + //SEG257 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testShort::@6->print_ln#0] -- register_copy + jsr print_ln + jmp breturn + //SEG258 testShort::@return + breturn: + //SEG259 [113] return + rts + str: .text "short: @" +} +//SEG260 testChar +testChar: { + .const u = $e + .const n = -$e + .const s = -$e + //SEG261 [115] call print_str + //SEG262 [68] phi from testChar to print_str [phi:testChar->print_str] + print_str_from_testChar: + //SEG263 [68] phi (byte*) print_char_cursor#150 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:testChar->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + //SEG264 [68] phi (byte*) print_str::str#7 = (const string) testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG265 [116] phi from testChar to testChar::@1 [phi:testChar->testChar::@1] + b1_from_testChar: + jmp b1 + //SEG266 testChar::@1 + b1: + //SEG267 [117] call print_byte + //SEG268 [56] phi from testChar::@1 to print_byte [phi:testChar::@1->print_byte] + print_byte_from_b1: + //SEG269 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#132 [phi:testChar::@1->print_byte#0] -- register_copy + //SEG270 [56] phi (byte) print_byte::b#4 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuxx=vbuc1 + ldx #u + jsr print_byte + //SEG271 [118] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] + b2_from_b1: + jmp b2 + //SEG272 testChar::@2 + b2: + //SEG273 [119] call print_char + //SEG274 [64] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] + print_char_from_b2: + //SEG275 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testChar::@2->print_char#0] -- register_copy + //SEG276 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG277 [120] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] + b3_from_b2: + jmp b3 + //SEG278 testChar::@3 + b3: + //SEG279 [121] call print_sbyte + //SEG280 [129] phi from testChar::@3 to print_sbyte [phi:testChar::@3->print_sbyte] + print_sbyte_from_b3: + //SEG281 [129] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::n#0 [phi:testChar::@3->print_sbyte#0] -- vbsxx=vbsc1 + ldx #n + jsr print_sbyte + //SEG282 [122] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] + b4_from_b3: + jmp b4 + //SEG283 testChar::@4 + b4: + //SEG284 [123] call print_char + //SEG285 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] + print_char_from_b4: + //SEG286 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testChar::@4->print_char#0] -- register_copy + //SEG287 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG288 [124] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] + b5_from_b4: + jmp b5 + //SEG289 testChar::@5 + b5: + //SEG290 [125] call print_sbyte + //SEG291 [129] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] + print_sbyte_from_b5: + //SEG292 [129] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::s#0 [phi:testChar::@5->print_sbyte#0] -- vbsxx=vbsc1 + ldx #s + jsr print_sbyte + //SEG293 [126] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] + b6_from_b5: + jmp b6 + //SEG294 testChar::@6 + b6: + //SEG295 [127] call print_ln + //SEG296 [30] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] + print_ln_from_b6: + //SEG297 [30] phi (byte*) print_line_cursor#39 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + jmp breturn + //SEG298 testChar::@return + breturn: + //SEG299 [128] return + rts + str: .text "char: @" +} +//SEG300 print_sbyte +// Print a signed byte as HEX +// print_sbyte(signed byte register(X) b) +print_sbyte: { + //SEG301 [130] if((signed byte) print_sbyte::b#3<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 + cpx #0 + bmi b1_from_print_sbyte + //SEG302 [131] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] + b3_from_print_sbyte: + jmp b3 + //SEG303 print_sbyte::@3 + b3: + //SEG304 [132] call print_char + //SEG305 [64] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] + print_char_from_b3: + //SEG306 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sbyte::@3->print_char#0] -- register_copy + //SEG307 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG308 [133] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] + b2_from_b3: + b2_from_b4: + //SEG309 [133] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy + jmp b2 + //SEG310 print_sbyte::@2 + b2: + //SEG311 [134] (byte~) print_byte::b#6 ← (byte)(signed byte) print_sbyte::b#5 + //SEG312 [135] call print_byte + //SEG313 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + print_byte_from_b2: + //SEG314 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#24 [phi:print_sbyte::@2->print_byte#0] -- register_copy + //SEG315 [56] phi (byte) print_byte::b#4 = (byte~) print_byte::b#6 [phi:print_sbyte::@2->print_byte#1] -- register_copy + jsr print_byte + jmp breturn + //SEG316 print_sbyte::@return + breturn: + //SEG317 [136] return + rts + //SEG318 [137] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + b1_from_print_sbyte: + jmp b1 + //SEG319 print_sbyte::@1 + b1: + //SEG320 [138] call print_char + //SEG321 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + print_char_from_b1: + //SEG322 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sbyte::@1->print_char#0] -- register_copy + //SEG323 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + jmp b4 + //SEG324 print_sbyte::@4 + b4: + //SEG325 [139] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx + txa + eor #$ff + clc + adc #1 + tax + jmp b2_from_b4 +} +//SEG326 print_cls +// Clear the screen. Also resets current line/char cursor. +print_cls: { + .label sc = 2 + //SEG327 [141] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG328 [141] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG329 [141] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG330 [141] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG331 print_cls::@1 + b1: + //SEG332 [142] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG333 [143] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG334 [144] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG335 print_cls::@return + breturn: + //SEG336 [145] return + rts +} + print_hextab: .text "0123456789abcdef" + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp b3 +Removing instruction jmp b2 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_print_sdword with b1 +Replacing label b1_from_b2 with b1 +Replacing label b1_from_print_sword with b1 +Replacing label b1_from_print_sbyte with b1 +Replacing label b2_from_b4 with b2 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_main: +Removing instruction testChar_from_b1: +Removing instruction b2_from_b1: +Removing instruction b3_from_b2: +Removing instruction b4_from_b3: +Removing instruction b1_from_testLong: +Removing instruction print_dword_from_b1: +Removing instruction b2_from_b1: +Removing instruction print_char_from_b2: +Removing instruction b3_from_b2: +Removing instruction print_sdword_from_b3: +Removing instruction b4_from_b3: +Removing instruction print_char_from_b4: +Removing instruction b5_from_b4: +Removing instruction print_sdword_from_b5: +Removing instruction b6_from_b5: +Removing instruction print_ln_from_b6: +Removing instruction b1_from_print_ln: +Removing instruction b1_from_b1: +Removing instruction b2_from_print_sdword: +Removing instruction print_char_from_b2: +Removing instruction b1_from_print_sdword: +Removing instruction b1_from_b3: +Removing instruction print_dword_from_b1: +Removing instruction b1_from_print_str: +Removing instruction b1_from_b2: +Removing instruction b1_from_testInt: +Removing instruction print_word_from_b1: +Removing instruction b2_from_b1: +Removing instruction print_char_from_b2: +Removing instruction b3_from_b2: +Removing instruction print_sword_from_b3: +Removing instruction b4_from_b3: +Removing instruction print_char_from_b4: +Removing instruction b5_from_b4: +Removing instruction print_sword_from_b5: +Removing instruction b6_from_b5: +Removing instruction print_ln_from_b6: +Removing instruction b2_from_print_sword: +Removing instruction print_char_from_b2: +Removing instruction b1_from_print_sword: +Removing instruction b1_from_b3: +Removing instruction print_word_from_b1: +Removing instruction b1_from_testShort: +Removing instruction print_word_from_b1: +Removing instruction b2_from_b1: +Removing instruction print_char_from_b2: +Removing instruction b3_from_b2: +Removing instruction print_sword_from_b3: +Removing instruction b4_from_b3: +Removing instruction print_char_from_b4: +Removing instruction b5_from_b4: +Removing instruction print_sword_from_b5: +Removing instruction b6_from_b5: +Removing instruction print_ln_from_b6: +Removing instruction b1_from_testChar: +Removing instruction print_byte_from_b1: +Removing instruction b2_from_b1: +Removing instruction print_char_from_b2: +Removing instruction b3_from_b2: +Removing instruction print_sbyte_from_b3: +Removing instruction b4_from_b3: +Removing instruction print_char_from_b4: +Removing instruction b5_from_b4: +Removing instruction print_sbyte_from_b5: +Removing instruction b6_from_b5: +Removing instruction print_ln_from_b6: +Removing instruction b3_from_print_sbyte: +Removing instruction print_char_from_b3: +Removing instruction b2_from_b3: +Removing instruction b2_from_b4: +Removing instruction print_byte_from_b2: +Removing instruction b1_from_print_sbyte: +Removing instruction print_char_from_b1: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction print_cls_from_main: +Removing instruction b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction b4: +Removing instruction breturn: +Removing instruction print_str_from_testLong: +Removing instruction b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction b2: +Removing instruction b3: +Removing instruction breturn: +Removing instruction print_word_from_print_dword: +Removing instruction b1: +Removing instruction print_word_from_b1: +Removing instruction breturn: +Removing instruction print_byte_from_print_word: +Removing instruction b1: +Removing instruction print_byte_from_b1: +Removing instruction breturn: +Removing instruction print_char_from_print_byte: +Removing instruction b1: +Removing instruction print_char_from_b1: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction print_str_from_testInt: +Removing instruction b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction breturn: +Removing instruction b2: +Removing instruction b3: +Removing instruction breturn: +Removing instruction print_str_from_testShort: +Removing instruction b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction breturn: +Removing instruction print_str_from_testChar: +Removing instruction b1: +Removing instruction b2: +Removing instruction b3: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction breturn: +Removing instruction b3: +Removing instruction breturn: +Removing instruction b4: +Removing instruction b1_from_print_cls: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte a 4.0 +(byte~) print_byte::$2 reg byte x 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#1 reg byte x 4.0 +(byte) print_byte::b#2 reg byte x 4.0 +(byte) print_byte::b#4 reg byte x 2.5 +(byte~) print_byte::b#6 reg byte x 4.0 +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#14 reg byte a 6.0 +(byte) print_char::ch#4 reg byte a 4.0 +(byte) print_char::ch#5 reg byte a 4.0 +(byte*) print_char_cursor +(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:10 11.0 +(byte*) print_char_cursor#132 print_char_cursor zp ZP_WORD:10 3.583333333333333 +(byte*) print_char_cursor#139 print_char_cursor zp ZP_WORD:10 6.0 +(byte*) print_char_cursor#140 print_char_cursor zp ZP_WORD:10 3.0 +(byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:10 3.333333333333333 +(byte*) print_char_cursor#150 print_char_cursor zp ZP_WORD:10 8.0 +(byte*~) print_char_cursor#180 print_char_cursor zp ZP_WORD:10 4.0 +(byte*~) print_char_cursor#181 print_char_cursor zp ZP_WORD:10 4.0 +(byte*~) print_char_cursor#182 print_char_cursor zp ZP_WORD:10 4.0 +(byte*) print_char_cursor#24 print_char_cursor zp ZP_WORD:10 0.5568181818181817 +(byte*) print_char_cursor#90 print_char_cursor zp ZP_WORD:10 16.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5 +(void()) print_dword((dword) print_dword::dw) +(label) print_dword::@1 +(label) print_dword::@return +(dword) print_dword::dw +(dword) print_dword::dw#0 dw zp ZP_DWORD:4 4.0 +(dword) print_dword::dw#2 dw zp ZP_DWORD:4 2.0 +(byte[]) print_hextab +(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" +(byte*) print_line_cursor +(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 0.8333333333333333 +(byte*) print_line_cursor#20 print_line_cursor zp ZP_WORD:2 24.0 +(byte*) print_line_cursor#39 print_line_cursor zp ZP_WORD:2 8.0 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_sbyte((signed byte) print_sbyte::b) +(label) print_sbyte::@1 +(label) print_sbyte::@2 +(label) print_sbyte::@3 +(label) print_sbyte::@4 +(label) print_sbyte::@return +(signed byte) print_sbyte::b +(signed byte) print_sbyte::b#0 reg byte x 4.0 +(signed byte) print_sbyte::b#3 reg byte x 1.0 +(signed byte) print_sbyte::b#5 reg byte x 4.0 +(byte*) print_screen +(void()) print_sdword((signed dword) print_sdword::dw) +(label) print_sdword::@1 +(label) print_sdword::@2 +(label) print_sdword::@3 +(label) print_sdword::@return +(signed dword) print_sdword::dw +(signed dword) print_sdword::dw#0 dw zp ZP_DWORD:4 4.0 +(signed dword) print_sdword::dw#3 dw zp ZP_DWORD:4 1.5 +(signed dword) print_sdword::dw#4 dw zp ZP_DWORD:4 6.0 +(void()) print_str((byte*) print_str::str) +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 str zp ZP_WORD:8 22.0 +(byte*) print_str::str#5 str zp ZP_WORD:8 11.5 +(byte*) print_str::str#7 str zp ZP_WORD:8 2.0 +(void()) print_sword((signed word) print_sword::w) +(label) print_sword::@1 +(label) print_sword::@2 +(label) print_sword::@3 +(label) print_sword::@return +(signed word) print_sword::w +(signed word) print_sword::w#0 w zp ZP_WORD:8 4.0 +(signed word) print_sword::w#5 w zp ZP_WORD:8 1.5 +(signed word) print_sword::w#6 w zp ZP_WORD:8 4.0 +(void()) print_word((word) print_word::w) +(label) print_word::@1 +(label) print_word::@return +(word) print_word::w +(word) print_word::w#1 w zp ZP_WORD:8 4.0 +(word) print_word::w#2 w zp ZP_WORD:8 4.0 +(word) print_word::w#5 w zp ZP_WORD:8 3.333333333333333 +(word~) print_word::w#9 w zp ZP_WORD:8 4.0 +(void()) testChar() +(label) testChar::@1 +(label) testChar::@2 +(label) testChar::@3 +(label) testChar::@4 +(label) testChar::@5 +(label) testChar::@6 +(label) testChar::@return +(signed byte) testChar::n +(const signed byte) testChar::n#0 n = -(byte/signed byte/word/signed word/dword/signed dword) $e +(signed byte) testChar::s +(const signed byte) testChar::s#0 s = -(byte/signed byte/word/signed word/dword/signed dword) $e +(const string) testChar::str str = (string) "char: @" +(byte) testChar::u +(const byte) testChar::u#0 u = (byte/signed byte/word/signed word/dword/signed dword) $e +(void()) testInt() +(label) testInt::@1 +(label) testInt::@2 +(label) testInt::@3 +(label) testInt::@4 +(label) testInt::@5 +(label) testInt::@6 +(label) testInt::@return +(signed word) testInt::n +(const signed word) testInt::n#0 n = -(word/signed word/dword/signed dword) $578 +(signed word) testInt::s +(const signed word) testInt::s#0 s = -(word/signed word/dword/signed dword) $578 +(const string) testInt::str str = (string) "int: @" +(word) testInt::u +(const word) testInt::u#0 u = (word/signed word/dword/signed dword) $578 +(void()) testLong() +(label) testLong::@1 +(label) testLong::@2 +(label) testLong::@3 +(label) testLong::@4 +(label) testLong::@5 +(label) testLong::@6 +(label) testLong::@return +(signed dword) testLong::n +(const signed dword) testLong::n#0 n = -(dword/signed dword) $222e0 +(signed dword) testLong::s +(const signed dword) testLong::s#0 s = -(dword/signed dword) $222e0 +(const string) testLong::str str = (string) "long: @" +(dword) testLong::u +(const dword) testLong::u#0 u = (dword/signed dword) $222e0 +(void()) testShort() +(label) testShort::@1 +(label) testShort::@2 +(label) testShort::@3 +(label) testShort::@4 +(label) testShort::@5 +(label) testShort::@6 +(label) testShort::@return +(signed word) testShort::n +(const signed word) testShort::n#0 n = -(word/signed word/dword/signed dword) $578 +(signed word) testShort::s +(const signed word) testShort::s#0 s = -(word/signed word/dword/signed dword) $578 +(const string) testShort::str str = (string) "short: @" +(word) testShort::u +(const word) testShort::u#0 u = (word/signed word/dword/signed dword) $578 + +zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 print_dword::dw#2 print_dword::dw#0 ] +zp ZP_WORD:8 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 print_sword::w#6 print_sword::w#5 print_sword::w#0 print_str::str#5 print_str::str#7 print_str::str#0 ] +reg byte x [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] +reg byte a [ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] +zp ZP_WORD:10 [ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] +reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +reg byte a [ print_byte::$0 ] +reg byte x [ print_byte::$2 ] + + +FINAL ASSEMBLER +Score: 2161 + +//SEG0 File Comments +// Tests the different standard C types +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label print_char_cursor = $a + .label print_line_cursor = 2 +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + //SEG11 [5] call print_cls + //SEG12 [140] phi from main to print_cls [phi:main->print_cls] + jsr print_cls + //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] + //SEG14 main::@1 + //SEG15 [7] call testChar + //SEG16 [114] phi from main::@1 to testChar [phi:main::@1->testChar] + jsr testChar + //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG18 main::@2 + //SEG19 [9] call testShort + jsr testShort + //SEG20 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + //SEG21 main::@3 + //SEG22 [11] call testInt + jsr testInt + //SEG23 [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + //SEG24 main::@4 + //SEG25 [13] call testLong + jsr testLong + //SEG26 main::@return + //SEG27 [14] return + rts +} +//SEG28 testLong +testLong: { + .const u = $222e0 + .const n = -$222e0 + .const s = -$222e0 + //SEG29 [15] (byte*~) print_char_cursor#181 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG30 [16] call print_str + //SEG31 [68] phi from testLong to print_str [phi:testLong->print_str] + //SEG32 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#181 [phi:testLong->print_str#0] -- register_copy + //SEG33 [68] phi (byte*) print_str::str#7 = (const string) testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG34 [17] phi from testLong to testLong::@1 [phi:testLong->testLong::@1] + //SEG35 testLong::@1 + //SEG36 [18] call print_dword + //SEG37 [44] phi from testLong::@1 to print_dword [phi:testLong::@1->print_dword] + //SEG38 [44] phi (byte*) print_char_cursor#140 = (byte*) print_char_cursor#132 [phi:testLong::@1->print_dword#0] -- register_copy + //SEG39 [44] phi (dword) print_dword::dw#2 = (const dword) testLong::u#0 [phi:testLong::@1->print_dword#1] -- vduz1=vduc1 + lda #u + sta print_dword.dw+1 + lda #>$10 + sta print_dword.dw+2 + lda #>u>>$10 + sta print_dword.dw+3 + jsr print_dword + //SEG40 [19] phi from testLong::@1 to testLong::@2 [phi:testLong::@1->testLong::@2] + //SEG41 testLong::@2 + //SEG42 [20] call print_char + //SEG43 [64] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] + //SEG44 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testLong::@2->print_char#0] -- register_copy + //SEG45 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG46 [21] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] + //SEG47 testLong::@3 + //SEG48 [22] call print_sdword + //SEG49 [35] phi from testLong::@3 to print_sdword [phi:testLong::@3->print_sdword] + //SEG50 [35] phi (signed dword) print_sdword::dw#3 = (const signed dword) testLong::n#0 [phi:testLong::@3->print_sdword#0] -- vdsz1=vdsc1 + lda #n + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>n>>$10 + sta print_sdword.dw+3 + jsr print_sdword + //SEG51 [23] phi from testLong::@3 to testLong::@4 [phi:testLong::@3->testLong::@4] + //SEG52 testLong::@4 + //SEG53 [24] call print_char + //SEG54 [64] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] + //SEG55 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testLong::@4->print_char#0] -- register_copy + //SEG56 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG57 [25] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] + //SEG58 testLong::@5 + //SEG59 [26] call print_sdword + //SEG60 [35] phi from testLong::@5 to print_sdword [phi:testLong::@5->print_sdword] + //SEG61 [35] phi (signed dword) print_sdword::dw#3 = (const signed dword) testLong::s#0 [phi:testLong::@5->print_sdword#0] -- vdsz1=vdsc1 + lda #s + sta print_sdword.dw+1 + lda #>$10 + sta print_sdword.dw+2 + lda #>s>>$10 + sta print_sdword.dw+3 + jsr print_sdword + //SEG62 [27] phi from testLong::@5 to testLong::@6 [phi:testLong::@5->testLong::@6] + //SEG63 testLong::@6 + //SEG64 [28] call print_ln + //SEG65 [30] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] + //SEG66 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testLong::@6->print_ln#0] -- register_copy + jsr print_ln + //SEG67 testLong::@return + //SEG68 [29] return + rts + str: .text "long: @" +} +//SEG69 print_ln +// Print a newline +print_ln: { + //SEG70 [31] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + //SEG71 [31] phi (byte*) print_line_cursor#20 = (byte*) print_line_cursor#39 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + //SEG72 print_ln::@1 + b1: + //SEG73 [32] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc print_line_cursor + sta print_line_cursor + bcc !+ + inc print_line_cursor+1 + !: + //SEG74 [33] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#24) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 + lda print_line_cursor+1 + cmp print_char_cursor+1 + bcc b1 + bne !+ + lda print_line_cursor + cmp print_char_cursor + bcc b1 + !: + //SEG75 print_ln::@return + //SEG76 [34] return + rts +} +//SEG77 print_sdword +// Print a signed dword as HEX +// print_sdword(signed dword zeropage(4) dw) +print_sdword: { + .label dw = 4 + //SEG78 [36] if((signed dword) print_sdword::dw#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sdword::@1 -- vdsz1_ge_0_then_la1 + lda dw+3 + bpl b1 + //SEG79 [37] phi from print_sdword to print_sdword::@2 [phi:print_sdword->print_sdword::@2] + //SEG80 print_sdword::@2 + //SEG81 [38] call print_char + //SEG82 [64] phi from print_sdword::@2 to print_char [phi:print_sdword::@2->print_char] + //SEG83 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sdword::@2->print_char#0] -- register_copy + //SEG84 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sdword::@2->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + //SEG85 print_sdword::@3 + //SEG86 [39] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#3 -- vdsz1=_neg_vdsz1 + sec + lda dw + eor #$ff + adc #0 + sta dw + lda dw+1 + eor #$ff + adc #0 + sta dw+1 + lda dw+2 + eor #$ff + adc #0 + sta dw+2 + lda dw+3 + eor #$ff + adc #0 + sta dw+3 + //SEG87 [40] phi from print_sdword print_sdword::@3 to print_sdword::@1 [phi:print_sdword/print_sdword::@3->print_sdword::@1] + //SEG88 [40] phi (signed dword) print_sdword::dw#4 = (signed dword) print_sdword::dw#3 [phi:print_sdword/print_sdword::@3->print_sdword::@1#0] -- register_copy + //SEG89 print_sdword::@1 + b1: + //SEG90 [41] (dword) print_dword::dw#0 ← ((dword)) (signed dword) print_sdword::dw#4 -- vduz1=_dword_vdsz1 + //SEG91 [42] call print_dword + //SEG92 [44] phi from print_sdword::@1 to print_dword [phi:print_sdword::@1->print_dword] + //SEG93 [44] phi (byte*) print_char_cursor#140 = (byte*) print_char_cursor#24 [phi:print_sdword::@1->print_dword#0] -- register_copy + //SEG94 [44] phi (dword) print_dword::dw#2 = (dword) print_dword::dw#0 [phi:print_sdword::@1->print_dword#1] -- register_copy + jsr print_dword + //SEG95 print_sdword::@return + //SEG96 [43] return + rts +} +//SEG97 print_dword +// Print a dword as HEX +// print_dword(dword zeropage(4) dw) +print_dword: { + .label dw = 4 + //SEG98 [45] (word) print_word::w#1 ← > (dword) print_dword::dw#2 -- vwuz1=_hi_vduz2 + lda dw+2 + sta print_word.w + lda dw+3 + sta print_word.w+1 + //SEG99 [46] call print_word + //SEG100 [50] phi from print_dword to print_word [phi:print_dword->print_word] + //SEG101 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#140 [phi:print_dword->print_word#0] -- register_copy + //SEG102 [50] phi (word) print_word::w#5 = (word) print_word::w#1 [phi:print_dword->print_word#1] -- register_copy + jsr print_word + //SEG103 print_dword::@1 + //SEG104 [47] (word) print_word::w#2 ← < (dword) print_dword::dw#2 -- vwuz1=_lo_vduz2 + lda dw + sta print_word.w + lda dw+1 + sta print_word.w+1 + //SEG105 [48] call print_word + //SEG106 [50] phi from print_dword::@1 to print_word [phi:print_dword::@1->print_word] + //SEG107 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#24 [phi:print_dword::@1->print_word#0] -- register_copy + //SEG108 [50] phi (word) print_word::w#5 = (word) print_word::w#2 [phi:print_dword::@1->print_word#1] -- register_copy + jsr print_word + //SEG109 print_dword::@return + //SEG110 [49] return + rts +} +//SEG111 print_word +// Print a word as HEX +// print_word(word zeropage(8) w) +print_word: { + .label w = 8 + //SEG112 [51] (byte) print_byte::b#1 ← > (word) print_word::w#5 -- vbuxx=_hi_vwuz1 + lda w+1 + tax + //SEG113 [52] call print_byte + //SEG114 [56] phi from print_word to print_byte [phi:print_word->print_byte] + //SEG115 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#139 [phi:print_word->print_byte#0] -- register_copy + //SEG116 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:print_word->print_byte#1] -- register_copy + jsr print_byte + //SEG117 print_word::@1 + //SEG118 [53] (byte) print_byte::b#2 ← < (word) print_word::w#5 -- vbuxx=_lo_vwuz1 + lda w + tax + //SEG119 [54] call print_byte + //SEG120 [56] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte] + //SEG121 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#24 [phi:print_word::@1->print_byte#0] -- register_copy + //SEG122 [56] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:print_word::@1->print_byte#1] -- register_copy + jsr print_byte + //SEG123 print_word::@return + //SEG124 [55] return + rts +} +//SEG125 print_byte +// Print a byte as HEX +// print_byte(byte register(X) b) +print_byte: { + //SEG126 [57] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + //SEG127 [58] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda print_hextab,y + //SEG128 [59] call print_char + //SEG129 [64] phi from print_byte to print_char [phi:print_byte->print_char] + //SEG130 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#143 [phi:print_byte->print_char#0] -- register_copy + //SEG131 [64] phi (byte) print_char::ch#14 = (byte) print_char::ch#4 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + //SEG132 print_byte::@1 + //SEG133 [60] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuxx=vbuxx_band_vbuc1 + lda #$f + axs #0 + //SEG134 [61] (byte) print_char::ch#5 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuxx + lda print_hextab,x + //SEG135 [62] call print_char + //SEG136 [64] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + //SEG137 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG138 [64] phi (byte) print_char::ch#14 = (byte) print_char::ch#5 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + //SEG139 print_byte::@return + //SEG140 [63] return + rts +} +//SEG141 print_char +// Print a single char +// print_char(byte register(A) ch) +print_char: { + //SEG142 [65] *((byte*) print_char_cursor#90) ← (byte) print_char::ch#14 -- _deref_pbuz1=vbuaa + ldy #0 + sta (print_char_cursor),y + //SEG143 [66] (byte*) print_char_cursor#24 ← ++ (byte*) print_char_cursor#90 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + //SEG144 print_char::@return + //SEG145 [67] return + rts +} +//SEG146 print_str +// Print a zero-terminated string +// print_str(byte* zeropage(8) str) +print_str: { + .label str = 8 + //SEG147 [69] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + //SEG148 [69] phi (byte*) print_char_cursor#132 = (byte*) print_char_cursor#150 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG149 [69] phi (byte*) print_str::str#5 = (byte*) print_str::str#7 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + //SEG150 print_str::@1 + b1: + //SEG151 [70] if(*((byte*) print_str::str#5)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + //SEG152 print_str::@return + //SEG153 [71] return + rts + //SEG154 print_str::@2 + b2: + //SEG155 [72] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#5) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + sta (print_char_cursor),y + //SEG156 [73] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#132 -- pbuz1=_inc_pbuz1 + inc print_char_cursor + bne !+ + inc print_char_cursor+1 + !: + //SEG157 [74] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#5 -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1 +} +//SEG158 testInt +testInt: { + .const u = $578 + .const n = -$578 + .const s = -$578 + //SEG159 [75] (byte*~) print_char_cursor#180 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG160 [76] call print_str + //SEG161 [68] phi from testInt to print_str [phi:testInt->print_str] + //SEG162 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#180 [phi:testInt->print_str#0] -- register_copy + //SEG163 [68] phi (byte*) print_str::str#7 = (const string) testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG164 [77] phi from testInt to testInt::@1 [phi:testInt->testInt::@1] + //SEG165 testInt::@1 + //SEG166 [78] call print_word + //SEG167 [50] phi from testInt::@1 to print_word [phi:testInt::@1->print_word] + //SEG168 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#132 [phi:testInt::@1->print_word#0] -- register_copy + //SEG169 [50] phi (word) print_word::w#5 = (const word) testInt::u#0 [phi:testInt::@1->print_word#1] -- vwuz1=vwuc1 + lda #u + sta print_word.w+1 + jsr print_word + //SEG170 [79] phi from testInt::@1 to testInt::@2 [phi:testInt::@1->testInt::@2] + //SEG171 testInt::@2 + //SEG172 [80] call print_char + //SEG173 [64] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] + //SEG174 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testInt::@2->print_char#0] -- register_copy + //SEG175 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG176 [81] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] + //SEG177 testInt::@3 + //SEG178 [82] call print_sword + //SEG179 [90] phi from testInt::@3 to print_sword [phi:testInt::@3->print_sword] + //SEG180 [90] phi (signed word) print_sword::w#5 = (const signed word) testInt::n#0 [phi:testInt::@3->print_sword#0] -- vwsz1=vwsc1 + lda #n + sta print_sword.w+1 + jsr print_sword + //SEG181 [83] phi from testInt::@3 to testInt::@4 [phi:testInt::@3->testInt::@4] + //SEG182 testInt::@4 + //SEG183 [84] call print_char + //SEG184 [64] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] + //SEG185 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testInt::@4->print_char#0] -- register_copy + //SEG186 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG187 [85] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] + //SEG188 testInt::@5 + //SEG189 [86] call print_sword + //SEG190 [90] phi from testInt::@5 to print_sword [phi:testInt::@5->print_sword] + //SEG191 [90] phi (signed word) print_sword::w#5 = (const signed word) testInt::s#0 [phi:testInt::@5->print_sword#0] -- vwsz1=vwsc1 + lda #s + sta print_sword.w+1 + jsr print_sword + //SEG192 [87] phi from testInt::@5 to testInt::@6 [phi:testInt::@5->testInt::@6] + //SEG193 testInt::@6 + //SEG194 [88] call print_ln + //SEG195 [30] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] + //SEG196 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testInt::@6->print_ln#0] -- register_copy + jsr print_ln + //SEG197 testInt::@return + //SEG198 [89] return + rts + str: .text "int: @" +} +//SEG199 print_sword +// Print a signed word as HEX +// print_sword(signed word zeropage(8) w) +print_sword: { + .label w = 8 + //SEG200 [91] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 -- vwsz1_ge_0_then_la1 + lda w+1 + bpl b1 + //SEG201 [92] phi from print_sword to print_sword::@2 [phi:print_sword->print_sword::@2] + //SEG202 print_sword::@2 + //SEG203 [93] call print_char + //SEG204 [64] phi from print_sword::@2 to print_char [phi:print_sword::@2->print_char] + //SEG205 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sword::@2->print_char#0] -- register_copy + //SEG206 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sword::@2->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + //SEG207 print_sword::@3 + //SEG208 [94] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 -- vwsz1=_neg_vwsz1 + sec + lda w + eor #$ff + adc #0 + sta w + lda w+1 + eor #$ff + adc #0 + sta w+1 + //SEG209 [95] phi from print_sword print_sword::@3 to print_sword::@1 [phi:print_sword/print_sword::@3->print_sword::@1] + //SEG210 [95] phi (signed word) print_sword::w#6 = (signed word) print_sword::w#5 [phi:print_sword/print_sword::@3->print_sword::@1#0] -- register_copy + //SEG211 print_sword::@1 + b1: + //SEG212 [96] (word~) print_word::w#9 ← (word)(signed word) print_sword::w#6 + //SEG213 [97] call print_word + //SEG214 [50] phi from print_sword::@1 to print_word [phi:print_sword::@1->print_word] + //SEG215 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#24 [phi:print_sword::@1->print_word#0] -- register_copy + //SEG216 [50] phi (word) print_word::w#5 = (word~) print_word::w#9 [phi:print_sword::@1->print_word#1] -- register_copy + jsr print_word + //SEG217 print_sword::@return + //SEG218 [98] return + rts +} +//SEG219 testShort +testShort: { + .const u = $578 + .const n = -$578 + .const s = -$578 + //SEG220 [99] (byte*~) print_char_cursor#182 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + lda print_line_cursor + sta print_char_cursor + lda print_line_cursor+1 + sta print_char_cursor+1 + //SEG221 [100] call print_str + //SEG222 [68] phi from testShort to print_str [phi:testShort->print_str] + //SEG223 [68] phi (byte*) print_char_cursor#150 = (byte*~) print_char_cursor#182 [phi:testShort->print_str#0] -- register_copy + //SEG224 [68] phi (byte*) print_str::str#7 = (const string) testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG225 [101] phi from testShort to testShort::@1 [phi:testShort->testShort::@1] + //SEG226 testShort::@1 + //SEG227 [102] call print_word + //SEG228 [50] phi from testShort::@1 to print_word [phi:testShort::@1->print_word] + //SEG229 [50] phi (byte*) print_char_cursor#139 = (byte*) print_char_cursor#132 [phi:testShort::@1->print_word#0] -- register_copy + //SEG230 [50] phi (word) print_word::w#5 = (const word) testShort::u#0 [phi:testShort::@1->print_word#1] -- vwuz1=vwuc1 + lda #u + sta print_word.w+1 + jsr print_word + //SEG231 [103] phi from testShort::@1 to testShort::@2 [phi:testShort::@1->testShort::@2] + //SEG232 testShort::@2 + //SEG233 [104] call print_char + //SEG234 [64] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] + //SEG235 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testShort::@2->print_char#0] -- register_copy + //SEG236 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG237 [105] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] + //SEG238 testShort::@3 + //SEG239 [106] call print_sword + //SEG240 [90] phi from testShort::@3 to print_sword [phi:testShort::@3->print_sword] + //SEG241 [90] phi (signed word) print_sword::w#5 = (const signed word) testShort::n#0 [phi:testShort::@3->print_sword#0] -- vwsz1=vwsc1 + lda #n + sta print_sword.w+1 + jsr print_sword + //SEG242 [107] phi from testShort::@3 to testShort::@4 [phi:testShort::@3->testShort::@4] + //SEG243 testShort::@4 + //SEG244 [108] call print_char + //SEG245 [64] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] + //SEG246 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testShort::@4->print_char#0] -- register_copy + //SEG247 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG248 [109] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] + //SEG249 testShort::@5 + //SEG250 [110] call print_sword + //SEG251 [90] phi from testShort::@5 to print_sword [phi:testShort::@5->print_sword] + //SEG252 [90] phi (signed word) print_sword::w#5 = (const signed word) testShort::s#0 [phi:testShort::@5->print_sword#0] -- vwsz1=vwsc1 + lda #s + sta print_sword.w+1 + jsr print_sword + //SEG253 [111] phi from testShort::@5 to testShort::@6 [phi:testShort::@5->testShort::@6] + //SEG254 testShort::@6 + //SEG255 [112] call print_ln + //SEG256 [30] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] + //SEG257 [30] phi (byte*) print_line_cursor#39 = (byte*) print_line_cursor#1 [phi:testShort::@6->print_ln#0] -- register_copy + jsr print_ln + //SEG258 testShort::@return + //SEG259 [113] return + rts + str: .text "short: @" +} +//SEG260 testChar +testChar: { + .const u = $e + .const n = -$e + .const s = -$e + //SEG261 [115] call print_str + //SEG262 [68] phi from testChar to print_str [phi:testChar->print_str] + //SEG263 [68] phi (byte*) print_char_cursor#150 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:testChar->print_str#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_char_cursor + lda #>$400 + sta print_char_cursor+1 + //SEG264 [68] phi (byte*) print_str::str#7 = (const string) testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG265 [116] phi from testChar to testChar::@1 [phi:testChar->testChar::@1] + //SEG266 testChar::@1 + //SEG267 [117] call print_byte + //SEG268 [56] phi from testChar::@1 to print_byte [phi:testChar::@1->print_byte] + //SEG269 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#132 [phi:testChar::@1->print_byte#0] -- register_copy + //SEG270 [56] phi (byte) print_byte::b#4 = (const byte) testChar::u#0 [phi:testChar::@1->print_byte#1] -- vbuxx=vbuc1 + ldx #u + jsr print_byte + //SEG271 [118] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] + //SEG272 testChar::@2 + //SEG273 [119] call print_char + //SEG274 [64] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] + //SEG275 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testChar::@2->print_char#0] -- register_copy + //SEG276 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG277 [120] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] + //SEG278 testChar::@3 + //SEG279 [121] call print_sbyte + //SEG280 [129] phi from testChar::@3 to print_sbyte [phi:testChar::@3->print_sbyte] + //SEG281 [129] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::n#0 [phi:testChar::@3->print_sbyte#0] -- vbsxx=vbsc1 + ldx #n + jsr print_sbyte + //SEG282 [122] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] + //SEG283 testChar::@4 + //SEG284 [123] call print_char + //SEG285 [64] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] + //SEG286 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:testChar::@4->print_char#0] -- register_copy + //SEG287 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG288 [124] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] + //SEG289 testChar::@5 + //SEG290 [125] call print_sbyte + //SEG291 [129] phi from testChar::@5 to print_sbyte [phi:testChar::@5->print_sbyte] + //SEG292 [129] phi (signed byte) print_sbyte::b#3 = (const signed byte) testChar::s#0 [phi:testChar::@5->print_sbyte#0] -- vbsxx=vbsc1 + ldx #s + jsr print_sbyte + //SEG293 [126] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] + //SEG294 testChar::@6 + //SEG295 [127] call print_ln + //SEG296 [30] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] + //SEG297 [30] phi (byte*) print_line_cursor#39 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 + lda #<$400 + sta print_line_cursor + lda #>$400 + sta print_line_cursor+1 + jsr print_ln + //SEG298 testChar::@return + //SEG299 [128] return + rts + str: .text "char: @" +} +//SEG300 print_sbyte +// Print a signed byte as HEX +// print_sbyte(signed byte register(X) b) +print_sbyte: { + //SEG301 [130] if((signed byte) print_sbyte::b#3<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 -- vbsxx_lt_0_then_la1 + cpx #0 + bmi b1 + //SEG302 [131] phi from print_sbyte to print_sbyte::@3 [phi:print_sbyte->print_sbyte::@3] + //SEG303 print_sbyte::@3 + //SEG304 [132] call print_char + //SEG305 [64] phi from print_sbyte::@3 to print_char [phi:print_sbyte::@3->print_char] + //SEG306 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sbyte::@3->print_char#0] -- register_copy + //SEG307 [64] phi (byte) print_char::ch#14 = (byte) ' ' [phi:print_sbyte::@3->print_char#1] -- vbuaa=vbuc1 + lda #' ' + jsr print_char + //SEG308 [133] phi from print_sbyte::@3 print_sbyte::@4 to print_sbyte::@2 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2] + //SEG309 [133] phi (signed byte) print_sbyte::b#5 = (signed byte) print_sbyte::b#3 [phi:print_sbyte::@3/print_sbyte::@4->print_sbyte::@2#0] -- register_copy + //SEG310 print_sbyte::@2 + b2: + //SEG311 [134] (byte~) print_byte::b#6 ← (byte)(signed byte) print_sbyte::b#5 + //SEG312 [135] call print_byte + //SEG313 [56] phi from print_sbyte::@2 to print_byte [phi:print_sbyte::@2->print_byte] + //SEG314 [56] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#24 [phi:print_sbyte::@2->print_byte#0] -- register_copy + //SEG315 [56] phi (byte) print_byte::b#4 = (byte~) print_byte::b#6 [phi:print_sbyte::@2->print_byte#1] -- register_copy + jsr print_byte + //SEG316 print_sbyte::@return + //SEG317 [136] return + rts + //SEG318 [137] phi from print_sbyte to print_sbyte::@1 [phi:print_sbyte->print_sbyte::@1] + //SEG319 print_sbyte::@1 + b1: + //SEG320 [138] call print_char + //SEG321 [64] phi from print_sbyte::@1 to print_char [phi:print_sbyte::@1->print_char] + //SEG322 [64] phi (byte*) print_char_cursor#90 = (byte*) print_char_cursor#24 [phi:print_sbyte::@1->print_char#0] -- register_copy + //SEG323 [64] phi (byte) print_char::ch#14 = (byte) '-' [phi:print_sbyte::@1->print_char#1] -- vbuaa=vbuc1 + lda #'-' + jsr print_char + //SEG324 print_sbyte::@4 + //SEG325 [139] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 -- vbsxx=_neg_vbsxx + txa + eor #$ff + clc + adc #1 + tax + jmp b2 +} +//SEG326 print_cls +// Clear the screen. Also resets current line/char cursor. +print_cls: { + .label sc = 2 + //SEG327 [141] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + //SEG328 [141] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) $400 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + //SEG329 [141] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + //SEG330 [141] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + //SEG331 print_cls::@1 + b1: + //SEG332 [142] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG333 [143] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG334 [144] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1 + lda sc + cmp #<$400+$3e8 + bne b1 + //SEG335 print_cls::@return + //SEG336 [145] return + rts +} + print_hextab: .text "0123456789abcdef" + diff --git a/src/test/ref/c-types.sym b/src/test/ref/c-types.sym new file mode 100644 index 000000000..931a873bc --- /dev/null +++ b/src/test/ref/c-types.sym @@ -0,0 +1,173 @@ +(label) @1 +(label) @begin +(label) @end +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte a 4.0 +(byte~) print_byte::$2 reg byte x 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#1 reg byte x 4.0 +(byte) print_byte::b#2 reg byte x 4.0 +(byte) print_byte::b#4 reg byte x 2.5 +(byte~) print_byte::b#6 reg byte x 4.0 +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#14 reg byte a 6.0 +(byte) print_char::ch#4 reg byte a 4.0 +(byte) print_char::ch#5 reg byte a 4.0 +(byte*) print_char_cursor +(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:10 11.0 +(byte*) print_char_cursor#132 print_char_cursor zp ZP_WORD:10 3.583333333333333 +(byte*) print_char_cursor#139 print_char_cursor zp ZP_WORD:10 6.0 +(byte*) print_char_cursor#140 print_char_cursor zp ZP_WORD:10 3.0 +(byte*) print_char_cursor#143 print_char_cursor zp ZP_WORD:10 3.333333333333333 +(byte*) print_char_cursor#150 print_char_cursor zp ZP_WORD:10 8.0 +(byte*~) print_char_cursor#180 print_char_cursor zp ZP_WORD:10 4.0 +(byte*~) print_char_cursor#181 print_char_cursor zp ZP_WORD:10 4.0 +(byte*~) print_char_cursor#182 print_char_cursor zp ZP_WORD:10 4.0 +(byte*) print_char_cursor#24 print_char_cursor zp ZP_WORD:10 0.5568181818181817 +(byte*) print_char_cursor#90 print_char_cursor zp ZP_WORD:10 16.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5 +(void()) print_dword((dword) print_dword::dw) +(label) print_dword::@1 +(label) print_dword::@return +(dword) print_dword::dw +(dword) print_dword::dw#0 dw zp ZP_DWORD:4 4.0 +(dword) print_dword::dw#2 dw zp ZP_DWORD:4 2.0 +(byte[]) print_hextab +(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" +(byte*) print_line_cursor +(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 0.8333333333333333 +(byte*) print_line_cursor#20 print_line_cursor zp ZP_WORD:2 24.0 +(byte*) print_line_cursor#39 print_line_cursor zp ZP_WORD:2 8.0 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_sbyte((signed byte) print_sbyte::b) +(label) print_sbyte::@1 +(label) print_sbyte::@2 +(label) print_sbyte::@3 +(label) print_sbyte::@4 +(label) print_sbyte::@return +(signed byte) print_sbyte::b +(signed byte) print_sbyte::b#0 reg byte x 4.0 +(signed byte) print_sbyte::b#3 reg byte x 1.0 +(signed byte) print_sbyte::b#5 reg byte x 4.0 +(byte*) print_screen +(void()) print_sdword((signed dword) print_sdword::dw) +(label) print_sdword::@1 +(label) print_sdword::@2 +(label) print_sdword::@3 +(label) print_sdword::@return +(signed dword) print_sdword::dw +(signed dword) print_sdword::dw#0 dw zp ZP_DWORD:4 4.0 +(signed dword) print_sdword::dw#3 dw zp ZP_DWORD:4 1.5 +(signed dword) print_sdword::dw#4 dw zp ZP_DWORD:4 6.0 +(void()) print_str((byte*) print_str::str) +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 str zp ZP_WORD:8 22.0 +(byte*) print_str::str#5 str zp ZP_WORD:8 11.5 +(byte*) print_str::str#7 str zp ZP_WORD:8 2.0 +(void()) print_sword((signed word) print_sword::w) +(label) print_sword::@1 +(label) print_sword::@2 +(label) print_sword::@3 +(label) print_sword::@return +(signed word) print_sword::w +(signed word) print_sword::w#0 w zp ZP_WORD:8 4.0 +(signed word) print_sword::w#5 w zp ZP_WORD:8 1.5 +(signed word) print_sword::w#6 w zp ZP_WORD:8 4.0 +(void()) print_word((word) print_word::w) +(label) print_word::@1 +(label) print_word::@return +(word) print_word::w +(word) print_word::w#1 w zp ZP_WORD:8 4.0 +(word) print_word::w#2 w zp ZP_WORD:8 4.0 +(word) print_word::w#5 w zp ZP_WORD:8 3.333333333333333 +(word~) print_word::w#9 w zp ZP_WORD:8 4.0 +(void()) testChar() +(label) testChar::@1 +(label) testChar::@2 +(label) testChar::@3 +(label) testChar::@4 +(label) testChar::@5 +(label) testChar::@6 +(label) testChar::@return +(signed byte) testChar::n +(const signed byte) testChar::n#0 n = -(byte/signed byte/word/signed word/dword/signed dword) $e +(signed byte) testChar::s +(const signed byte) testChar::s#0 s = -(byte/signed byte/word/signed word/dword/signed dword) $e +(const string) testChar::str str = (string) "char: @" +(byte) testChar::u +(const byte) testChar::u#0 u = (byte/signed byte/word/signed word/dword/signed dword) $e +(void()) testInt() +(label) testInt::@1 +(label) testInt::@2 +(label) testInt::@3 +(label) testInt::@4 +(label) testInt::@5 +(label) testInt::@6 +(label) testInt::@return +(signed word) testInt::n +(const signed word) testInt::n#0 n = -(word/signed word/dword/signed dword) $578 +(signed word) testInt::s +(const signed word) testInt::s#0 s = -(word/signed word/dword/signed dword) $578 +(const string) testInt::str str = (string) "int: @" +(word) testInt::u +(const word) testInt::u#0 u = (word/signed word/dword/signed dword) $578 +(void()) testLong() +(label) testLong::@1 +(label) testLong::@2 +(label) testLong::@3 +(label) testLong::@4 +(label) testLong::@5 +(label) testLong::@6 +(label) testLong::@return +(signed dword) testLong::n +(const signed dword) testLong::n#0 n = -(dword/signed dword) $222e0 +(signed dword) testLong::s +(const signed dword) testLong::s#0 s = -(dword/signed dword) $222e0 +(const string) testLong::str str = (string) "long: @" +(dword) testLong::u +(const dword) testLong::u#0 u = (dword/signed dword) $222e0 +(void()) testShort() +(label) testShort::@1 +(label) testShort::@2 +(label) testShort::@3 +(label) testShort::@4 +(label) testShort::@5 +(label) testShort::@6 +(label) testShort::@return +(signed word) testShort::n +(const signed word) testShort::n#0 n = -(word/signed word/dword/signed dword) $578 +(signed word) testShort::s +(const signed word) testShort::s#0 s = -(word/signed word/dword/signed dword) $578 +(const string) testShort::str str = (string) "short: @" +(word) testShort::u +(const word) testShort::u#0 u = (word/signed word/dword/signed dword) $578 + +zp ZP_WORD:2 [ print_line_cursor#20 print_line_cursor#39 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_DWORD:4 [ print_sdword::dw#4 print_sdword::dw#3 print_sdword::dw#0 print_dword::dw#2 print_dword::dw#0 ] +zp ZP_WORD:8 [ print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#9 print_sword::w#6 print_sword::w#5 print_sword::w#0 print_str::str#5 print_str::str#7 print_str::str#0 ] +reg byte x [ print_byte::b#4 print_byte::b#6 print_byte::b#1 print_byte::b#2 ] +reg byte a [ print_char::ch#14 print_char::ch#4 print_char::ch#5 ] +zp ZP_WORD:10 [ print_char_cursor#90 print_char_cursor#143 print_char_cursor#139 print_char_cursor#140 print_char_cursor#24 print_char_cursor#132 print_char_cursor#150 print_char_cursor#180 print_char_cursor#181 print_char_cursor#182 print_char_cursor#1 ] +reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 ] +reg byte a [ print_byte::$0 ] +reg byte x [ print_byte::$2 ]