diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/pwuc1_derefidx_vbuaa=_word_vbuxx.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/pwuc1_derefidx_vbuaa=_word_vbuxx.asm new file mode 100644 index 000000000..9c6320deb --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/pwuc1_derefidx_vbuaa=_word_vbuxx.asm @@ -0,0 +1,3 @@ +tay +txa +sta {c1},y \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/pwuc1_derefidx_vbuxx=_word_vbuaa.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/pwuc1_derefidx_vbuxx=_word_vbuaa.asm new file mode 100644 index 000000000..d22ca3f39 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/pwuc1_derefidx_vbuxx=_word_vbuaa.asm @@ -0,0 +1,3 @@ +sta {c1},x +lda #0 +sta {c1}+1,x diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte__deref_pwsz1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte__deref_pwsz1.asm new file mode 100644 index 000000000..183e5c63c --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte__deref_pwsz1.asm @@ -0,0 +1,2 @@ +ldy #0 +lda ({z1}),y \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pbuc1_derefidx_vbuxx.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pbuc1_derefidx_vbuxx.asm new file mode 100644 index 000000000..7454fa763 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pbuc1_derefidx_vbuxx.asm @@ -0,0 +1 @@ +lda {c1},x \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pbuc1_derefidx_vbuyy.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pbuc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..b2b867b05 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pbuc1_derefidx_vbuyy.asm @@ -0,0 +1 @@ +lda {c1},y \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pwsc1_derefidx_vbuxx.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pwsc1_derefidx_vbuxx.asm new file mode 100644 index 000000000..7454fa763 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pwsc1_derefidx_vbuxx.asm @@ -0,0 +1 @@ +lda {c1},x \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pwsc1_derefidx_vbuyy.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pwsc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..b2b867b05 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_byte_pwsc1_derefidx_vbuyy.asm @@ -0,0 +1 @@ +lda {c1},y \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_hi_pwuc1_derefidx_vbuxx.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_hi_pwuc1_derefidx_vbuxx.asm new file mode 100644 index 000000000..66ef35236 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_hi_pwuc1_derefidx_vbuxx.asm @@ -0,0 +1 @@ +lda {c1}+1,x \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_hi_pwuc1_derefidx_vbuyy.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_hi_pwuc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..5c24499d4 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_hi_pwuc1_derefidx_vbuyy.asm @@ -0,0 +1 @@ +lda {c1}+1,y \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_lo_pwuc1_derefidx_vbuxx.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_lo_pwuc1_derefidx_vbuxx.asm new file mode 100644 index 000000000..7454fa763 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_lo_pwuc1_derefidx_vbuxx.asm @@ -0,0 +1 @@ +lda {c1},x \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_lo_pwuc1_derefidx_vbuyy.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_lo_pwuc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..b2b867b05 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=_lo_pwuc1_derefidx_vbuyy.asm @@ -0,0 +1 @@ +lda {c1},y \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=vbuaa_minus_2.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=vbuaa_minus_2.asm new file mode 100644 index 000000000..c786c5775 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa=vbuaa_minus_2.asm @@ -0,0 +1,2 @@ +sec +sbc #2 diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_ge_pbuc1_derefidx_pbuc2_derefidx_vbuxx_then_la1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_ge_pbuc1_derefidx_pbuc2_derefidx_vbuxx_then_la1.asm new file mode 100644 index 000000000..9aa73e76d --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_ge_pbuc1_derefidx_pbuc2_derefidx_vbuxx_then_la1.asm @@ -0,0 +1,3 @@ +ldy {c2},x +cmp {c1},y +bcs {la1} diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_ge_pbuc1_derefidx_pbuc2_derefidx_vbuyy_then_la1.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_ge_pbuc1_derefidx_pbuc2_derefidx_vbuyy_then_la1.asm new file mode 100644 index 000000000..98349c1fd --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vbuaa_ge_pbuc1_derefidx_pbuc2_derefidx_vbuyy_then_la1.asm @@ -0,0 +1,3 @@ +ldx {c2},y +cmp {c1},x +bcs {la1} diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 index acff0ad35..e4b4d0679 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 @@ -64,6 +64,7 @@ directive | 'align' '(' NUMBER ')' #directiveAlign | 'register' '(' NAME ')' #directiveRegister | 'inline' #directiveInline + | 'interrupt' #directiveInterrupt ; stmtSeq diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens index 902e44b4e..43553c992 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens @@ -64,26 +64,27 @@ T__62=63 T__63=64 T__64=65 T__65=66 -MNEMONIC=67 -KICKASM=68 -SIMPLETYPE=69 -STRING=70 -CHAR=71 -BOOLEAN=72 -NUMBER=73 -NUMFLOAT=74 -BINFLOAT=75 -DECFLOAT=76 -HEXFLOAT=77 -NUMINT=78 -BININTEGER=79 -DECINTEGER=80 -HEXINTEGER=81 -NAME=82 -ASMREL=83 -WS=84 -COMMENT_LINE=85 -COMMENT_BLOCK=86 +T__66=67 +MNEMONIC=68 +KICKASM=69 +SIMPLETYPE=70 +STRING=71 +CHAR=72 +BOOLEAN=73 +NUMBER=74 +NUMFLOAT=75 +BINFLOAT=76 +DECFLOAT=77 +HEXFLOAT=78 +NUMINT=79 +BININTEGER=80 +DECINTEGER=81 +HEXINTEGER=82 +NAME=83 +ASMREL=84 +WS=85 +COMMENT_LINE=86 +COMMENT_BLOCK=87 'import'=1 '='=2 ';'=3 @@ -105,48 +106,49 @@ COMMENT_BLOCK=86 'extern'=19 'align'=20 'register'=21 -'if'=22 -'else'=23 -'while'=24 -'do'=25 -'for'=26 -'return'=27 -'asm'=28 -'..'=29 -'signed'=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 -'^='=64 -'.byte'=65 -'#'=66 +'interrupt'=22 +'if'=23 +'else'=24 +'while'=25 +'do'=26 +'for'=27 +'return'=28 +'asm'=29 +'..'=30 +'signed'=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 +'|='=64 +'^='=65 +'.byte'=66 +'#'=67 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java index 8c0a3c856..4bbb7ded4 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java @@ -1,4 +1,4 @@ -// Generated from C:/c64/kickc/src/main/java/dk/camelot64/kickc/parser\KickC.g4 by ANTLR 4.7 +// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickC.g4 by ANTLR 4.7 package dk.camelot64.kickc.parser; import org.antlr.v4.runtime.ParserRuleContext; @@ -287,6 +287,18 @@ public class KickCBaseListener implements KickCListener { *

The default implementation does nothing.

*/ @Override public void exitDirectiveInline(KickCParser.DirectiveInlineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirectiveInterrupt(KickCParser.DirectiveInterruptContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirectiveInterrupt(KickCParser.DirectiveInterruptContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java index f68b32f53..f78c4e0f6 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java @@ -1,4 +1,4 @@ -// Generated from C:/c64/kickc/src/main/java/dk/camelot64/kickc/parser\KickC.g4 by ANTLR 4.7 +// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickC.g4 by ANTLR 4.7 package dk.camelot64.kickc.parser; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; @@ -172,6 +172,13 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitDirectiveInline(KickCParser.DirectiveInlineContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDirectiveInterrupt(KickCParser.DirectiveInterruptContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index 56c2698c9..95a221f90 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -1,4 +1,4 @@ -// Generated from C:/c64/kickc/src/main/java/dk/camelot64/kickc/parser\KickC.g4 by ANTLR 4.7 +// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickC.g4 by ANTLR 4.7 package dk.camelot64.kickc.parser; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; @@ -26,10 +26,10 @@ 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, - MNEMONIC=67, KICKASM=68, SIMPLETYPE=69, STRING=70, CHAR=71, BOOLEAN=72, - NUMBER=73, NUMFLOAT=74, BINFLOAT=75, DECFLOAT=76, HEXFLOAT=77, NUMINT=78, - BININTEGER=79, DECINTEGER=80, HEXINTEGER=81, NAME=82, ASMREL=83, WS=84, - COMMENT_LINE=85, COMMENT_BLOCK=86; + T__66=67, MNEMONIC=68, KICKASM=69, SIMPLETYPE=70, STRING=71, CHAR=72, + BOOLEAN=73, NUMBER=74, NUMFLOAT=75, BINFLOAT=76, DECFLOAT=77, HEXFLOAT=78, + NUMINT=79, BININTEGER=80, DECINTEGER=81, HEXINTEGER=82, NAME=83, ASMREL=84, + WS=85, COMMENT_LINE=86, COMMENT_BLOCK=87; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -47,21 +47,21 @@ 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", "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", "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'", "'='", "';'", "'('", "')'", "'{'", "'}'", "'kickasm'", "','", "'resource'", "'clobber'", "'param'", "':'", "'bytes'", "'cycles'", - "'pc'", "'inline'", "'const'", "'extern'", "'align'", "'register'", "'if'", - "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", "'..'", "'signed'", - "'*'", "'['", "']'", "'--'", "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", - "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", "'=='", "'!='", "'<='", "'>='", - "'^'", "'|'", "'&&'", "'||'", "'+='", "'-='", "'*='", "'/='", "'%='", - "'<<='", "'>>='", "'&='", "'|='", "'^='", "'.byte'", "'#'" + "'pc'", "'inline'", "'const'", "'extern'", "'align'", "'register'", "'interrupt'", + "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", "'..'", + "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'", "'-'", "'!'", + "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", "'=='", "'!='", + "'<='", "'>='", "'^'", "'|'", "'&&'", "'||'", "'+='", "'-='", "'*='", + "'/='", "'%='", "'<<='", "'>>='", "'&='", "'|='", "'^='", "'.byte'", "'#'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, null, null, null, null, null, null, null, @@ -69,10 +69,10 @@ 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, null, null, null, null, null, null, "MNEMONIC", "KICKASM", "SIMPLETYPE", - "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", - "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + null, null, null, null, null, null, null, null, "MNEMONIC", "KICKASM", + "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", + "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", + "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -132,7 +132,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\2X\u036c\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2Y\u0378\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"+ @@ -142,313 +142,317 @@ public class KickCLexer extends Lexer { "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ "\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\\\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\t\3"+ - "\t\3\t\3\t\3\t\3\t\3\n\3\n\3\13\3\13\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\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\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\21\3\21"+ - "\3\21\3\22\3\22\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\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26"+ - "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30\3\30"+ - "\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\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\36\3\36"+ - "\3\36\3\37\3\37\3\37\3\37\3\37\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\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\63\3\63\3"+ - "\63\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\3"+ - "9\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\3B\3B\3B\3B\3B\3B\3C\3C\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\5D\u028d\nD\3E\3E\3E\3E\7E\u0293\nE\fE\16E\u0296\13E\3E\3E"+ - "\3E\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\5F"+ - "\u02b0\nF\3G\3G\3G\3G\7G\u02b6\nG\fG\16G\u02b9\13G\3G\3G\3H\3H\3H\3H\5"+ - "H\u02c1\nH\3H\3H\3I\3I\3I\3I\3I\3I\3I\3I\3I\5I\u02ce\nI\3J\3J\5J\u02d2"+ - "\nJ\3K\3K\3K\5K\u02d7\nK\3L\3L\3L\3L\3L\5L\u02de\nL\3L\7L\u02e1\nL\fL"+ - "\16L\u02e4\13L\3L\3L\6L\u02e8\nL\rL\16L\u02e9\3M\7M\u02ed\nM\fM\16M\u02f0"+ - "\13M\3M\3M\6M\u02f4\nM\rM\16M\u02f5\3N\3N\3N\3N\3N\5N\u02fd\nN\3N\7N\u0300"+ - "\nN\fN\16N\u0303\13N\3N\3N\6N\u0307\nN\rN\16N\u0308\3O\3O\3O\5O\u030e"+ - "\nO\3P\3P\3P\6P\u0313\nP\rP\16P\u0314\3P\3P\6P\u0319\nP\rP\16P\u031a\5"+ - "P\u031d\nP\3Q\6Q\u0320\nQ\rQ\16Q\u0321\3R\3R\3R\3R\3R\5R\u0329\nR\3R\6"+ - "R\u032c\nR\rR\16R\u032d\3S\3S\3T\3T\3U\3U\3V\3V\7V\u0338\nV\fV\16V\u033b"+ - "\13V\3W\3W\3X\3X\3Y\3Y\7Y\u0343\nY\fY\16Y\u0346\13Y\3Y\6Y\u0349\nY\rY"+ - "\16Y\u034a\3Z\6Z\u034e\nZ\rZ\16Z\u034f\3Z\3Z\3[\3[\3[\3[\7[\u0358\n[\f"+ - "[\16[\u035b\13[\3[\3[\3\\\3\\\3\\\3\\\7\\\u0363\n\\\f\\\16\\\u0366\13"+ - "\\\3\\\3\\\3\\\3\\\3\\\4\u0294\u0364\2]\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{?}@\177A\u0081B\u0083"+ - "C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097"+ - "M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5\2\u00a7\2\u00a9\2\u00ab"+ - "T\u00ad\2\u00af\2\u00b1U\u00b3V\u00b5W\u00b7X\3\2\r\3\2$$\3\2))\4\2DD"+ - "dd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\4\2--//\5\2"+ - "\13\f\17\17\"\"\4\2\f\f\17\17\2\u03d4\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\u00ab\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7"+ - "\3\2\2\2\3\u00b9\3\2\2\2\5\u00c0\3\2\2\2\7\u00c2\3\2\2\2\t\u00c4\3\2\2"+ - "\2\13\u00c6\3\2\2\2\r\u00c8\3\2\2\2\17\u00ca\3\2\2\2\21\u00cc\3\2\2\2"+ - "\23\u00d4\3\2\2\2\25\u00d6\3\2\2\2\27\u00df\3\2\2\2\31\u00e7\3\2\2\2\33"+ - "\u00ed\3\2\2\2\35\u00ef\3\2\2\2\37\u00f5\3\2\2\2!\u00fc\3\2\2\2#\u00ff"+ - "\3\2\2\2%\u0106\3\2\2\2\'\u010c\3\2\2\2)\u0113\3\2\2\2+\u0119\3\2\2\2"+ - "-\u0122\3\2\2\2/\u0125\3\2\2\2\61\u012a\3\2\2\2\63\u0130\3\2\2\2\65\u0133"+ - "\3\2\2\2\67\u0137\3\2\2\29\u013e\3\2\2\2;\u0142\3\2\2\2=\u0145\3\2\2\2"+ - "?\u014c\3\2\2\2A\u014e\3\2\2\2C\u0150\3\2\2\2E\u0152\3\2\2\2G\u0155\3"+ - "\2\2\2I\u0158\3\2\2\2K\u015a\3\2\2\2M\u015c\3\2\2\2O\u015e\3\2\2\2Q\u0160"+ - "\3\2\2\2S\u0162\3\2\2\2U\u0165\3\2\2\2W\u0168\3\2\2\2Y\u016a\3\2\2\2["+ - "\u016c\3\2\2\2]\u016e\3\2\2\2_\u0170\3\2\2\2a\u0173\3\2\2\2c\u0176\3\2"+ - "\2\2e\u0179\3\2\2\2g\u017c\3\2\2\2i\u017e\3\2\2\2k\u0180\3\2\2\2m\u0183"+ - "\3\2\2\2o\u0186\3\2\2\2q\u0189\3\2\2\2s\u018c\3\2\2\2u\u018f\3\2\2\2w"+ - "\u0192\3\2\2\2y\u0195\3\2\2\2{\u0199\3\2\2\2}\u019d\3\2\2\2\177\u01a0"+ - "\3\2\2\2\u0081\u01a3\3\2\2\2\u0083\u01a6\3\2\2\2\u0085\u01ac\3\2\2\2\u0087"+ - "\u028c\3\2\2\2\u0089\u028e\3\2\2\2\u008b\u02af\3\2\2\2\u008d\u02b1\3\2"+ - "\2\2\u008f\u02bc\3\2\2\2\u0091\u02cd\3\2\2\2\u0093\u02d1\3\2\2\2\u0095"+ - "\u02d6\3\2\2\2\u0097\u02dd\3\2\2\2\u0099\u02ee\3\2\2\2\u009b\u02fc\3\2"+ - "\2\2\u009d\u030d\3\2\2\2\u009f\u031c\3\2\2\2\u00a1\u031f\3\2\2\2\u00a3"+ - "\u0328\3\2\2\2\u00a5\u032f\3\2\2\2\u00a7\u0331\3\2\2\2\u00a9\u0333\3\2"+ - "\2\2\u00ab\u0335\3\2\2\2\u00ad\u033c\3\2\2\2\u00af\u033e\3\2\2\2\u00b1"+ - "\u0340\3\2\2\2\u00b3\u034d\3\2\2\2\u00b5\u0353\3\2\2\2\u00b7\u035e\3\2"+ - "\2\2\u00b9\u00ba\7k\2\2\u00ba\u00bb\7o\2\2\u00bb\u00bc\7r\2\2\u00bc\u00bd"+ - "\7q\2\2\u00bd\u00be\7t\2\2\u00be\u00bf\7v\2\2\u00bf\4\3\2\2\2\u00c0\u00c1"+ - "\7?\2\2\u00c1\6\3\2\2\2\u00c2\u00c3\7=\2\2\u00c3\b\3\2\2\2\u00c4\u00c5"+ - "\7*\2\2\u00c5\n\3\2\2\2\u00c6\u00c7\7+\2\2\u00c7\f\3\2\2\2\u00c8\u00c9"+ - "\7}\2\2\u00c9\16\3\2\2\2\u00ca\u00cb\7\177\2\2\u00cb\20\3\2\2\2\u00cc"+ - "\u00cd\7m\2\2\u00cd\u00ce\7k\2\2\u00ce\u00cf\7e\2\2\u00cf\u00d0\7m\2\2"+ - "\u00d0\u00d1\7c\2\2\u00d1\u00d2\7u\2\2\u00d2\u00d3\7o\2\2\u00d3\22\3\2"+ - "\2\2\u00d4\u00d5\7.\2\2\u00d5\24\3\2\2\2\u00d6\u00d7\7t\2\2\u00d7\u00d8"+ - "\7g\2\2\u00d8\u00d9\7u\2\2\u00d9\u00da\7q\2\2\u00da\u00db\7w\2\2\u00db"+ - "\u00dc\7t\2\2\u00dc\u00dd\7e\2\2\u00dd\u00de\7g\2\2\u00de\26\3\2\2\2\u00df"+ - "\u00e0\7e\2\2\u00e0\u00e1\7n\2\2\u00e1\u00e2\7q\2\2\u00e2\u00e3\7d\2\2"+ - "\u00e3\u00e4\7d\2\2\u00e4\u00e5\7g\2\2\u00e5\u00e6\7t\2\2\u00e6\30\3\2"+ - "\2\2\u00e7\u00e8\7r\2\2\u00e8\u00e9\7c\2\2\u00e9\u00ea\7t\2\2\u00ea\u00eb"+ - "\7c\2\2\u00eb\u00ec\7o\2\2\u00ec\32\3\2\2\2\u00ed\u00ee\7<\2\2\u00ee\34"+ - "\3\2\2\2\u00ef\u00f0\7d\2\2\u00f0\u00f1\7{\2\2\u00f1\u00f2\7v\2\2\u00f2"+ - "\u00f3\7g\2\2\u00f3\u00f4\7u\2\2\u00f4\36\3\2\2\2\u00f5\u00f6\7e\2\2\u00f6"+ - "\u00f7\7{\2\2\u00f7\u00f8\7e\2\2\u00f8\u00f9\7n\2\2\u00f9\u00fa\7g\2\2"+ - "\u00fa\u00fb\7u\2\2\u00fb \3\2\2\2\u00fc\u00fd\7r\2\2\u00fd\u00fe\7e\2"+ - "\2\u00fe\"\3\2\2\2\u00ff\u0100\7k\2\2\u0100\u0101\7p\2\2\u0101\u0102\7"+ - "n\2\2\u0102\u0103\7k\2\2\u0103\u0104\7p\2\2\u0104\u0105\7g\2\2\u0105$"+ - "\3\2\2\2\u0106\u0107\7e\2\2\u0107\u0108\7q\2\2\u0108\u0109\7p\2\2\u0109"+ - "\u010a\7u\2\2\u010a\u010b\7v\2\2\u010b&\3\2\2\2\u010c\u010d\7g\2\2\u010d"+ - "\u010e\7z\2\2\u010e\u010f\7v\2\2\u010f\u0110\7g\2\2\u0110\u0111\7t\2\2"+ - "\u0111\u0112\7p\2\2\u0112(\3\2\2\2\u0113\u0114\7c\2\2\u0114\u0115\7n\2"+ - "\2\u0115\u0116\7k\2\2\u0116\u0117\7i\2\2\u0117\u0118\7p\2\2\u0118*\3\2"+ - "\2\2\u0119\u011a\7t\2\2\u011a\u011b\7g\2\2\u011b\u011c\7i\2\2\u011c\u011d"+ - "\7k\2\2\u011d\u011e\7u\2\2\u011e\u011f\7v\2\2\u011f\u0120\7g\2\2\u0120"+ - "\u0121\7t\2\2\u0121,\3\2\2\2\u0122\u0123\7k\2\2\u0123\u0124\7h\2\2\u0124"+ - ".\3\2\2\2\u0125\u0126\7g\2\2\u0126\u0127\7n\2\2\u0127\u0128\7u\2\2\u0128"+ - "\u0129\7g\2\2\u0129\60\3\2\2\2\u012a\u012b\7y\2\2\u012b\u012c\7j\2\2\u012c"+ - "\u012d\7k\2\2\u012d\u012e\7n\2\2\u012e\u012f\7g\2\2\u012f\62\3\2\2\2\u0130"+ - "\u0131\7f\2\2\u0131\u0132\7q\2\2\u0132\64\3\2\2\2\u0133\u0134\7h\2\2\u0134"+ - "\u0135\7q\2\2\u0135\u0136\7t\2\2\u0136\66\3\2\2\2\u0137\u0138\7t\2\2\u0138"+ - "\u0139\7g\2\2\u0139\u013a\7v\2\2\u013a\u013b\7w\2\2\u013b\u013c\7t\2\2"+ - "\u013c\u013d\7p\2\2\u013d8\3\2\2\2\u013e\u013f\7c\2\2\u013f\u0140\7u\2"+ - "\2\u0140\u0141\7o\2\2\u0141:\3\2\2\2\u0142\u0143\7\60\2\2\u0143\u0144"+ - "\7\60\2\2\u0144<\3\2\2\2\u0145\u0146\7u\2\2\u0146\u0147\7k\2\2\u0147\u0148"+ - "\7i\2\2\u0148\u0149\7p\2\2\u0149\u014a\7g\2\2\u014a\u014b\7f\2\2\u014b"+ - ">\3\2\2\2\u014c\u014d\7,\2\2\u014d@\3\2\2\2\u014e\u014f\7]\2\2\u014fB"+ - "\3\2\2\2\u0150\u0151\7_\2\2\u0151D\3\2\2\2\u0152\u0153\7/\2\2\u0153\u0154"+ - "\7/\2\2\u0154F\3\2\2\2\u0155\u0156\7-\2\2\u0156\u0157\7-\2\2\u0157H\3"+ - "\2\2\2\u0158\u0159\7-\2\2\u0159J\3\2\2\2\u015a\u015b\7/\2\2\u015bL\3\2"+ - "\2\2\u015c\u015d\7#\2\2\u015dN\3\2\2\2\u015e\u015f\7(\2\2\u015fP\3\2\2"+ - "\2\u0160\u0161\7\u0080\2\2\u0161R\3\2\2\2\u0162\u0163\7@\2\2\u0163\u0164"+ - "\7@\2\2\u0164T\3\2\2\2\u0165\u0166\7>\2\2\u0166\u0167\7>\2\2\u0167V\3"+ - "\2\2\2\u0168\u0169\7\61\2\2\u0169X\3\2\2\2\u016a\u016b\7\'\2\2\u016bZ"+ - "\3\2\2\2\u016c\u016d\7>\2\2\u016d\\\3\2\2\2\u016e\u016f\7@\2\2\u016f^"+ - "\3\2\2\2\u0170\u0171\7?\2\2\u0171\u0172\7?\2\2\u0172`\3\2\2\2\u0173\u0174"+ - "\7#\2\2\u0174\u0175\7?\2\2\u0175b\3\2\2\2\u0176\u0177\7>\2\2\u0177\u0178"+ - "\7?\2\2\u0178d\3\2\2\2\u0179\u017a\7@\2\2\u017a\u017b\7?\2\2\u017bf\3"+ - "\2\2\2\u017c\u017d\7`\2\2\u017dh\3\2\2\2\u017e\u017f\7~\2\2\u017fj\3\2"+ - "\2\2\u0180\u0181\7(\2\2\u0181\u0182\7(\2\2\u0182l\3\2\2\2\u0183\u0184"+ - "\7~\2\2\u0184\u0185\7~\2\2\u0185n\3\2\2\2\u0186\u0187\7-\2\2\u0187\u0188"+ - "\7?\2\2\u0188p\3\2\2\2\u0189\u018a\7/\2\2\u018a\u018b\7?\2\2\u018br\3"+ - "\2\2\2\u018c\u018d\7,\2\2\u018d\u018e\7?\2\2\u018et\3\2\2\2\u018f\u0190"+ - "\7\61\2\2\u0190\u0191\7?\2\2\u0191v\3\2\2\2\u0192\u0193\7\'\2\2\u0193"+ - "\u0194\7?\2\2\u0194x\3\2\2\2\u0195\u0196\7>\2\2\u0196\u0197\7>\2\2\u0197"+ - "\u0198\7?\2\2\u0198z\3\2\2\2\u0199\u019a\7@\2\2\u019a\u019b\7@\2\2\u019b"+ - "\u019c\7?\2\2\u019c|\3\2\2\2\u019d\u019e\7(\2\2\u019e\u019f\7?\2\2\u019f"+ - "~\3\2\2\2\u01a0\u01a1\7~\2\2\u01a1\u01a2\7?\2\2\u01a2\u0080\3\2\2\2\u01a3"+ - "\u01a4\7`\2\2\u01a4\u01a5\7?\2\2\u01a5\u0082\3\2\2\2\u01a6\u01a7\7\60"+ - "\2\2\u01a7\u01a8\7d\2\2\u01a8\u01a9\7{\2\2\u01a9\u01aa\7v\2\2\u01aa\u01ab"+ - "\7g\2\2\u01ab\u0084\3\2\2\2\u01ac\u01ad\7%\2\2\u01ad\u0086\3\2\2\2\u01ae"+ - "\u01af\7d\2\2\u01af\u01b0\7t\2\2\u01b0\u028d\7m\2\2\u01b1\u01b2\7q\2\2"+ - "\u01b2\u01b3\7t\2\2\u01b3\u028d\7c\2\2\u01b4\u01b5\7m\2\2\u01b5\u01b6"+ - "\7k\2\2\u01b6\u028d\7n\2\2\u01b7\u01b8\7u\2\2\u01b8\u01b9\7n\2\2\u01b9"+ - "\u028d\7q\2\2\u01ba\u01bb\7p\2\2\u01bb\u01bc\7q\2\2\u01bc\u028d\7r\2\2"+ - "\u01bd\u01be\7c\2\2\u01be\u01bf\7u\2\2\u01bf\u028d\7n\2\2\u01c0\u01c1"+ - "\7r\2\2\u01c1\u01c2\7j\2\2\u01c2\u028d\7r\2\2\u01c3\u01c4\7c\2\2\u01c4"+ - "\u01c5\7p\2\2\u01c5\u028d\7e\2\2\u01c6\u01c7\7d\2\2\u01c7\u01c8\7r\2\2"+ - "\u01c8\u028d\7n\2\2\u01c9\u01ca\7e\2\2\u01ca\u01cb\7n\2\2\u01cb\u028d"+ - "\7e\2\2\u01cc\u01cd\7l\2\2\u01cd\u01ce\7u\2\2\u01ce\u028d\7t\2\2\u01cf"+ - "\u01d0\7c\2\2\u01d0\u01d1\7p\2\2\u01d1\u028d\7f\2\2\u01d2\u01d3\7t\2\2"+ - "\u01d3\u01d4\7n\2\2\u01d4\u028d\7c\2\2\u01d5\u01d6\7d\2\2\u01d6\u01d7"+ - "\7k\2\2\u01d7\u028d\7v\2\2\u01d8\u01d9\7t\2\2\u01d9\u01da\7q\2\2\u01da"+ - "\u028d\7n\2\2\u01db\u01dc\7r\2\2\u01dc\u01dd\7n\2\2\u01dd\u028d\7c\2\2"+ - "\u01de\u01df\7r\2\2\u01df\u01e0\7n\2\2\u01e0\u028d\7r\2\2\u01e1\u01e2"+ - "\7d\2\2\u01e2\u01e3\7o\2\2\u01e3\u028d\7k\2\2\u01e4\u01e5\7u\2\2\u01e5"+ - "\u01e6\7g\2\2\u01e6\u028d\7e\2\2\u01e7\u01e8\7t\2\2\u01e8\u01e9\7v\2\2"+ - "\u01e9\u028d\7k\2\2\u01ea\u01eb\7g\2\2\u01eb\u01ec\7q\2\2\u01ec\u028d"+ - "\7t\2\2\u01ed\u01ee\7u\2\2\u01ee\u01ef\7t\2\2\u01ef\u028d\7g\2\2\u01f0"+ - "\u01f1\7n\2\2\u01f1\u01f2\7u\2\2\u01f2\u028d\7t\2\2\u01f3\u01f4\7r\2\2"+ - "\u01f4\u01f5\7j\2\2\u01f5\u028d\7c\2\2\u01f6\u01f7\7c\2\2\u01f7\u01f8"+ - "\7n\2\2\u01f8\u028d\7t\2\2\u01f9\u01fa\7l\2\2\u01fa\u01fb\7o\2\2\u01fb"+ - "\u028d\7r\2\2\u01fc\u01fd\7d\2\2\u01fd\u01fe\7x\2\2\u01fe\u028d\7e\2\2"+ - "\u01ff\u0200\7e\2\2\u0200\u0201\7n\2\2\u0201\u028d\7k\2\2\u0202\u0203"+ - "\7t\2\2\u0203\u0204\7v\2\2\u0204\u028d\7u\2\2\u0205\u0206\7c\2\2\u0206"+ - "\u0207\7f\2\2\u0207\u028d\7e\2\2\u0208\u0209\7t\2\2\u0209\u020a\7t\2\2"+ - "\u020a\u028d\7c\2\2\u020b\u020c\7d\2\2\u020c\u020d\7x\2\2\u020d\u028d"+ - "\7u\2\2\u020e\u020f\7u\2\2\u020f\u0210\7g\2\2\u0210\u028d\7k\2\2\u0211"+ - "\u0212\7u\2\2\u0212\u0213\7c\2\2\u0213\u028d\7z\2\2\u0214\u0215\7u\2\2"+ - "\u0215\u0216\7v\2\2\u0216\u028d\7{\2\2\u0217\u0218\7u\2\2\u0218\u0219"+ - "\7v\2\2\u0219\u028d\7c\2\2\u021a\u021b\7u\2\2\u021b\u021c\7v\2\2\u021c"+ - "\u028d\7z\2\2\u021d\u021e\7f\2\2\u021e\u021f\7g\2\2\u021f\u028d\7{\2\2"+ - "\u0220\u0221\7v\2\2\u0221\u0222\7z\2\2\u0222\u028d\7c\2\2\u0223\u0224"+ - "\7z\2\2\u0224\u0225\7c\2\2\u0225\u028d\7c\2\2\u0226\u0227\7d\2\2\u0227"+ - "\u0228\7e\2\2\u0228\u028d\7e\2\2\u0229\u022a\7c\2\2\u022a\u022b\7j\2\2"+ - "\u022b\u028d\7z\2\2\u022c\u022d\7v\2\2\u022d\u022e\7{\2\2\u022e\u028d"+ - "\7c\2\2\u022f\u0230\7v\2\2\u0230\u0231\7z\2\2\u0231\u028d\7u\2\2\u0232"+ - "\u0233\7v\2\2\u0233\u0234\7c\2\2\u0234\u028d\7u\2\2\u0235\u0236\7u\2\2"+ - "\u0236\u0237\7j\2\2\u0237\u028d\7{\2\2\u0238\u0239\7u\2\2\u0239\u023a"+ - "\7j\2\2\u023a\u028d\7z\2\2\u023b\u023c\7n\2\2\u023c\u023d\7f\2\2\u023d"+ - "\u028d\7{\2\2\u023e\u023f\7n\2\2\u023f\u0240\7f\2\2\u0240\u028d\7c\2\2"+ - "\u0241\u0242\7n\2\2\u0242\u0243\7f\2\2\u0243\u028d\7z\2\2\u0244\u0245"+ - "\7n\2\2\u0245\u0246\7c\2\2\u0246\u028d\7z\2\2\u0247\u0248\7v\2\2\u0248"+ - "\u0249\7c\2\2\u0249\u028d\7{\2\2\u024a\u024b\7v\2\2\u024b\u024c\7c\2\2"+ - "\u024c\u028d\7z\2\2\u024d\u024e\7d\2\2\u024e\u024f\7e\2\2\u024f\u028d"+ - "\7u\2\2\u0250\u0251\7e\2\2\u0251\u0252\7n\2\2\u0252\u028d\7x\2\2\u0253"+ - "\u0254\7v\2\2\u0254\u0255\7u\2\2\u0255\u028d\7z\2\2\u0256\u0257\7n\2\2"+ - "\u0257\u0258\7c\2\2\u0258\u028d\7u\2\2\u0259\u025a\7e\2\2\u025a\u025b"+ - "\7r\2\2\u025b\u028d\7{\2\2\u025c\u025d\7e\2\2\u025d\u025e\7o\2\2\u025e"+ - "\u028d\7r\2\2\u025f\u0260\7e\2\2\u0260\u0261\7r\2\2\u0261\u028d\7z\2\2"+ - "\u0262\u0263\7f\2\2\u0263\u0264\7e\2\2\u0264\u028d\7r\2\2\u0265\u0266"+ - "\7f\2\2\u0266\u0267\7g\2\2\u0267\u028d\7e\2\2\u0268\u0269\7k\2\2\u0269"+ - "\u026a\7p\2\2\u026a\u028d\7e\2\2\u026b\u026c\7c\2\2\u026c\u026d\7z\2\2"+ - "\u026d\u028d\7u\2\2\u026e\u026f\7d\2\2\u026f\u0270\7p\2\2\u0270\u028d"+ - "\7g\2\2\u0271\u0272\7e\2\2\u0272\u0273\7n\2\2\u0273\u028d\7f\2\2\u0274"+ - "\u0275\7u\2\2\u0275\u0276\7d\2\2\u0276\u028d\7e\2\2\u0277\u0278\7k\2\2"+ - "\u0278\u0279\7u\2\2\u0279\u028d\7e\2\2\u027a\u027b\7k\2\2\u027b\u027c"+ - "\7p\2\2\u027c\u028d\7z\2\2\u027d\u027e\7d\2\2\u027e\u027f\7g\2\2\u027f"+ - "\u028d\7s\2\2\u0280\u0281\7u\2\2\u0281\u0282\7g\2\2\u0282\u028d\7f\2\2"+ - "\u0283\u0284\7f\2\2\u0284\u0285\7g\2\2\u0285\u028d\7z\2\2\u0286\u0287"+ - "\7k\2\2\u0287\u0288\7p\2\2\u0288\u028d\7{\2\2\u0289\u028a\7t\2\2\u028a"+ - "\u028b\7q\2\2\u028b\u028d\7t\2\2\u028c\u01ae\3\2\2\2\u028c\u01b1\3\2\2"+ - "\2\u028c\u01b4\3\2\2\2\u028c\u01b7\3\2\2\2\u028c\u01ba\3\2\2\2\u028c\u01bd"+ - "\3\2\2\2\u028c\u01c0\3\2\2\2\u028c\u01c3\3\2\2\2\u028c\u01c6\3\2\2\2\u028c"+ - "\u01c9\3\2\2\2\u028c\u01cc\3\2\2\2\u028c\u01cf\3\2\2\2\u028c\u01d2\3\2"+ - "\2\2\u028c\u01d5\3\2\2\2\u028c\u01d8\3\2\2\2\u028c\u01db\3\2\2\2\u028c"+ - "\u01de\3\2\2\2\u028c\u01e1\3\2\2\2\u028c\u01e4\3\2\2\2\u028c\u01e7\3\2"+ - "\2\2\u028c\u01ea\3\2\2\2\u028c\u01ed\3\2\2\2\u028c\u01f0\3\2\2\2\u028c"+ - "\u01f3\3\2\2\2\u028c\u01f6\3\2\2\2\u028c\u01f9\3\2\2\2\u028c\u01fc\3\2"+ - "\2\2\u028c\u01ff\3\2\2\2\u028c\u0202\3\2\2\2\u028c\u0205\3\2\2\2\u028c"+ - "\u0208\3\2\2\2\u028c\u020b\3\2\2\2\u028c\u020e\3\2\2\2\u028c\u0211\3\2"+ - "\2\2\u028c\u0214\3\2\2\2\u028c\u0217\3\2\2\2\u028c\u021a\3\2\2\2\u028c"+ - "\u021d\3\2\2\2\u028c\u0220\3\2\2\2\u028c\u0223\3\2\2\2\u028c\u0226\3\2"+ - "\2\2\u028c\u0229\3\2\2\2\u028c\u022c\3\2\2\2\u028c\u022f\3\2\2\2\u028c"+ - "\u0232\3\2\2\2\u028c\u0235\3\2\2\2\u028c\u0238\3\2\2\2\u028c\u023b\3\2"+ - "\2\2\u028c\u023e\3\2\2\2\u028c\u0241\3\2\2\2\u028c\u0244\3\2\2\2\u028c"+ - "\u0247\3\2\2\2\u028c\u024a\3\2\2\2\u028c\u024d\3\2\2\2\u028c\u0250\3\2"+ - "\2\2\u028c\u0253\3\2\2\2\u028c\u0256\3\2\2\2\u028c\u0259\3\2\2\2\u028c"+ - "\u025c\3\2\2\2\u028c\u025f\3\2\2\2\u028c\u0262\3\2\2\2\u028c\u0265\3\2"+ - "\2\2\u028c\u0268\3\2\2\2\u028c\u026b\3\2\2\2\u028c\u026e\3\2\2\2\u028c"+ - "\u0271\3\2\2\2\u028c\u0274\3\2\2\2\u028c\u0277\3\2\2\2\u028c\u027a\3\2"+ - "\2\2\u028c\u027d\3\2\2\2\u028c\u0280\3\2\2\2\u028c\u0283\3\2\2\2\u028c"+ - "\u0286\3\2\2\2\u028c\u0289\3\2\2\2\u028d\u0088\3\2\2\2\u028e\u028f\7}"+ - "\2\2\u028f\u0290\7}\2\2\u0290\u0294\3\2\2\2\u0291\u0293\13\2\2\2\u0292"+ - "\u0291\3\2\2\2\u0293\u0296\3\2\2\2\u0294\u0295\3\2\2\2\u0294\u0292\3\2"+ - "\2\2\u0295\u0297\3\2\2\2\u0296\u0294\3\2\2\2\u0297\u0298\7\177\2\2\u0298"+ - "\u0299\7\177\2\2\u0299\u008a\3\2\2\2\u029a\u029b\7d\2\2\u029b\u029c\7"+ - "{\2\2\u029c\u029d\7v\2\2\u029d\u02b0\7g\2\2\u029e\u029f\7y\2\2\u029f\u02a0"+ - "\7q\2\2\u02a0\u02a1\7t\2\2\u02a1\u02b0\7f\2\2\u02a2\u02a3\7f\2\2\u02a3"+ - "\u02a4\7y\2\2\u02a4\u02a5\7q\2\2\u02a5\u02a6\7t\2\2\u02a6\u02b0\7f\2\2"+ - "\u02a7\u02a8\7d\2\2\u02a8\u02a9\7q\2\2\u02a9\u02aa\7q\2\2\u02aa\u02b0"+ - "\7n\2\2\u02ab\u02ac\7x\2\2\u02ac\u02ad\7q\2\2\u02ad\u02ae\7k\2\2\u02ae"+ - "\u02b0\7f\2\2\u02af\u029a\3\2\2\2\u02af\u029e\3\2\2\2\u02af\u02a2\3\2"+ - "\2\2\u02af\u02a7\3\2\2\2\u02af\u02ab\3\2\2\2\u02b0\u008c\3\2\2\2\u02b1"+ - "\u02b7\7$\2\2\u02b2\u02b3\7^\2\2\u02b3\u02b6\7$\2\2\u02b4\u02b6\n\2\2"+ - "\2\u02b5\u02b2\3\2\2\2\u02b5\u02b4\3\2\2\2\u02b6\u02b9\3\2\2\2\u02b7\u02b5"+ - "\3\2\2\2\u02b7\u02b8\3\2\2\2\u02b8\u02ba\3\2\2\2\u02b9\u02b7\3\2\2\2\u02ba"+ - "\u02bb\7$\2\2\u02bb\u008e\3\2\2\2\u02bc\u02c0\7)\2\2\u02bd\u02be\7^\2"+ - "\2\u02be\u02c1\7)\2\2\u02bf\u02c1\n\3\2\2\u02c0\u02bd\3\2\2\2\u02c0\u02bf"+ - "\3\2\2\2\u02c1\u02c2\3\2\2\2\u02c2\u02c3\7)\2\2\u02c3\u0090\3\2\2\2\u02c4"+ - "\u02c5\7v\2\2\u02c5\u02c6\7t\2\2\u02c6\u02c7\7w\2\2\u02c7\u02ce\7g\2\2"+ - "\u02c8\u02c9\7h\2\2\u02c9\u02ca\7c\2\2\u02ca\u02cb\7n\2\2\u02cb\u02cc"+ - "\7u\2\2\u02cc\u02ce\7g\2\2\u02cd\u02c4\3\2\2\2\u02cd\u02c8\3\2\2\2\u02ce"+ - "\u0092\3\2\2\2\u02cf\u02d2\5\u0095K\2\u02d0\u02d2\5\u009dO\2\u02d1\u02cf"+ - "\3\2\2\2\u02d1\u02d0\3\2\2\2\u02d2\u0094\3\2\2\2\u02d3\u02d7\5\u0097L"+ - "\2\u02d4\u02d7\5\u0099M\2\u02d5\u02d7\5\u009bN\2\u02d6\u02d3\3\2\2\2\u02d6"+ - "\u02d4\3\2\2\2\u02d6\u02d5\3\2\2\2\u02d7\u0096\3\2\2\2\u02d8\u02de\7\'"+ - "\2\2\u02d9\u02da\7\62\2\2\u02da\u02de\7d\2\2\u02db\u02dc\7\62\2\2\u02dc"+ - "\u02de\7D\2\2\u02dd\u02d8\3\2\2\2\u02dd\u02d9\3\2\2\2\u02dd\u02db\3\2"+ - "\2\2\u02de\u02e2\3\2\2\2\u02df\u02e1\5\u00a5S\2\u02e0\u02df\3\2\2\2\u02e1"+ - "\u02e4\3\2\2\2\u02e2\u02e0\3\2\2\2\u02e2\u02e3\3\2\2\2\u02e3\u02e5\3\2"+ - "\2\2\u02e4\u02e2\3\2\2\2\u02e5\u02e7\7\60\2\2\u02e6\u02e8\5\u00a5S\2\u02e7"+ - "\u02e6\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02e7\3\2\2\2\u02e9\u02ea\3\2"+ - "\2\2\u02ea\u0098\3\2\2\2\u02eb\u02ed\5\u00a7T\2\u02ec\u02eb\3\2\2\2\u02ed"+ - "\u02f0\3\2\2\2\u02ee\u02ec\3\2\2\2\u02ee\u02ef\3\2\2\2\u02ef\u02f1\3\2"+ - "\2\2\u02f0\u02ee\3\2\2\2\u02f1\u02f3\7\60\2\2\u02f2\u02f4\5\u00a7T\2\u02f3"+ - "\u02f2\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5\u02f3\3\2\2\2\u02f5\u02f6\3\2"+ - "\2\2\u02f6\u009a\3\2\2\2\u02f7\u02fd\7&\2\2\u02f8\u02f9\7\62\2\2\u02f9"+ - "\u02fd\7z\2\2\u02fa\u02fb\7\62\2\2\u02fb\u02fd\7Z\2\2\u02fc\u02f7\3\2"+ - "\2\2\u02fc\u02f8\3\2\2\2\u02fc\u02fa\3\2\2\2\u02fd\u0301\3\2\2\2\u02fe"+ - "\u0300\5\u00a9U\2\u02ff\u02fe\3\2\2\2\u0300\u0303\3\2\2\2\u0301\u02ff"+ - "\3\2\2\2\u0301\u0302\3\2\2\2\u0302\u0304\3\2\2\2\u0303\u0301\3\2\2\2\u0304"+ - "\u0306\7\60\2\2\u0305\u0307\5\u00a9U\2\u0306\u0305\3\2\2\2\u0307\u0308"+ - "\3\2\2\2\u0308\u0306\3\2\2\2\u0308\u0309\3\2\2\2\u0309\u009c\3\2\2\2\u030a"+ - "\u030e\5\u00a1Q\2\u030b\u030e\5\u00a3R\2\u030c\u030e\5\u009fP\2\u030d"+ - "\u030a\3\2\2\2\u030d\u030b\3\2\2\2\u030d\u030c\3\2\2\2\u030e\u009e\3\2"+ - "\2\2\u030f\u0310\7\62\2\2\u0310\u0312\t\4\2\2\u0311\u0313\5\u00a5S\2\u0312"+ - "\u0311\3\2\2\2\u0313\u0314\3\2\2\2\u0314\u0312\3\2\2\2\u0314\u0315\3\2"+ - "\2\2\u0315\u031d\3\2\2\2\u0316\u0318\7\'\2\2\u0317\u0319\5\u00a5S\2\u0318"+ - "\u0317\3\2\2\2\u0319\u031a\3\2\2\2\u031a\u0318\3\2\2\2\u031a\u031b\3\2"+ - "\2\2\u031b\u031d\3\2\2\2\u031c\u030f\3\2\2\2\u031c\u0316\3\2\2\2\u031d"+ - "\u00a0\3\2\2\2\u031e\u0320\5\u00a7T\2\u031f\u031e\3\2\2\2\u0320\u0321"+ - "\3\2\2\2\u0321\u031f\3\2\2\2\u0321\u0322\3\2\2\2\u0322\u00a2\3\2\2\2\u0323"+ - "\u0329\7&\2\2\u0324\u0325\7\62\2\2\u0325\u0329\7z\2\2\u0326\u0327\7\62"+ - "\2\2\u0327\u0329\7Z\2\2\u0328\u0323\3\2\2\2\u0328\u0324\3\2\2\2\u0328"+ - "\u0326\3\2\2\2\u0329\u032b\3\2\2\2\u032a\u032c\5\u00a9U\2\u032b\u032a"+ - "\3\2\2\2\u032c\u032d\3\2\2\2\u032d\u032b\3\2\2\2\u032d\u032e\3\2\2\2\u032e"+ - "\u00a4\3\2\2\2\u032f\u0330\t\5\2\2\u0330\u00a6\3\2\2\2\u0331\u0332\t\6"+ - "\2\2\u0332\u00a8\3\2\2\2\u0333\u0334\t\7\2\2\u0334\u00aa\3\2\2\2\u0335"+ - "\u0339\5\u00adW\2\u0336\u0338\5\u00afX\2\u0337\u0336\3\2\2\2\u0338\u033b"+ - "\3\2\2\2\u0339\u0337\3\2\2\2\u0339\u033a\3\2\2\2\u033a\u00ac\3\2\2\2\u033b"+ - "\u0339\3\2\2\2\u033c\u033d\t\b\2\2\u033d\u00ae\3\2\2\2\u033e\u033f\t\t"+ - "\2\2\u033f\u00b0\3\2\2\2\u0340\u0344\7#\2\2\u0341\u0343\5\u00afX\2\u0342"+ - "\u0341\3\2\2\2\u0343\u0346\3\2\2\2\u0344\u0342\3\2\2\2\u0344\u0345\3\2"+ - "\2\2\u0345\u0348\3\2\2\2\u0346\u0344\3\2\2\2\u0347\u0349\t\n\2\2\u0348"+ - "\u0347\3\2\2\2\u0349\u034a\3\2\2\2\u034a\u0348\3\2\2\2\u034a\u034b\3\2"+ - "\2\2\u034b\u00b2\3\2\2\2\u034c\u034e\t\13\2\2\u034d\u034c\3\2\2\2\u034e"+ - "\u034f\3\2\2\2\u034f\u034d\3\2\2\2\u034f\u0350\3\2\2\2\u0350\u0351\3\2"+ - "\2\2\u0351\u0352\bZ\2\2\u0352\u00b4\3\2\2\2\u0353\u0354\7\61\2\2\u0354"+ - "\u0355\7\61\2\2\u0355\u0359\3\2\2\2\u0356\u0358\n\f\2\2\u0357\u0356\3"+ - "\2\2\2\u0358\u035b\3\2\2\2\u0359\u0357\3\2\2\2\u0359\u035a\3\2\2\2\u035a"+ - "\u035c\3\2\2\2\u035b\u0359\3\2\2\2\u035c\u035d\b[\2\2\u035d\u00b6\3\2"+ - "\2\2\u035e\u035f\7\61\2\2\u035f\u0360\7,\2\2\u0360\u0364\3\2\2\2\u0361"+ - "\u0363\13\2\2\2\u0362\u0361\3\2\2\2\u0363\u0366\3\2\2\2\u0364\u0365\3"+ - "\2\2\2\u0364\u0362\3\2\2\2\u0365\u0367\3\2\2\2\u0366\u0364\3\2\2\2\u0367"+ - "\u0368\7,\2\2\u0368\u0369\7\61\2\2\u0369\u036a\3\2\2\2\u036a\u036b\b\\"+ - "\2\2\u036b\u00b8\3\2\2\2!\2\u028c\u0294\u02af\u02b5\u02b7\u02c0\u02cd"+ - "\u02d1\u02d6\u02dd\u02e2\u02e9\u02ee\u02f5\u02fc\u0301\u0308\u030d\u0314"+ - "\u031a\u031c\u0321\u0328\u032d\u0339\u0344\u034a\u034f\u0359\u0364\3\b"+ - "\2\2"; + "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\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\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\13\3\13\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\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16"+ + "\3\16\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\21\3\21\3\21\3\22\3\22\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\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25"+ + "\3\25\3\26\3\26\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\27\3\27\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31"+ + "\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\35"+ + "\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\37\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/\3/\3\60\3\60\3\61\3"+ + "\61\3\61\3\62\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\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\3B\3B\3B\3C\3C\3C\3C\3C"+ + "\3C\3D\3D\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E"+ + "\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\5E\u0299\nE\3F"+ + "\3F\3F\3F\7F\u029f\nF\fF\16F\u02a2\13F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3"+ + "G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\5G\u02bc\nG\3H\3H\3H\3H\7H\u02c2"+ + "\nH\fH\16H\u02c5\13H\3H\3H\3I\3I\3I\3I\5I\u02cd\nI\3I\3I\3J\3J\3J\3J\3"+ + "J\3J\3J\3J\3J\5J\u02da\nJ\3K\3K\5K\u02de\nK\3L\3L\3L\5L\u02e3\nL\3M\3"+ + "M\3M\3M\3M\5M\u02ea\nM\3M\7M\u02ed\nM\fM\16M\u02f0\13M\3M\3M\6M\u02f4"+ + "\nM\rM\16M\u02f5\3N\7N\u02f9\nN\fN\16N\u02fc\13N\3N\3N\6N\u0300\nN\rN"+ + "\16N\u0301\3O\3O\3O\3O\3O\5O\u0309\nO\3O\7O\u030c\nO\fO\16O\u030f\13O"+ + "\3O\3O\6O\u0313\nO\rO\16O\u0314\3P\3P\3P\5P\u031a\nP\3Q\3Q\3Q\6Q\u031f"+ + "\nQ\rQ\16Q\u0320\3Q\3Q\6Q\u0325\nQ\rQ\16Q\u0326\5Q\u0329\nQ\3R\6R\u032c"+ + "\nR\rR\16R\u032d\3S\3S\3S\3S\3S\5S\u0335\nS\3S\6S\u0338\nS\rS\16S\u0339"+ + "\3T\3T\3U\3U\3V\3V\3W\3W\7W\u0344\nW\fW\16W\u0347\13W\3X\3X\3Y\3Y\3Z\3"+ + "Z\7Z\u034f\nZ\fZ\16Z\u0352\13Z\3Z\6Z\u0355\nZ\rZ\16Z\u0356\3[\6[\u035a"+ + "\n[\r[\16[\u035b\3[\3[\3\\\3\\\3\\\3\\\7\\\u0364\n\\\f\\\16\\\u0367\13"+ + "\\\3\\\3\\\3]\3]\3]\3]\7]\u036f\n]\f]\16]\u0372\13]\3]\3]\3]\3]\3]\4\u02a0"+ + "\u0370\2^\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\65"+ + "i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b"+ + "G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009f"+ + "Q\u00a1R\u00a3S\u00a5T\u00a7\2\u00a9\2\u00ab\2\u00adU\u00af\2\u00b1\2"+ + "\u00b3V\u00b5W\u00b7X\u00b9Y\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--//\5\2\13\f\17\17\"\"\4\2"+ + "\f\f\17\17\2\u03e0\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\u00ad\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9"+ + "\3\2\2\2\3\u00bb\3\2\2\2\5\u00c2\3\2\2\2\7\u00c4\3\2\2\2\t\u00c6\3\2\2"+ + "\2\13\u00c8\3\2\2\2\r\u00ca\3\2\2\2\17\u00cc\3\2\2\2\21\u00ce\3\2\2\2"+ + "\23\u00d6\3\2\2\2\25\u00d8\3\2\2\2\27\u00e1\3\2\2\2\31\u00e9\3\2\2\2\33"+ + "\u00ef\3\2\2\2\35\u00f1\3\2\2\2\37\u00f7\3\2\2\2!\u00fe\3\2\2\2#\u0101"+ + "\3\2\2\2%\u0108\3\2\2\2\'\u010e\3\2\2\2)\u0115\3\2\2\2+\u011b\3\2\2\2"+ + "-\u0124\3\2\2\2/\u012e\3\2\2\2\61\u0131\3\2\2\2\63\u0136\3\2\2\2\65\u013c"+ + "\3\2\2\2\67\u013f\3\2\2\29\u0143\3\2\2\2;\u014a\3\2\2\2=\u014e\3\2\2\2"+ + "?\u0151\3\2\2\2A\u0158\3\2\2\2C\u015a\3\2\2\2E\u015c\3\2\2\2G\u015e\3"+ + "\2\2\2I\u0161\3\2\2\2K\u0164\3\2\2\2M\u0166\3\2\2\2O\u0168\3\2\2\2Q\u016a"+ + "\3\2\2\2S\u016c\3\2\2\2U\u016e\3\2\2\2W\u0171\3\2\2\2Y\u0174\3\2\2\2["+ + "\u0176\3\2\2\2]\u0178\3\2\2\2_\u017a\3\2\2\2a\u017c\3\2\2\2c\u017f\3\2"+ + "\2\2e\u0182\3\2\2\2g\u0185\3\2\2\2i\u0188\3\2\2\2k\u018a\3\2\2\2m\u018c"+ + "\3\2\2\2o\u018f\3\2\2\2q\u0192\3\2\2\2s\u0195\3\2\2\2u\u0198\3\2\2\2w"+ + "\u019b\3\2\2\2y\u019e\3\2\2\2{\u01a1\3\2\2\2}\u01a5\3\2\2\2\177\u01a9"+ + "\3\2\2\2\u0081\u01ac\3\2\2\2\u0083\u01af\3\2\2\2\u0085\u01b2\3\2\2\2\u0087"+ + "\u01b8\3\2\2\2\u0089\u0298\3\2\2\2\u008b\u029a\3\2\2\2\u008d\u02bb\3\2"+ + "\2\2\u008f\u02bd\3\2\2\2\u0091\u02c8\3\2\2\2\u0093\u02d9\3\2\2\2\u0095"+ + "\u02dd\3\2\2\2\u0097\u02e2\3\2\2\2\u0099\u02e9\3\2\2\2\u009b\u02fa\3\2"+ + "\2\2\u009d\u0308\3\2\2\2\u009f\u0319\3\2\2\2\u00a1\u0328\3\2\2\2\u00a3"+ + "\u032b\3\2\2\2\u00a5\u0334\3\2\2\2\u00a7\u033b\3\2\2\2\u00a9\u033d\3\2"+ + "\2\2\u00ab\u033f\3\2\2\2\u00ad\u0341\3\2\2\2\u00af\u0348\3\2\2\2\u00b1"+ + "\u034a\3\2\2\2\u00b3\u034c\3\2\2\2\u00b5\u0359\3\2\2\2\u00b7\u035f\3\2"+ + "\2\2\u00b9\u036a\3\2\2\2\u00bb\u00bc\7k\2\2\u00bc\u00bd\7o\2\2\u00bd\u00be"+ + "\7r\2\2\u00be\u00bf\7q\2\2\u00bf\u00c0\7t\2\2\u00c0\u00c1\7v\2\2\u00c1"+ + "\4\3\2\2\2\u00c2\u00c3\7?\2\2\u00c3\6\3\2\2\2\u00c4\u00c5\7=\2\2\u00c5"+ + "\b\3\2\2\2\u00c6\u00c7\7*\2\2\u00c7\n\3\2\2\2\u00c8\u00c9\7+\2\2\u00c9"+ + "\f\3\2\2\2\u00ca\u00cb\7}\2\2\u00cb\16\3\2\2\2\u00cc\u00cd\7\177\2\2\u00cd"+ + "\20\3\2\2\2\u00ce\u00cf\7m\2\2\u00cf\u00d0\7k\2\2\u00d0\u00d1\7e\2\2\u00d1"+ + "\u00d2\7m\2\2\u00d2\u00d3\7c\2\2\u00d3\u00d4\7u\2\2\u00d4\u00d5\7o\2\2"+ + "\u00d5\22\3\2\2\2\u00d6\u00d7\7.\2\2\u00d7\24\3\2\2\2\u00d8\u00d9\7t\2"+ + "\2\u00d9\u00da\7g\2\2\u00da\u00db\7u\2\2\u00db\u00dc\7q\2\2\u00dc\u00dd"+ + "\7w\2\2\u00dd\u00de\7t\2\2\u00de\u00df\7e\2\2\u00df\u00e0\7g\2\2\u00e0"+ + "\26\3\2\2\2\u00e1\u00e2\7e\2\2\u00e2\u00e3\7n\2\2\u00e3\u00e4\7q\2\2\u00e4"+ + "\u00e5\7d\2\2\u00e5\u00e6\7d\2\2\u00e6\u00e7\7g\2\2\u00e7\u00e8\7t\2\2"+ + "\u00e8\30\3\2\2\2\u00e9\u00ea\7r\2\2\u00ea\u00eb\7c\2\2\u00eb\u00ec\7"+ + "t\2\2\u00ec\u00ed\7c\2\2\u00ed\u00ee\7o\2\2\u00ee\32\3\2\2\2\u00ef\u00f0"+ + "\7<\2\2\u00f0\34\3\2\2\2\u00f1\u00f2\7d\2\2\u00f2\u00f3\7{\2\2\u00f3\u00f4"+ + "\7v\2\2\u00f4\u00f5\7g\2\2\u00f5\u00f6\7u\2\2\u00f6\36\3\2\2\2\u00f7\u00f8"+ + "\7e\2\2\u00f8\u00f9\7{\2\2\u00f9\u00fa\7e\2\2\u00fa\u00fb\7n\2\2\u00fb"+ + "\u00fc\7g\2\2\u00fc\u00fd\7u\2\2\u00fd \3\2\2\2\u00fe\u00ff\7r\2\2\u00ff"+ + "\u0100\7e\2\2\u0100\"\3\2\2\2\u0101\u0102\7k\2\2\u0102\u0103\7p\2\2\u0103"+ + "\u0104\7n\2\2\u0104\u0105\7k\2\2\u0105\u0106\7p\2\2\u0106\u0107\7g\2\2"+ + "\u0107$\3\2\2\2\u0108\u0109\7e\2\2\u0109\u010a\7q\2\2\u010a\u010b\7p\2"+ + "\2\u010b\u010c\7u\2\2\u010c\u010d\7v\2\2\u010d&\3\2\2\2\u010e\u010f\7"+ + "g\2\2\u010f\u0110\7z\2\2\u0110\u0111\7v\2\2\u0111\u0112\7g\2\2\u0112\u0113"+ + "\7t\2\2\u0113\u0114\7p\2\2\u0114(\3\2\2\2\u0115\u0116\7c\2\2\u0116\u0117"+ + "\7n\2\2\u0117\u0118\7k\2\2\u0118\u0119\7i\2\2\u0119\u011a\7p\2\2\u011a"+ + "*\3\2\2\2\u011b\u011c\7t\2\2\u011c\u011d\7g\2\2\u011d\u011e\7i\2\2\u011e"+ + "\u011f\7k\2\2\u011f\u0120\7u\2\2\u0120\u0121\7v\2\2\u0121\u0122\7g\2\2"+ + "\u0122\u0123\7t\2\2\u0123,\3\2\2\2\u0124\u0125\7k\2\2\u0125\u0126\7p\2"+ + "\2\u0126\u0127\7v\2\2\u0127\u0128\7g\2\2\u0128\u0129\7t\2\2\u0129\u012a"+ + "\7t\2\2\u012a\u012b\7w\2\2\u012b\u012c\7r\2\2\u012c\u012d\7v\2\2\u012d"+ + ".\3\2\2\2\u012e\u012f\7k\2\2\u012f\u0130\7h\2\2\u0130\60\3\2\2\2\u0131"+ + "\u0132\7g\2\2\u0132\u0133\7n\2\2\u0133\u0134\7u\2\2\u0134\u0135\7g\2\2"+ + "\u0135\62\3\2\2\2\u0136\u0137\7y\2\2\u0137\u0138\7j\2\2\u0138\u0139\7"+ + "k\2\2\u0139\u013a\7n\2\2\u013a\u013b\7g\2\2\u013b\64\3\2\2\2\u013c\u013d"+ + "\7f\2\2\u013d\u013e\7q\2\2\u013e\66\3\2\2\2\u013f\u0140\7h\2\2\u0140\u0141"+ + "\7q\2\2\u0141\u0142\7t\2\2\u01428\3\2\2\2\u0143\u0144\7t\2\2\u0144\u0145"+ + "\7g\2\2\u0145\u0146\7v\2\2\u0146\u0147\7w\2\2\u0147\u0148\7t\2\2\u0148"+ + "\u0149\7p\2\2\u0149:\3\2\2\2\u014a\u014b\7c\2\2\u014b\u014c\7u\2\2\u014c"+ + "\u014d\7o\2\2\u014d<\3\2\2\2\u014e\u014f\7\60\2\2\u014f\u0150\7\60\2\2"+ + "\u0150>\3\2\2\2\u0151\u0152\7u\2\2\u0152\u0153\7k\2\2\u0153\u0154\7i\2"+ + "\2\u0154\u0155\7p\2\2\u0155\u0156\7g\2\2\u0156\u0157\7f\2\2\u0157@\3\2"+ + "\2\2\u0158\u0159\7,\2\2\u0159B\3\2\2\2\u015a\u015b\7]\2\2\u015bD\3\2\2"+ + "\2\u015c\u015d\7_\2\2\u015dF\3\2\2\2\u015e\u015f\7/\2\2\u015f\u0160\7"+ + "/\2\2\u0160H\3\2\2\2\u0161\u0162\7-\2\2\u0162\u0163\7-\2\2\u0163J\3\2"+ + "\2\2\u0164\u0165\7-\2\2\u0165L\3\2\2\2\u0166\u0167\7/\2\2\u0167N\3\2\2"+ + "\2\u0168\u0169\7#\2\2\u0169P\3\2\2\2\u016a\u016b\7(\2\2\u016bR\3\2\2\2"+ + "\u016c\u016d\7\u0080\2\2\u016dT\3\2\2\2\u016e\u016f\7@\2\2\u016f\u0170"+ + "\7@\2\2\u0170V\3\2\2\2\u0171\u0172\7>\2\2\u0172\u0173\7>\2\2\u0173X\3"+ + "\2\2\2\u0174\u0175\7\61\2\2\u0175Z\3\2\2\2\u0176\u0177\7\'\2\2\u0177\\"+ + "\3\2\2\2\u0178\u0179\7>\2\2\u0179^\3\2\2\2\u017a\u017b\7@\2\2\u017b`\3"+ + "\2\2\2\u017c\u017d\7?\2\2\u017d\u017e\7?\2\2\u017eb\3\2\2\2\u017f\u0180"+ + "\7#\2\2\u0180\u0181\7?\2\2\u0181d\3\2\2\2\u0182\u0183\7>\2\2\u0183\u0184"+ + "\7?\2\2\u0184f\3\2\2\2\u0185\u0186\7@\2\2\u0186\u0187\7?\2\2\u0187h\3"+ + "\2\2\2\u0188\u0189\7`\2\2\u0189j\3\2\2\2\u018a\u018b\7~\2\2\u018bl\3\2"+ + "\2\2\u018c\u018d\7(\2\2\u018d\u018e\7(\2\2\u018en\3\2\2\2\u018f\u0190"+ + "\7~\2\2\u0190\u0191\7~\2\2\u0191p\3\2\2\2\u0192\u0193\7-\2\2\u0193\u0194"+ + "\7?\2\2\u0194r\3\2\2\2\u0195\u0196\7/\2\2\u0196\u0197\7?\2\2\u0197t\3"+ + "\2\2\2\u0198\u0199\7,\2\2\u0199\u019a\7?\2\2\u019av\3\2\2\2\u019b\u019c"+ + "\7\61\2\2\u019c\u019d\7?\2\2\u019dx\3\2\2\2\u019e\u019f\7\'\2\2\u019f"+ + "\u01a0\7?\2\2\u01a0z\3\2\2\2\u01a1\u01a2\7>\2\2\u01a2\u01a3\7>\2\2\u01a3"+ + "\u01a4\7?\2\2\u01a4|\3\2\2\2\u01a5\u01a6\7@\2\2\u01a6\u01a7\7@\2\2\u01a7"+ + "\u01a8\7?\2\2\u01a8~\3\2\2\2\u01a9\u01aa\7(\2\2\u01aa\u01ab\7?\2\2\u01ab"+ + "\u0080\3\2\2\2\u01ac\u01ad\7~\2\2\u01ad\u01ae\7?\2\2\u01ae\u0082\3\2\2"+ + "\2\u01af\u01b0\7`\2\2\u01b0\u01b1\7?\2\2\u01b1\u0084\3\2\2\2\u01b2\u01b3"+ + "\7\60\2\2\u01b3\u01b4\7d\2\2\u01b4\u01b5\7{\2\2\u01b5\u01b6\7v\2\2\u01b6"+ + "\u01b7\7g\2\2\u01b7\u0086\3\2\2\2\u01b8\u01b9\7%\2\2\u01b9\u0088\3\2\2"+ + "\2\u01ba\u01bb\7d\2\2\u01bb\u01bc\7t\2\2\u01bc\u0299\7m\2\2\u01bd\u01be"+ + "\7q\2\2\u01be\u01bf\7t\2\2\u01bf\u0299\7c\2\2\u01c0\u01c1\7m\2\2\u01c1"+ + "\u01c2\7k\2\2\u01c2\u0299\7n\2\2\u01c3\u01c4\7u\2\2\u01c4\u01c5\7n\2\2"+ + "\u01c5\u0299\7q\2\2\u01c6\u01c7\7p\2\2\u01c7\u01c8\7q\2\2\u01c8\u0299"+ + "\7r\2\2\u01c9\u01ca\7c\2\2\u01ca\u01cb\7u\2\2\u01cb\u0299\7n\2\2\u01cc"+ + "\u01cd\7r\2\2\u01cd\u01ce\7j\2\2\u01ce\u0299\7r\2\2\u01cf\u01d0\7c\2\2"+ + "\u01d0\u01d1\7p\2\2\u01d1\u0299\7e\2\2\u01d2\u01d3\7d\2\2\u01d3\u01d4"+ + "\7r\2\2\u01d4\u0299\7n\2\2\u01d5\u01d6\7e\2\2\u01d6\u01d7\7n\2\2\u01d7"+ + "\u0299\7e\2\2\u01d8\u01d9\7l\2\2\u01d9\u01da\7u\2\2\u01da\u0299\7t\2\2"+ + "\u01db\u01dc\7c\2\2\u01dc\u01dd\7p\2\2\u01dd\u0299\7f\2\2\u01de\u01df"+ + "\7t\2\2\u01df\u01e0\7n\2\2\u01e0\u0299\7c\2\2\u01e1\u01e2\7d\2\2\u01e2"+ + "\u01e3\7k\2\2\u01e3\u0299\7v\2\2\u01e4\u01e5\7t\2\2\u01e5\u01e6\7q\2\2"+ + "\u01e6\u0299\7n\2\2\u01e7\u01e8\7r\2\2\u01e8\u01e9\7n\2\2\u01e9\u0299"+ + "\7c\2\2\u01ea\u01eb\7r\2\2\u01eb\u01ec\7n\2\2\u01ec\u0299\7r\2\2\u01ed"+ + "\u01ee\7d\2\2\u01ee\u01ef\7o\2\2\u01ef\u0299\7k\2\2\u01f0\u01f1\7u\2\2"+ + "\u01f1\u01f2\7g\2\2\u01f2\u0299\7e\2\2\u01f3\u01f4\7t\2\2\u01f4\u01f5"+ + "\7v\2\2\u01f5\u0299\7k\2\2\u01f6\u01f7\7g\2\2\u01f7\u01f8\7q\2\2\u01f8"+ + "\u0299\7t\2\2\u01f9\u01fa\7u\2\2\u01fa\u01fb\7t\2\2\u01fb\u0299\7g\2\2"+ + "\u01fc\u01fd\7n\2\2\u01fd\u01fe\7u\2\2\u01fe\u0299\7t\2\2\u01ff\u0200"+ + "\7r\2\2\u0200\u0201\7j\2\2\u0201\u0299\7c\2\2\u0202\u0203\7c\2\2\u0203"+ + "\u0204\7n\2\2\u0204\u0299\7t\2\2\u0205\u0206\7l\2\2\u0206\u0207\7o\2\2"+ + "\u0207\u0299\7r\2\2\u0208\u0209\7d\2\2\u0209\u020a\7x\2\2\u020a\u0299"+ + "\7e\2\2\u020b\u020c\7e\2\2\u020c\u020d\7n\2\2\u020d\u0299\7k\2\2\u020e"+ + "\u020f\7t\2\2\u020f\u0210\7v\2\2\u0210\u0299\7u\2\2\u0211\u0212\7c\2\2"+ + "\u0212\u0213\7f\2\2\u0213\u0299\7e\2\2\u0214\u0215\7t\2\2\u0215\u0216"+ + "\7t\2\2\u0216\u0299\7c\2\2\u0217\u0218\7d\2\2\u0218\u0219\7x\2\2\u0219"+ + "\u0299\7u\2\2\u021a\u021b\7u\2\2\u021b\u021c\7g\2\2\u021c\u0299\7k\2\2"+ + "\u021d\u021e\7u\2\2\u021e\u021f\7c\2\2\u021f\u0299\7z\2\2\u0220\u0221"+ + "\7u\2\2\u0221\u0222\7v\2\2\u0222\u0299\7{\2\2\u0223\u0224\7u\2\2\u0224"+ + "\u0225\7v\2\2\u0225\u0299\7c\2\2\u0226\u0227\7u\2\2\u0227\u0228\7v\2\2"+ + "\u0228\u0299\7z\2\2\u0229\u022a\7f\2\2\u022a\u022b\7g\2\2\u022b\u0299"+ + "\7{\2\2\u022c\u022d\7v\2\2\u022d\u022e\7z\2\2\u022e\u0299\7c\2\2\u022f"+ + "\u0230\7z\2\2\u0230\u0231\7c\2\2\u0231\u0299\7c\2\2\u0232\u0233\7d\2\2"+ + "\u0233\u0234\7e\2\2\u0234\u0299\7e\2\2\u0235\u0236\7c\2\2\u0236\u0237"+ + "\7j\2\2\u0237\u0299\7z\2\2\u0238\u0239\7v\2\2\u0239\u023a\7{\2\2\u023a"+ + "\u0299\7c\2\2\u023b\u023c\7v\2\2\u023c\u023d\7z\2\2\u023d\u0299\7u\2\2"+ + "\u023e\u023f\7v\2\2\u023f\u0240\7c\2\2\u0240\u0299\7u\2\2\u0241\u0242"+ + "\7u\2\2\u0242\u0243\7j\2\2\u0243\u0299\7{\2\2\u0244\u0245\7u\2\2\u0245"+ + "\u0246\7j\2\2\u0246\u0299\7z\2\2\u0247\u0248\7n\2\2\u0248\u0249\7f\2\2"+ + "\u0249\u0299\7{\2\2\u024a\u024b\7n\2\2\u024b\u024c\7f\2\2\u024c\u0299"+ + "\7c\2\2\u024d\u024e\7n\2\2\u024e\u024f\7f\2\2\u024f\u0299\7z\2\2\u0250"+ + "\u0251\7n\2\2\u0251\u0252\7c\2\2\u0252\u0299\7z\2\2\u0253\u0254\7v\2\2"+ + "\u0254\u0255\7c\2\2\u0255\u0299\7{\2\2\u0256\u0257\7v\2\2\u0257\u0258"+ + "\7c\2\2\u0258\u0299\7z\2\2\u0259\u025a\7d\2\2\u025a\u025b\7e\2\2\u025b"+ + "\u0299\7u\2\2\u025c\u025d\7e\2\2\u025d\u025e\7n\2\2\u025e\u0299\7x\2\2"+ + "\u025f\u0260\7v\2\2\u0260\u0261\7u\2\2\u0261\u0299\7z\2\2\u0262\u0263"+ + "\7n\2\2\u0263\u0264\7c\2\2\u0264\u0299\7u\2\2\u0265\u0266\7e\2\2\u0266"+ + "\u0267\7r\2\2\u0267\u0299\7{\2\2\u0268\u0269\7e\2\2\u0269\u026a\7o\2\2"+ + "\u026a\u0299\7r\2\2\u026b\u026c\7e\2\2\u026c\u026d\7r\2\2\u026d\u0299"+ + "\7z\2\2\u026e\u026f\7f\2\2\u026f\u0270\7e\2\2\u0270\u0299\7r\2\2\u0271"+ + "\u0272\7f\2\2\u0272\u0273\7g\2\2\u0273\u0299\7e\2\2\u0274\u0275\7k\2\2"+ + "\u0275\u0276\7p\2\2\u0276\u0299\7e\2\2\u0277\u0278\7c\2\2\u0278\u0279"+ + "\7z\2\2\u0279\u0299\7u\2\2\u027a\u027b\7d\2\2\u027b\u027c\7p\2\2\u027c"+ + "\u0299\7g\2\2\u027d\u027e\7e\2\2\u027e\u027f\7n\2\2\u027f\u0299\7f\2\2"+ + "\u0280\u0281\7u\2\2\u0281\u0282\7d\2\2\u0282\u0299\7e\2\2\u0283\u0284"+ + "\7k\2\2\u0284\u0285\7u\2\2\u0285\u0299\7e\2\2\u0286\u0287\7k\2\2\u0287"+ + "\u0288\7p\2\2\u0288\u0299\7z\2\2\u0289\u028a\7d\2\2\u028a\u028b\7g\2\2"+ + "\u028b\u0299\7s\2\2\u028c\u028d\7u\2\2\u028d\u028e\7g\2\2\u028e\u0299"+ + "\7f\2\2\u028f\u0290\7f\2\2\u0290\u0291\7g\2\2\u0291\u0299\7z\2\2\u0292"+ + "\u0293\7k\2\2\u0293\u0294\7p\2\2\u0294\u0299\7{\2\2\u0295\u0296\7t\2\2"+ + "\u0296\u0297\7q\2\2\u0297\u0299\7t\2\2\u0298\u01ba\3\2\2\2\u0298\u01bd"+ + "\3\2\2\2\u0298\u01c0\3\2\2\2\u0298\u01c3\3\2\2\2\u0298\u01c6\3\2\2\2\u0298"+ + "\u01c9\3\2\2\2\u0298\u01cc\3\2\2\2\u0298\u01cf\3\2\2\2\u0298\u01d2\3\2"+ + "\2\2\u0298\u01d5\3\2\2\2\u0298\u01d8\3\2\2\2\u0298\u01db\3\2\2\2\u0298"+ + "\u01de\3\2\2\2\u0298\u01e1\3\2\2\2\u0298\u01e4\3\2\2\2\u0298\u01e7\3\2"+ + "\2\2\u0298\u01ea\3\2\2\2\u0298\u01ed\3\2\2\2\u0298\u01f0\3\2\2\2\u0298"+ + "\u01f3\3\2\2\2\u0298\u01f6\3\2\2\2\u0298\u01f9\3\2\2\2\u0298\u01fc\3\2"+ + "\2\2\u0298\u01ff\3\2\2\2\u0298\u0202\3\2\2\2\u0298\u0205\3\2\2\2\u0298"+ + "\u0208\3\2\2\2\u0298\u020b\3\2\2\2\u0298\u020e\3\2\2\2\u0298\u0211\3\2"+ + "\2\2\u0298\u0214\3\2\2\2\u0298\u0217\3\2\2\2\u0298\u021a\3\2\2\2\u0298"+ + "\u021d\3\2\2\2\u0298\u0220\3\2\2\2\u0298\u0223\3\2\2\2\u0298\u0226\3\2"+ + "\2\2\u0298\u0229\3\2\2\2\u0298\u022c\3\2\2\2\u0298\u022f\3\2\2\2\u0298"+ + "\u0232\3\2\2\2\u0298\u0235\3\2\2\2\u0298\u0238\3\2\2\2\u0298\u023b\3\2"+ + "\2\2\u0298\u023e\3\2\2\2\u0298\u0241\3\2\2\2\u0298\u0244\3\2\2\2\u0298"+ + "\u0247\3\2\2\2\u0298\u024a\3\2\2\2\u0298\u024d\3\2\2\2\u0298\u0250\3\2"+ + "\2\2\u0298\u0253\3\2\2\2\u0298\u0256\3\2\2\2\u0298\u0259\3\2\2\2\u0298"+ + "\u025c\3\2\2\2\u0298\u025f\3\2\2\2\u0298\u0262\3\2\2\2\u0298\u0265\3\2"+ + "\2\2\u0298\u0268\3\2\2\2\u0298\u026b\3\2\2\2\u0298\u026e\3\2\2\2\u0298"+ + "\u0271\3\2\2\2\u0298\u0274\3\2\2\2\u0298\u0277\3\2\2\2\u0298\u027a\3\2"+ + "\2\2\u0298\u027d\3\2\2\2\u0298\u0280\3\2\2\2\u0298\u0283\3\2\2\2\u0298"+ + "\u0286\3\2\2\2\u0298\u0289\3\2\2\2\u0298\u028c\3\2\2\2\u0298\u028f\3\2"+ + "\2\2\u0298\u0292\3\2\2\2\u0298\u0295\3\2\2\2\u0299\u008a\3\2\2\2\u029a"+ + "\u029b\7}\2\2\u029b\u029c\7}\2\2\u029c\u02a0\3\2\2\2\u029d\u029f\13\2"+ + "\2\2\u029e\u029d\3\2\2\2\u029f\u02a2\3\2\2\2\u02a0\u02a1\3\2\2\2\u02a0"+ + "\u029e\3\2\2\2\u02a1\u02a3\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a3\u02a4\7\177"+ + "\2\2\u02a4\u02a5\7\177\2\2\u02a5\u008c\3\2\2\2\u02a6\u02a7\7d\2\2\u02a7"+ + "\u02a8\7{\2\2\u02a8\u02a9\7v\2\2\u02a9\u02bc\7g\2\2\u02aa\u02ab\7y\2\2"+ + "\u02ab\u02ac\7q\2\2\u02ac\u02ad\7t\2\2\u02ad\u02bc\7f\2\2\u02ae\u02af"+ + "\7f\2\2\u02af\u02b0\7y\2\2\u02b0\u02b1\7q\2\2\u02b1\u02b2\7t\2\2\u02b2"+ + "\u02bc\7f\2\2\u02b3\u02b4\7d\2\2\u02b4\u02b5\7q\2\2\u02b5\u02b6\7q\2\2"+ + "\u02b6\u02bc\7n\2\2\u02b7\u02b8\7x\2\2\u02b8\u02b9\7q\2\2\u02b9\u02ba"+ + "\7k\2\2\u02ba\u02bc\7f\2\2\u02bb\u02a6\3\2\2\2\u02bb\u02aa\3\2\2\2\u02bb"+ + "\u02ae\3\2\2\2\u02bb\u02b3\3\2\2\2\u02bb\u02b7\3\2\2\2\u02bc\u008e\3\2"+ + "\2\2\u02bd\u02c3\7$\2\2\u02be\u02bf\7^\2\2\u02bf\u02c2\7$\2\2\u02c0\u02c2"+ + "\n\2\2\2\u02c1\u02be\3\2\2\2\u02c1\u02c0\3\2\2\2\u02c2\u02c5\3\2\2\2\u02c3"+ + "\u02c1\3\2\2\2\u02c3\u02c4\3\2\2\2\u02c4\u02c6\3\2\2\2\u02c5\u02c3\3\2"+ + "\2\2\u02c6\u02c7\7$\2\2\u02c7\u0090\3\2\2\2\u02c8\u02cc\7)\2\2\u02c9\u02ca"+ + "\7^\2\2\u02ca\u02cd\7)\2\2\u02cb\u02cd\n\3\2\2\u02cc\u02c9\3\2\2\2\u02cc"+ + "\u02cb\3\2\2\2\u02cd\u02ce\3\2\2\2\u02ce\u02cf\7)\2\2\u02cf\u0092\3\2"+ + "\2\2\u02d0\u02d1\7v\2\2\u02d1\u02d2\7t\2\2\u02d2\u02d3\7w\2\2\u02d3\u02da"+ + "\7g\2\2\u02d4\u02d5\7h\2\2\u02d5\u02d6\7c\2\2\u02d6\u02d7\7n\2\2\u02d7"+ + "\u02d8\7u\2\2\u02d8\u02da\7g\2\2\u02d9\u02d0\3\2\2\2\u02d9\u02d4\3\2\2"+ + "\2\u02da\u0094\3\2\2\2\u02db\u02de\5\u0097L\2\u02dc\u02de\5\u009fP\2\u02dd"+ + "\u02db\3\2\2\2\u02dd\u02dc\3\2\2\2\u02de\u0096\3\2\2\2\u02df\u02e3\5\u0099"+ + "M\2\u02e0\u02e3\5\u009bN\2\u02e1\u02e3\5\u009dO\2\u02e2\u02df\3\2\2\2"+ + "\u02e2\u02e0\3\2\2\2\u02e2\u02e1\3\2\2\2\u02e3\u0098\3\2\2\2\u02e4\u02ea"+ + "\7\'\2\2\u02e5\u02e6\7\62\2\2\u02e6\u02ea\7d\2\2\u02e7\u02e8\7\62\2\2"+ + "\u02e8\u02ea\7D\2\2\u02e9\u02e4\3\2\2\2\u02e9\u02e5\3\2\2\2\u02e9\u02e7"+ + "\3\2\2\2\u02ea\u02ee\3\2\2\2\u02eb\u02ed\5\u00a7T\2\u02ec\u02eb\3\2\2"+ + "\2\u02ed\u02f0\3\2\2\2\u02ee\u02ec\3\2\2\2\u02ee\u02ef\3\2\2\2\u02ef\u02f1"+ + "\3\2\2\2\u02f0\u02ee\3\2\2\2\u02f1\u02f3\7\60\2\2\u02f2\u02f4\5\u00a7"+ + "T\2\u02f3\u02f2\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5\u02f3\3\2\2\2\u02f5"+ + "\u02f6\3\2\2\2\u02f6\u009a\3\2\2\2\u02f7\u02f9\5\u00a9U\2\u02f8\u02f7"+ + "\3\2\2\2\u02f9\u02fc\3\2\2\2\u02fa\u02f8\3\2\2\2\u02fa\u02fb\3\2\2\2\u02fb"+ + "\u02fd\3\2\2\2\u02fc\u02fa\3\2\2\2\u02fd\u02ff\7\60\2\2\u02fe\u0300\5"+ + "\u00a9U\2\u02ff\u02fe\3\2\2\2\u0300\u0301\3\2\2\2\u0301\u02ff\3\2\2\2"+ + "\u0301\u0302\3\2\2\2\u0302\u009c\3\2\2\2\u0303\u0309\7&\2\2\u0304\u0305"+ + "\7\62\2\2\u0305\u0309\7z\2\2\u0306\u0307\7\62\2\2\u0307\u0309\7Z\2\2\u0308"+ + "\u0303\3\2\2\2\u0308\u0304\3\2\2\2\u0308\u0306\3\2\2\2\u0309\u030d\3\2"+ + "\2\2\u030a\u030c\5\u00abV\2\u030b\u030a\3\2\2\2\u030c\u030f\3\2\2\2\u030d"+ + "\u030b\3\2\2\2\u030d\u030e\3\2\2\2\u030e\u0310\3\2\2\2\u030f\u030d\3\2"+ + "\2\2\u0310\u0312\7\60\2\2\u0311\u0313\5\u00abV\2\u0312\u0311\3\2\2\2\u0313"+ + "\u0314\3\2\2\2\u0314\u0312\3\2\2\2\u0314\u0315\3\2\2\2\u0315\u009e\3\2"+ + "\2\2\u0316\u031a\5\u00a3R\2\u0317\u031a\5\u00a5S\2\u0318\u031a\5\u00a1"+ + "Q\2\u0319\u0316\3\2\2\2\u0319\u0317\3\2\2\2\u0319\u0318\3\2\2\2\u031a"+ + "\u00a0\3\2\2\2\u031b\u031c\7\62\2\2\u031c\u031e\t\4\2\2\u031d\u031f\5"+ + "\u00a7T\2\u031e\u031d\3\2\2\2\u031f\u0320\3\2\2\2\u0320\u031e\3\2\2\2"+ + "\u0320\u0321\3\2\2\2\u0321\u0329\3\2\2\2\u0322\u0324\7\'\2\2\u0323\u0325"+ + "\5\u00a7T\2\u0324\u0323\3\2\2\2\u0325\u0326\3\2\2\2\u0326\u0324\3\2\2"+ + "\2\u0326\u0327\3\2\2\2\u0327\u0329\3\2\2\2\u0328\u031b\3\2\2\2\u0328\u0322"+ + "\3\2\2\2\u0329\u00a2\3\2\2\2\u032a\u032c\5\u00a9U\2\u032b\u032a\3\2\2"+ + "\2\u032c\u032d\3\2\2\2\u032d\u032b\3\2\2\2\u032d\u032e\3\2\2\2\u032e\u00a4"+ + "\3\2\2\2\u032f\u0335\7&\2\2\u0330\u0331\7\62\2\2\u0331\u0335\7z\2\2\u0332"+ + "\u0333\7\62\2\2\u0333\u0335\7Z\2\2\u0334\u032f\3\2\2\2\u0334\u0330\3\2"+ + "\2\2\u0334\u0332\3\2\2\2\u0335\u0337\3\2\2\2\u0336\u0338\5\u00abV\2\u0337"+ + "\u0336\3\2\2\2\u0338\u0339\3\2\2\2\u0339\u0337\3\2\2\2\u0339\u033a\3\2"+ + "\2\2\u033a\u00a6\3\2\2\2\u033b\u033c\t\5\2\2\u033c\u00a8\3\2\2\2\u033d"+ + "\u033e\t\6\2\2\u033e\u00aa\3\2\2\2\u033f\u0340\t\7\2\2\u0340\u00ac\3\2"+ + "\2\2\u0341\u0345\5\u00afX\2\u0342\u0344\5\u00b1Y\2\u0343\u0342\3\2\2\2"+ + "\u0344\u0347\3\2\2\2\u0345\u0343\3\2\2\2\u0345\u0346\3\2\2\2\u0346\u00ae"+ + "\3\2\2\2\u0347\u0345\3\2\2\2\u0348\u0349\t\b\2\2\u0349\u00b0\3\2\2\2\u034a"+ + "\u034b\t\t\2\2\u034b\u00b2\3\2\2\2\u034c\u0350\7#\2\2\u034d\u034f\5\u00b1"+ + "Y\2\u034e\u034d\3\2\2\2\u034f\u0352\3\2\2\2\u0350\u034e\3\2\2\2\u0350"+ + "\u0351\3\2\2\2\u0351\u0354\3\2\2\2\u0352\u0350\3\2\2\2\u0353\u0355\t\n"+ + "\2\2\u0354\u0353\3\2\2\2\u0355\u0356\3\2\2\2\u0356\u0354\3\2\2\2\u0356"+ + "\u0357\3\2\2\2\u0357\u00b4\3\2\2\2\u0358\u035a\t\13\2\2\u0359\u0358\3"+ + "\2\2\2\u035a\u035b\3\2\2\2\u035b\u0359\3\2\2\2\u035b\u035c\3\2\2\2\u035c"+ + "\u035d\3\2\2\2\u035d\u035e\b[\2\2\u035e\u00b6\3\2\2\2\u035f\u0360\7\61"+ + "\2\2\u0360\u0361\7\61\2\2\u0361\u0365\3\2\2\2\u0362\u0364\n\f\2\2\u0363"+ + "\u0362\3\2\2\2\u0364\u0367\3\2\2\2\u0365\u0363\3\2\2\2\u0365\u0366\3\2"+ + "\2\2\u0366\u0368\3\2\2\2\u0367\u0365\3\2\2\2\u0368\u0369\b\\\2\2\u0369"+ + "\u00b8\3\2\2\2\u036a\u036b\7\61\2\2\u036b\u036c\7,\2\2\u036c\u0370\3\2"+ + "\2\2\u036d\u036f\13\2\2\2\u036e\u036d\3\2\2\2\u036f\u0372\3\2\2\2\u0370"+ + "\u0371\3\2\2\2\u0370\u036e\3\2\2\2\u0371\u0373\3\2\2\2\u0372\u0370\3\2"+ + "\2\2\u0373\u0374\7,\2\2\u0374\u0375\7\61\2\2\u0375\u0376\3\2\2\2\u0376"+ + "\u0377\b]\2\2\u0377\u00ba\3\2\2\2!\2\u0298\u02a0\u02bb\u02c1\u02c3\u02cc"+ + "\u02d9\u02dd\u02e2\u02e9\u02ee\u02f5\u02fa\u0301\u0308\u030d\u0314\u0319"+ + "\u0320\u0326\u0328\u032d\u0334\u0339\u0345\u0350\u0356\u035b\u0365\u0370"+ + "\3\b\2\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 902e44b4e..43553c992 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -64,26 +64,27 @@ T__62=63 T__63=64 T__64=65 T__65=66 -MNEMONIC=67 -KICKASM=68 -SIMPLETYPE=69 -STRING=70 -CHAR=71 -BOOLEAN=72 -NUMBER=73 -NUMFLOAT=74 -BINFLOAT=75 -DECFLOAT=76 -HEXFLOAT=77 -NUMINT=78 -BININTEGER=79 -DECINTEGER=80 -HEXINTEGER=81 -NAME=82 -ASMREL=83 -WS=84 -COMMENT_LINE=85 -COMMENT_BLOCK=86 +T__66=67 +MNEMONIC=68 +KICKASM=69 +SIMPLETYPE=70 +STRING=71 +CHAR=72 +BOOLEAN=73 +NUMBER=74 +NUMFLOAT=75 +BINFLOAT=76 +DECFLOAT=77 +HEXFLOAT=78 +NUMINT=79 +BININTEGER=80 +DECINTEGER=81 +HEXINTEGER=82 +NAME=83 +ASMREL=84 +WS=85 +COMMENT_LINE=86 +COMMENT_BLOCK=87 'import'=1 '='=2 ';'=3 @@ -105,48 +106,49 @@ COMMENT_BLOCK=86 'extern'=19 'align'=20 'register'=21 -'if'=22 -'else'=23 -'while'=24 -'do'=25 -'for'=26 -'return'=27 -'asm'=28 -'..'=29 -'signed'=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 -'^='=64 -'.byte'=65 -'#'=66 +'interrupt'=22 +'if'=23 +'else'=24 +'while'=25 +'do'=26 +'for'=27 +'return'=28 +'asm'=29 +'..'=30 +'signed'=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 +'|='=64 +'^='=65 +'.byte'=66 +'#'=67 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java index bbd02609d..b566c10ab 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java @@ -1,4 +1,4 @@ -// Generated from C:/c64/kickc/src/main/java/dk/camelot64/kickc/parser\KickC.g4 by ANTLR 4.7 +// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickC.g4 by ANTLR 4.7 package dk.camelot64.kickc.parser; import org.antlr.v4.runtime.tree.ParseTreeListener; @@ -259,6 +259,18 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitDirectiveInline(KickCParser.DirectiveInlineContext ctx); + /** + * Enter a parse tree produced by the {@code directiveInterrupt} + * labeled alternative in {@link KickCParser#directive}. + * @param ctx the parse tree + */ + void enterDirectiveInterrupt(KickCParser.DirectiveInterruptContext ctx); + /** + * Exit a parse tree produced by the {@code directiveInterrupt} + * labeled alternative in {@link KickCParser#directive}. + * @param ctx the parse tree + */ + void exitDirectiveInterrupt(KickCParser.DirectiveInterruptContext ctx); /** * Enter a parse tree produced by {@link KickCParser#stmtSeq}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 482ae437b..757fc6402 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -1,4 +1,4 @@ -// Generated from C:/c64/kickc/src/main/java/dk/camelot64/kickc/parser\KickC.g4 by ANTLR 4.7 +// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickC.g4 by ANTLR 4.7 package dk.camelot64.kickc.parser; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; @@ -26,10 +26,10 @@ 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, - MNEMONIC=67, KICKASM=68, SIMPLETYPE=69, STRING=70, CHAR=71, BOOLEAN=72, - NUMBER=73, NUMFLOAT=74, BINFLOAT=75, DECFLOAT=76, HEXFLOAT=77, NUMINT=78, - BININTEGER=79, DECINTEGER=80, HEXINTEGER=81, NAME=82, ASMREL=83, WS=84, - COMMENT_LINE=85, COMMENT_BLOCK=86; + T__66=67, MNEMONIC=68, KICKASM=69, SIMPLETYPE=70, STRING=71, CHAR=72, + BOOLEAN=73, NUMBER=74, NUMFLOAT=75, BINFLOAT=76, DECFLOAT=77, HEXFLOAT=78, + NUMINT=79, BININTEGER=80, DECINTEGER=81, HEXINTEGER=82, NAME=83, ASMREL=84, + WS=85, COMMENT_LINE=86, COMMENT_BLOCK=87; 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, @@ -50,12 +50,12 @@ public class KickCParser extends Parser { private static final String[] _LITERAL_NAMES = { null, "'import'", "'='", "';'", "'('", "')'", "'{'", "'}'", "'kickasm'", "','", "'resource'", "'clobber'", "'param'", "':'", "'bytes'", "'cycles'", - "'pc'", "'inline'", "'const'", "'extern'", "'align'", "'register'", "'if'", - "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", "'..'", "'signed'", - "'*'", "'['", "']'", "'--'", "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", - "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", "'=='", "'!='", "'<='", "'>='", - "'^'", "'|'", "'&&'", "'||'", "'+='", "'-='", "'*='", "'/='", "'%='", - "'<<='", "'>>='", "'&='", "'|='", "'^='", "'.byte'", "'#'" + "'pc'", "'inline'", "'const'", "'extern'", "'align'", "'register'", "'interrupt'", + "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", "'..'", + "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'", "'-'", "'!'", + "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", "'=='", "'!='", + "'<='", "'>='", "'^'", "'|'", "'&&'", "'||'", "'+='", "'-='", "'*='", + "'/='", "'%='", "'<<='", "'>>='", "'&='", "'|='", "'^='", "'.byte'", "'#'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, null, null, null, null, null, null, null, @@ -63,10 +63,10 @@ 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, null, null, null, null, null, null, "MNEMONIC", "KICKASM", "SIMPLETYPE", - "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", - "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + null, null, null, null, null, null, null, null, "MNEMONIC", "KICKASM", + "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", + "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", + "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -366,7 +366,7 @@ public class KickCParser extends Parser { setState(75); _errHandler.sync(this); _la = _input.LA(1); - } while ( ((((_la - 8)) & ~0x3f) == 0 && ((1L << (_la - 8)) & ((1L << (T__7 - 8)) | (1L << (T__16 - 8)) | (1L << (T__17 - 8)) | (1L << (T__18 - 8)) | (1L << (T__19 - 8)) | (1L << (T__20 - 8)) | (1L << (T__29 - 8)) | (1L << (SIMPLETYPE - 8)))) != 0) ); + } while ( ((((_la - 8)) & ~0x3f) == 0 && ((1L << (_la - 8)) & ((1L << (T__7 - 8)) | (1L << (T__16 - 8)) | (1L << (T__17 - 8)) | (1L << (T__18 - 8)) | (1L << (T__19 - 8)) | (1L << (T__20 - 8)) | (1L << (T__21 - 8)) | (1L << (T__30 - 8)) | (1L << (SIMPLETYPE - 8)))) != 0) ); } } catch (RecognitionException re) { @@ -493,7 +493,7 @@ public class KickCParser extends Parser { setState(85); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { { setState(82); @@ -509,7 +509,7 @@ public class KickCParser extends Parser { setState(92); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { { setState(89); @@ -595,7 +595,7 @@ public class KickCParser extends Parser { setState(105); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { { setState(102); @@ -611,7 +611,7 @@ public class KickCParser extends Parser { setState(112); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { { setState(109); @@ -629,7 +629,7 @@ public class KickCParser extends Parser { setState(118); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__17 - 17)) | (1L << (T__18 - 17)) | (1L << (T__19 - 17)) | (1L << (T__20 - 17)) | (1L << (T__29 - 17)) | (1L << (SIMPLETYPE - 17)))) != 0)) { + if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__17 - 17)) | (1L << (T__18 - 17)) | (1L << (T__19 - 17)) | (1L << (T__20 - 17)) | (1L << (T__21 - 17)) | (1L << (T__30 - 17)) | (1L << (SIMPLETYPE - 17)))) != 0)) { { setState(117); parameterListDecl(); @@ -643,7 +643,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__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__30) | (1L << T__31) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__45) | (1L << T__46))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (SIMPLETYPE - 70)) | (1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { { setState(122); stmtSeq(); @@ -992,16 +992,16 @@ public class KickCParser extends Parser { break; case T__3: case T__5: - case T__30: - case T__33: + case T__31: case T__34: case T__35: case T__36: case T__37: case T__38: case T__39: - case T__44: + case T__40: case T__45: + case T__46: case STRING: case CHAR: case BOOLEAN: @@ -1136,7 +1136,7 @@ public class KickCParser extends Parser { setState(174); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { { setState(171); @@ -1152,7 +1152,7 @@ public class KickCParser extends Parser { setState(181); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { { setState(178); @@ -1205,6 +1205,22 @@ public class KickCParser extends Parser { else return visitor.visitChildren(this); } } + public static class DirectiveInterruptContext extends DirectiveContext { + public DirectiveInterruptContext(DirectiveContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterDirectiveInterrupt(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitDirectiveInterrupt(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitDirectiveInterrupt(this); + else return visitor.visitChildren(this); + } + } public static class DirectiveExternContext extends DirectiveContext { public DirectiveExternContext(DirectiveContext ctx) { copyFrom(ctx); } @Override @@ -1276,7 +1292,7 @@ public class KickCParser extends Parser { DirectiveContext _localctx = new DirectiveContext(_ctx, getState()); enterRule(_localctx, 26, RULE_directive); try { - setState(197); + setState(198); _errHandler.sync(this); switch (_input.LA(1)) { case T__17: @@ -1331,6 +1347,14 @@ public class KickCParser extends Parser { match(T__16); } break; + case T__21: + _localctx = new DirectiveInterruptContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(197); + match(T__21); + } + break; default: throw new NoViableAltException(this); } @@ -1379,20 +1403,20 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(200); + setState(201); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(199); + setState(200); stmt(); } } - setState(202); + setState(203); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0) ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__30) | (1L << T__31) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__45) | (1L << T__46))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (SIMPLETYPE - 70)) | (1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0) ); } } catch (RecognitionException re) { @@ -1640,14 +1664,14 @@ public class KickCParser extends Parser { enterRule(_localctx, 30, RULE_stmt); int _la; try { - setState(265); + setState(266); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { case 1: _localctx = new StmtDeclVarContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(204); + setState(205); declVariable(); } break; @@ -1655,19 +1679,19 @@ public class KickCParser extends Parser { _localctx = new StmtBlockContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(205); + setState(206); match(T__5); - setState(207); + setState(208); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__30) | (1L << T__31) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__45) | (1L << T__46))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (SIMPLETYPE - 70)) | (1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { { - setState(206); + setState(207); stmtSeq(); } } - setState(209); + setState(210); match(T__6); } break; @@ -1675,9 +1699,9 @@ public class KickCParser extends Parser { _localctx = new StmtExprContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(210); - expr(0); setState(211); + expr(0); + setState(212); match(T__2); } break; @@ -1685,24 +1709,24 @@ public class KickCParser extends Parser { _localctx = new StmtIfElseContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(213); - match(T__21); setState(214); - match(T__3); + match(T__22); setState(215); - expr(0); + match(T__3); setState(216); - match(T__4); + expr(0); setState(217); + match(T__4); + setState(218); stmt(); - setState(220); + setState(221); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { case 1: { - setState(218); - match(T__22); setState(219); + match(T__23); + setState(220); stmt(); } break; @@ -1713,25 +1737,25 @@ public class KickCParser extends Parser { _localctx = new StmtWhileContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(223); + setState(224); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { - setState(222); + setState(223); directive(); } } - setState(225); - match(T__23); setState(226); - match(T__3); + match(T__24); setState(227); - expr(0); + match(T__3); setState(228); - match(T__4); + expr(0); setState(229); + match(T__4); + setState(230); stmt(); } break; @@ -1739,29 +1763,29 @@ public class KickCParser extends Parser { _localctx = new StmtDoWhileContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(232); + setState(233); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { - setState(231); + setState(232); directive(); } } - setState(234); - match(T__24); setState(235); - stmt(); + match(T__25); setState(236); - match(T__23); + stmt(); setState(237); - match(T__3); + match(T__24); setState(238); - expr(0); + match(T__3); setState(239); - match(T__4); + expr(0); setState(240); + match(T__4); + setState(241); match(T__2); } break; @@ -1769,35 +1793,35 @@ public class KickCParser extends Parser { _localctx = new StmtForContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(243); + setState(244); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { - setState(242); + setState(243); directive(); } } - setState(245); - match(T__25); setState(246); + match(T__26); + setState(247); match(T__3); - setState(248); + setState(249); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__29))) != 0) || _la==SIMPLETYPE || _la==NAME) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__30))) != 0) || _la==SIMPLETYPE || _la==NAME) { { - setState(247); + setState(248); forDeclaration(); } } - setState(250); - forIteration(); setState(251); - match(T__4); + forIteration(); setState(252); + match(T__4); + setState(253); stmt(); } break; @@ -1805,19 +1829,19 @@ public class KickCParser extends Parser { _localctx = new StmtReturnContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(254); - match(T__26); - setState(256); + setState(255); + match(T__27); + setState(257); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__31) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__45) | (1L << T__46))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (STRING - 71)) | (1L << (CHAR - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)))) != 0)) { { - setState(255); + setState(256); expr(0); } } - setState(258); + setState(259); match(T__2); } break; @@ -1825,13 +1849,13 @@ public class KickCParser extends Parser { _localctx = new StmtAsmContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(259); - match(T__27); setState(260); - match(T__5); + match(T__28); setState(261); - asmLines(); + match(T__5); setState(262); + asmLines(); + setState(263); match(T__6); } break; @@ -1839,7 +1863,7 @@ public class KickCParser extends Parser { _localctx = new StmtDeclKasmContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(264); + setState(265); declKasm(); } break; @@ -1906,56 +1930,56 @@ public class KickCParser extends Parser { _localctx = new ForDeclContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(270); + setState(271); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,27,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(267); + setState(268); directive(); } } } - setState(272); + setState(273); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,27,_ctx); } - setState(274); + setState(275); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__29 || _la==SIMPLETYPE) { + if (_la==T__30 || _la==SIMPLETYPE) { { - setState(273); + setState(274); typeDecl(0); } } - setState(279); + setState(280); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) { { { - setState(276); + setState(277); directive(); } } - setState(281); + setState(282); _errHandler.sync(this); _la = _input.LA(1); } - setState(282); + setState(283); match(NAME); - setState(285); + setState(286); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__1) { { - setState(283); - match(T__1); setState(284); + match(T__1); + setState(285); expr(0); } } @@ -2033,20 +2057,20 @@ public class KickCParser extends Parser { ForIterationContext _localctx = new ForIterationContext(_ctx, getState()); enterRule(_localctx, 34, RULE_forIteration); try { - setState(297); + setState(298); _errHandler.sync(this); switch (_input.LA(1)) { case T__2: _localctx = new ForClassicContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(287); - match(T__2); setState(288); - expr(0); - setState(289); match(T__2); + setState(289); + expr(0); setState(290); + match(T__2); + setState(291); expr(0); } break; @@ -2054,15 +2078,15 @@ public class KickCParser extends Parser { _localctx = new ForRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(292); - match(T__12); setState(293); + match(T__12); + setState(294); expr(0); { - setState(294); - match(T__28); - } setState(295); + match(T__29); + } + setState(296); expr(0); } break; @@ -2184,7 +2208,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(303); + setState(304); _errHandler.sync(this); switch (_input.LA(1)) { case SIMPLETYPE: @@ -2193,18 +2217,18 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(300); + setState(301); match(SIMPLETYPE); } break; - case T__29: + case T__30: { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(301); - match(T__29); setState(302); + match(T__30); + setState(303); match(SIMPLETYPE); } break; @@ -2212,7 +2236,7 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(315); + setState(316); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2220,45 +2244,45 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(313); + setState(314); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) { case 1: { _localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(305); - if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); setState(306); - match(T__30); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(307); + match(T__31); } break; case 2: { _localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(307); - if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); setState(308); - match(T__31); - setState(310); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(309); + match(T__32); + setState(311); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__31) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__45) | (1L << T__46))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (STRING - 71)) | (1L << (CHAR - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)))) != 0)) { { - setState(309); + setState(310); expr(0); } } - setState(312); - match(T__32); + setState(313); + match(T__33); } break; } } } - setState(317); + setState(318); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } @@ -2635,7 +2659,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(358); + setState(359); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { case 1: @@ -2644,11 +2668,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(319); - match(T__3); setState(320); - expr(0); + match(T__3); setState(321); + expr(0); + setState(322); match(T__4); } break; @@ -2657,21 +2681,21 @@ public class KickCParser extends Parser { _localctx = new ExprCallContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(323); - match(NAME); setState(324); + match(NAME); + setState(325); match(T__3); - setState(326); + setState(327); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__31) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__45) | (1L << T__46))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (STRING - 71)) | (1L << (CHAR - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)))) != 0)) { { - setState(325); + setState(326); parameterList(); } } - setState(328); + setState(329); match(T__4); } break; @@ -2680,13 +2704,13 @@ public class KickCParser extends Parser { _localctx = new ExprCastContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(329); - match(T__3); setState(330); - typeDecl(0); + match(T__3); setState(331); - match(T__4); + typeDecl(0); setState(332); + match(T__4); + setState(333); expr(23); } break; @@ -2695,9 +2719,9 @@ public class KickCParser extends Parser { _localctx = new ExprPreModContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(334); + setState(335); _la = _input.LA(1); - if ( !(_la==T__33 || _la==T__34) ) { + if ( !(_la==T__34 || _la==T__35) ) { _errHandler.recoverInline(this); } else { @@ -2705,7 +2729,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(335); + setState(336); expr(22); } break; @@ -2714,9 +2738,9 @@ public class KickCParser extends Parser { _localctx = new ExprPtrContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(336); - match(T__30); setState(337); + match(T__31); + setState(338); expr(20); } break; @@ -2725,9 +2749,9 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(338); + setState(339); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2735,7 +2759,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(339); + setState(340); expr(19); } break; @@ -2744,9 +2768,9 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(340); + setState(341); _la = _input.LA(1); - if ( !(_la==T__44 || _la==T__45) ) { + if ( !(_la==T__45 || _la==T__46) ) { _errHandler.recoverInline(this); } else { @@ -2754,7 +2778,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(341); + setState(342); expr(15); } break; @@ -2763,27 +2787,27 @@ public class KickCParser extends Parser { _localctx = new InitListContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(342); - match(T__5); setState(343); + match(T__5); + setState(344); expr(0); - setState(348); + setState(349); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__8) { { { - setState(344); - match(T__8); setState(345); + match(T__8); + setState(346); expr(0); } } - setState(350); + setState(351); _errHandler.sync(this); _la = _input.LA(1); } - setState(351); + setState(352); match(T__6); } break; @@ -2792,7 +2816,7 @@ public class KickCParser extends Parser { _localctx = new ExprIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(353); + setState(354); match(NAME); } break; @@ -2801,7 +2825,7 @@ public class KickCParser extends Parser { _localctx = new ExprNumberContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(354); + setState(355); match(NUMBER); } break; @@ -2810,7 +2834,7 @@ public class KickCParser extends Parser { _localctx = new ExprStringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(355); + setState(356); match(STRING); } break; @@ -2819,7 +2843,7 @@ public class KickCParser extends Parser { _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(356); + setState(357); match(CHAR); } break; @@ -2828,13 +2852,13 @@ public class KickCParser extends Parser { _localctx = new ExprBoolContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(357); + setState(358); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(402); + setState(403); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2842,18 +2866,18 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(400); + setState(401); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(360); - if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); setState(361); + if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); + setState(362); _la = _input.LA(1); - if ( !(_la==T__40 || _la==T__41) ) { + if ( !(_la==T__41 || _la==T__42) ) { _errHandler.recoverInline(this); } else { @@ -2861,7 +2885,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(362); + setState(363); expr(19); } break; @@ -2869,11 +2893,11 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(363); - if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); setState(364); + if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); + setState(365); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__30) | (1L << T__42) | (1L << T__43))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__31) | (1L << T__43) | (1L << T__44))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2881,7 +2905,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(365); + setState(366); expr(18); } break; @@ -2889,11 +2913,11 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(366); - if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); setState(367); + if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); + setState(368); _la = _input.LA(1); - if ( !(_la==T__35 || _la==T__36) ) { + if ( !(_la==T__36 || _la==T__37) ) { _errHandler.recoverInline(this); } else { @@ -2901,7 +2925,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(368); + setState(369); expr(17); } break; @@ -2909,11 +2933,11 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(369); - if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); setState(370); + if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); + setState(371); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49) | (1L << T__50))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2921,7 +2945,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(371); + setState(372); expr(15); } break; @@ -2929,13 +2953,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(372); + setState(373); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); { - setState(373); - match(T__38); - } setState(374); + match(T__39); + } + setState(375); expr(14); } break; @@ -2943,13 +2967,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(375); + setState(376); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { - setState(376); - match(T__50); - } setState(377); + match(T__51); + } + setState(378); expr(13); } break; @@ -2957,13 +2981,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(378); + setState(379); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { - setState(379); - match(T__51); - } setState(380); + match(T__52); + } + setState(381); expr(12); } break; @@ -2971,13 +2995,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(381); + setState(382); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(382); - match(T__52); - } setState(383); + match(T__53); + } + setState(384); expr(11); } break; @@ -2985,13 +3009,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(384); + setState(385); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); { - setState(385); - match(T__53); - } setState(386); + match(T__54); + } + setState(387); expr(10); } break; @@ -2999,11 +3023,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(387); - if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); setState(388); - match(T__1); + if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); setState(389); + match(T__1); + setState(390); expr(8); } break; @@ -3011,11 +3035,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentCompoundContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(390); - if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); setState(391); + if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(392); _la = _input.LA(1); - if ( !(((((_la - 55)) & ~0x3f) == 0 && ((1L << (_la - 55)) & ((1L << (T__54 - 55)) | (1L << (T__55 - 55)) | (1L << (T__56 - 55)) | (1L << (T__57 - 55)) | (1L << (T__58 - 55)) | (1L << (T__59 - 55)) | (1L << (T__60 - 55)) | (1L << (T__61 - 55)) | (1L << (T__62 - 55)) | (1L << (T__63 - 55)))) != 0)) ) { + if ( !(((((_la - 56)) & ~0x3f) == 0 && ((1L << (_la - 56)) & ((1L << (T__55 - 56)) | (1L << (T__56 - 56)) | (1L << (T__57 - 56)) | (1L << (T__58 - 56)) | (1L << (T__59 - 56)) | (1L << (T__60 - 56)) | (1L << (T__61 - 56)) | (1L << (T__62 - 56)) | (1L << (T__63 - 56)) | (1L << (T__64 - 56)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -3023,7 +3047,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(392); + setState(393); expr(7); } break; @@ -3031,25 +3055,25 @@ public class KickCParser extends Parser { { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(393); - if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)"); setState(394); - match(T__31); + if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)"); setState(395); - expr(0); - setState(396); match(T__32); + setState(396); + expr(0); + setState(397); + match(T__33); } break; case 13: { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(398); - if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)"); setState(399); + if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)"); + setState(400); _la = _input.LA(1); - if ( !(_la==T__33 || _la==T__34) ) { + if ( !(_la==T__34 || _la==T__35) ) { _errHandler.recoverInline(this); } else { @@ -3062,7 +3086,7 @@ public class KickCParser extends Parser { } } } - setState(404); + setState(405); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } @@ -3112,21 +3136,21 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(405); + setState(406); expr(0); - setState(410); + setState(411); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__8) { { { - setState(406); - match(T__8); setState(407); + match(T__8); + setState(408); expr(0); } } - setState(412); + setState(413); _errHandler.sync(this); _la = _input.LA(1); } @@ -3176,17 +3200,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(416); + setState(417); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 38)) & ~0x3f) == 0 && ((1L << (_la - 38)) & ((1L << (T__37 - 38)) | (1L << (T__64 - 38)) | (1L << (MNEMONIC - 38)) | (1L << (NAME - 38)))) != 0)) { + while (((((_la - 39)) & ~0x3f) == 0 && ((1L << (_la - 39)) & ((1L << (T__38 - 39)) | (1L << (T__65 - 39)) | (1L << (MNEMONIC - 39)) | (1L << (NAME - 39)))) != 0)) { { { - setState(413); + setState(414); asmLine(); } } - setState(418); + setState(419); _errHandler.sync(this); _la = _input.LA(1); } @@ -3236,28 +3260,28 @@ public class KickCParser extends Parser { AsmLineContext _localctx = new AsmLineContext(_ctx, getState()); enterRule(_localctx, 44, RULE_asmLine); try { - setState(422); + setState(423); _errHandler.sync(this); switch (_input.LA(1)) { - case T__37: + case T__38: case NAME: enterOuterAlt(_localctx, 1); { - setState(419); + setState(420); asmLabel(); } break; case MNEMONIC: enterOuterAlt(_localctx, 2); { - setState(420); + setState(421); asmInstruction(); } break; - case T__64: + case T__65: enterOuterAlt(_localctx, 3); { - setState(421); + setState(422); asmBytes(); } break; @@ -3327,36 +3351,36 @@ public class KickCParser extends Parser { enterRule(_localctx, 46, RULE_asmLabel); int _la; try { - setState(431); + setState(432); _errHandler.sync(this); switch (_input.LA(1)) { case NAME: _localctx = new AsmLabelNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(424); - match(NAME); setState(425); + match(NAME); + setState(426); match(T__12); } break; - case T__37: + case T__38: _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(426); - match(T__37); - setState(428); + setState(427); + match(T__38); + setState(429); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(427); + setState(428); match(NAME); } } - setState(430); + setState(431); match(T__12); } break; @@ -3405,14 +3429,14 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(433); + setState(434); match(MNEMONIC); - setState(435); + setState(436); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { case 1: { - setState(434); + setState(435); asmParamMode(); } break; @@ -3463,23 +3487,23 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(437); - match(T__64); setState(438); + match(T__65); + setState(439); asmExpr(0); - setState(443); + setState(444); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__8) { { { - setState(439); - match(T__8); setState(440); + match(T__8); + setState(441); asmExpr(0); } } - setState(445); + setState(446); _errHandler.sync(this); _la = _input.LA(1); } @@ -3629,14 +3653,14 @@ public class KickCParser extends Parser { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); enterRule(_localctx, 52, RULE_asmParamMode); try { - setState(469); + setState(470); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(446); + setState(447); asmExpr(0); } break; @@ -3644,9 +3668,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(447); - match(T__65); setState(448); + match(T__66); + setState(449); asmExpr(0); } break; @@ -3654,11 +3678,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(449); - asmExpr(0); setState(450); - match(T__8); + asmExpr(0); setState(451); + match(T__8); + setState(452); match(NAME); } break; @@ -3666,15 +3690,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(453); - match(T__3); setState(454); - asmExpr(0); + match(T__3); setState(455); - match(T__4); + asmExpr(0); setState(456); - match(T__8); + match(T__4); setState(457); + match(T__8); + setState(458); match(NAME); } break; @@ -3682,15 +3706,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(459); - match(T__3); setState(460); - asmExpr(0); + match(T__3); setState(461); - match(T__8); + asmExpr(0); setState(462); - match(NAME); + match(T__8); setState(463); + match(NAME); + setState(464); match(T__4); } break; @@ -3698,11 +3722,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(465); - match(T__3); setState(466); - asmExpr(0); + match(T__3); setState(467); + asmExpr(0); + setState(468); match(T__4); } break; @@ -3892,34 +3916,34 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(485); + setState(486); _errHandler.sync(this); switch (_input.LA(1)) { - case T__31: + case T__32: { _localctx = new AsmExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(472); - match(T__31); setState(473); - asmExpr(0); - setState(474); match(T__32); + setState(474); + asmExpr(0); + setState(475); + match(T__33); } break; - case T__35: case T__36: - case T__44: + case T__37: case T__45: + case T__46: { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(476); + setState(477); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__36) | (1L << T__44) | (1L << T__45))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__36) | (1L << T__37) | (1L << T__45) | (1L << T__46))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -3927,7 +3951,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(477); + setState(478); asmExpr(8); } break; @@ -3936,7 +3960,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(478); + setState(479); match(NAME); } break; @@ -3945,7 +3969,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(479); + setState(480); match(ASMREL); } break; @@ -3954,11 +3978,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(480); - match(T__5); setState(481); - match(NAME); + match(T__5); setState(482); + match(NAME); + setState(483); match(T__6); } break; @@ -3967,7 +3991,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(483); + setState(484); match(NUMBER); } break; @@ -3976,7 +4000,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(484); + setState(485); match(CHAR); } break; @@ -3984,7 +4008,7 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(498); + setState(499); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,51,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3992,18 +4016,18 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(496); + setState(497); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(487); - if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); setState(488); + if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(489); _la = _input.LA(1); - if ( !(_la==T__40 || _la==T__41) ) { + if ( !(_la==T__41 || _la==T__42) ) { _errHandler.recoverInline(this); } else { @@ -4011,7 +4035,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(489); + setState(490); asmExpr(10); } break; @@ -4019,11 +4043,11 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(490); - if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); setState(491); + if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(492); _la = _input.LA(1); - if ( !(_la==T__30 || _la==T__42) ) { + if ( !(_la==T__31 || _la==T__43) ) { _errHandler.recoverInline(this); } else { @@ -4031,7 +4055,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(492); + setState(493); asmExpr(8); } break; @@ -4039,11 +4063,11 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(493); - if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); setState(494); + if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(495); _la = _input.LA(1); - if ( !(_la==T__35 || _la==T__36) ) { + if ( !(_la==T__36 || _la==T__37) ) { _errHandler.recoverInline(this); } else { @@ -4051,14 +4075,14 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(495); + setState(496); asmExpr(7); } break; } } } - setState(500); + setState(501); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,51,_ctx); } @@ -4139,7 +4163,7 @@ public class KickCParser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3X\u01f8\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3Y\u01f9\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"+ @@ -4153,60 +4177,60 @@ public class KickCParser extends Parser { "\f\3\f\3\f\3\f\3\f\3\f\5\f\u00a2\n\f\5\f\u00a4\n\f\3\r\3\r\3\r\7\r\u00a9"+ "\n\r\f\r\16\r\u00ac\13\r\3\16\7\16\u00af\n\16\f\16\16\16\u00b2\13\16\3"+ "\16\3\16\7\16\u00b6\n\16\f\16\16\16\u00b9\13\16\3\16\3\16\3\17\3\17\3"+ - "\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u00c8\n\17\3\20\6\20"+ - "\u00cb\n\20\r\20\16\20\u00cc\3\21\3\21\3\21\5\21\u00d2\n\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00df\n\21\3\21\5\21"+ - "\u00e2\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00eb\n\21\3\21\3"+ - "\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00f6\n\21\3\21\3\21\3\21"+ - "\5\21\u00fb\n\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u0103\n\21\3\21\3"+ - "\21\3\21\3\21\3\21\3\21\3\21\5\21\u010c\n\21\3\22\7\22\u010f\n\22\f\22"+ - "\16\22\u0112\13\22\3\22\5\22\u0115\n\22\3\22\7\22\u0118\n\22\f\22\16\22"+ - "\u011b\13\22\3\22\3\22\3\22\5\22\u0120\n\22\3\23\3\23\3\23\3\23\3\23\3"+ - "\23\3\23\3\23\3\23\3\23\5\23\u012c\n\23\3\24\3\24\3\24\3\24\5\24\u0132"+ - "\n\24\3\24\3\24\3\24\3\24\3\24\5\24\u0139\n\24\3\24\7\24\u013c\n\24\f"+ - "\24\16\24\u013f\13\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u0149"+ - "\n\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\3\25\3\25\3\25\7\25\u015d\n\25\f\25\16\25\u0160\13\25\3\25"+ - "\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u0169\n\25\3\25\3\25\3\25\3\25\3\25"+ + "\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u00c9\n\17\3\20"+ + "\6\20\u00cc\n\20\r\20\16\20\u00cd\3\21\3\21\3\21\5\21\u00d3\n\21\3\21"+ + "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00e0\n\21\3\21"+ + "\5\21\u00e3\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00ec\n\21\3"+ + "\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00f7\n\21\3\21\3\21"+ + "\3\21\5\21\u00fc\n\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u0104\n\21\3"+ + "\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u010d\n\21\3\22\7\22\u0110\n\22"+ + "\f\22\16\22\u0113\13\22\3\22\5\22\u0116\n\22\3\22\7\22\u0119\n\22\f\22"+ + "\16\22\u011c\13\22\3\22\3\22\3\22\5\22\u0121\n\22\3\23\3\23\3\23\3\23"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u012d\n\23\3\24\3\24\3\24\3\24\5\24"+ + "\u0133\n\24\3\24\3\24\3\24\3\24\3\24\5\24\u013a\n\24\3\24\7\24\u013d\n"+ + "\24\f\24\16\24\u0140\13\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25"+ + "\u014a\n\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ + "\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u015e\n\25\f\25\16\25\u0161\13\25"+ + "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u016a\n\25\3\25\3\25\3\25\3\25"+ "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u0193\n\25\f\25\16\25\u0196\13"+ - "\25\3\26\3\26\3\26\7\26\u019b\n\26\f\26\16\26\u019e\13\26\3\27\7\27\u01a1"+ - "\n\27\f\27\16\27\u01a4\13\27\3\30\3\30\3\30\5\30\u01a9\n\30\3\31\3\31"+ - "\3\31\3\31\5\31\u01af\n\31\3\31\5\31\u01b2\n\31\3\32\3\32\5\32\u01b6\n"+ - "\32\3\33\3\33\3\33\3\33\7\33\u01bc\n\33\f\33\16\33\u01bf\13\33\3\34\3"+ - "\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3"+ - "\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u01d8\n\34\3\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\3\35\5\35\u01e8\n\35"+ - "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\7\35\u01f3\n\35\f\35\16"+ - "\35\u01f6\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/\60\3\2+,\4\2!!-.\3\2&\'\3"+ - "\2/\64\3\29B\4\2&\'/\60\4\2!!--\2\u0240\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\u0087\3\2\2\2\26\u00a3\3\2\2\2\30\u00a5\3\2\2\2\32\u00b0\3\2"+ - "\2\2\34\u00c7\3\2\2\2\36\u00ca\3\2\2\2 \u010b\3\2\2\2\"\u0110\3\2\2\2"+ - "$\u012b\3\2\2\2&\u0131\3\2\2\2(\u0168\3\2\2\2*\u0197\3\2\2\2,\u01a2\3"+ - "\2\2\2.\u01a8\3\2\2\2\60\u01b1\3\2\2\2\62\u01b3\3\2\2\2\64\u01b7\3\2\2"+ - "\2\66\u01d7\3\2\2\28\u01e7\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\7H\2\2I\t\3\2\2\2"+ - "JL\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\22\n\2RO\3\2\2\2RP\3\2\2\2RQ\3\2\2\2S\r\3\2\2\2TV"+ - "\5\34\17\2UT\3\2\2\2VY\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2YW\3\2\2\2"+ - "Z^\5&\24\2[]\5\34\17\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\7T\2\2bc\7\4\2\2ce\5(\25\2db\3\2\2\2de\3\2\2\2ef\3\2"+ - "\2\2fg\7\5\2\2g\17\3\2\2\2hj\5\34\17\2ih\3\2\2\2jm\3\2\2\2ki\3\2\2\2k"+ - "l\3\2\2\2ln\3\2\2\2mk\3\2\2\2nr\5&\24\2oq\5\34\17\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\7T\2\2vx\7\6\2\2wy\5\30\r"+ + "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u0194\n\25\f\25\16\25\u0197"+ + "\13\25\3\26\3\26\3\26\7\26\u019c\n\26\f\26\16\26\u019f\13\26\3\27\7\27"+ + "\u01a2\n\27\f\27\16\27\u01a5\13\27\3\30\3\30\3\30\5\30\u01aa\n\30\3\31"+ + "\3\31\3\31\3\31\5\31\u01b0\n\31\3\31\5\31\u01b3\n\31\3\32\3\32\5\32\u01b7"+ + "\n\32\3\33\3\33\3\33\3\33\7\33\u01bd\n\33\f\33\16\33\u01c0\13\33\3\34"+ + "\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34"+ + "\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u01d9\n\34\3\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\3\35\5\35\u01e9\n\35"+ + "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\7\35\u01f4\n\35\f\35\16"+ + "\35\u01f7\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\60\61\3\2,-\4\2\"\"./\3\2"+ + "\'(\3\2\60\65\3\2:C\4\2\'(\60\61\4\2\"\"..\2\u0242\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\u0087\3\2\2\2\26\u00a3\3\2\2\2\30\u00a5\3\2\2\2\32"+ + "\u00b0\3\2\2\2\34\u00c8\3\2\2\2\36\u00cb\3\2\2\2 \u010c\3\2\2\2\"\u0111"+ + "\3\2\2\2$\u012c\3\2\2\2&\u0132\3\2\2\2(\u0169\3\2\2\2*\u0198\3\2\2\2,"+ + "\u01a3\3\2\2\2.\u01a9\3\2\2\2\60\u01b2\3\2\2\2\62\u01b4\3\2\2\2\64\u01b8"+ + "\3\2\2\2\66\u01d8\3\2\2\28\u01e8\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\7I\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\22\n\2RO\3\2\2\2RP\3\2\2\2RQ\3\2\2\2S\r\3\2\2\2"+ + "TV\5\34\17\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&\24\2[]\5\34\17\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\7U\2\2bc\7\4\2\2ce\5(\25\2db\3\2\2\2de\3\2\2\2ef\3"+ + "\2\2\2fg\7\5\2\2g\17\3\2\2\2hj\5\34\17\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&\24\2oq\5\34\17\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\7U\2\2vx\7\6\2\2wy\5\30\r"+ "\2xw\3\2\2\2xy\3\2\2\2yz\3\2\2\2z{\7\7\2\2{}\7\b\2\2|~\5\36\20\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\u0083"+ "\7\n\2\2\u0082\u0084\5\24\13\2\u0083\u0082\3\2\2\2\u0083\u0084\3\2\2\2"+ - "\u0084\u0085\3\2\2\2\u0085\u0086\7F\2\2\u0086\23\3\2\2\2\u0087\u0088\7"+ + "\u0084\u0085\3\2\2\2\u0085\u0086\7G\2\2\u0086\23\3\2\2\2\u0087\u0088\7"+ "\6\2\2\u0088\u008d\5\26\f\2\u0089\u008a\7\13\2\2\u008a\u008c\5\26\f\2"+ "\u008b\u0089\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3\2\2\2\u008d\u008e"+ "\3\2\2\2\u008e\u0090\3\2\2\2\u008f\u008d\3\2\2\2\u0090\u0091\7\7\2\2\u0091"+ - "\25\3\2\2\2\u0092\u0093\7\f\2\2\u0093\u00a4\7H\2\2\u0094\u0095\7\r\2\2"+ - "\u0095\u00a4\7H\2\2\u0096\u0097\7\16\2\2\u0097\u0098\7T\2\2\u0098\u0099"+ + "\25\3\2\2\2\u0092\u0093\7\f\2\2\u0093\u00a4\7I\2\2\u0094\u0095\7\r\2\2"+ + "\u0095\u00a4\7I\2\2\u0096\u0097\7\16\2\2\u0097\u0098\7U\2\2\u0098\u0099"+ "\7\17\2\2\u0099\u00a4\5(\25\2\u009a\u009b\7\20\2\2\u009b\u00a4\5(\25\2"+ "\u009c\u009d\7\21\2\2\u009d\u00a4\5(\25\2\u009e\u00a1\7\22\2\2\u009f\u00a2"+ "\7\23\2\2\u00a0\u00a2\5(\25\2\u00a1\u009f\3\2\2\2\u00a1\u00a0\3\2\2\2"+ @@ -4219,121 +4243,122 @@ public class KickCParser extends Parser { "\3\2\2\2\u00b1\u00b3\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b3\u00b7\5&\24\2\u00b4"+ "\u00b6\5\34\17\2\u00b5\u00b4\3\2\2\2\u00b6\u00b9\3\2\2\2\u00b7\u00b5\3"+ "\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00ba\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba"+ - "\u00bb\7T\2\2\u00bb\33\3\2\2\2\u00bc\u00c8\7\24\2\2\u00bd\u00c8\7\25\2"+ - "\2\u00be\u00bf\7\26\2\2\u00bf\u00c0\7\6\2\2\u00c0\u00c1\7K\2\2\u00c1\u00c8"+ - "\7\7\2\2\u00c2\u00c3\7\27\2\2\u00c3\u00c4\7\6\2\2\u00c4\u00c5\7T\2\2\u00c5"+ - "\u00c8\7\7\2\2\u00c6\u00c8\7\23\2\2\u00c7\u00bc\3\2\2\2\u00c7\u00bd\3"+ - "\2\2\2\u00c7\u00be\3\2\2\2\u00c7\u00c2\3\2\2\2\u00c7\u00c6\3\2\2\2\u00c8"+ - "\35\3\2\2\2\u00c9\u00cb\5 \21\2\u00ca\u00c9\3\2\2\2\u00cb\u00cc\3\2\2"+ - "\2\u00cc\u00ca\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\37\3\2\2\2\u00ce\u010c"+ - "\5\16\b\2\u00cf\u00d1\7\b\2\2\u00d0\u00d2\5\36\20\2\u00d1\u00d0\3\2\2"+ - "\2\u00d1\u00d2\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u010c\7\t\2\2\u00d4\u00d5"+ - "\5(\25\2\u00d5\u00d6\7\5\2\2\u00d6\u010c\3\2\2\2\u00d7\u00d8\7\30\2\2"+ - "\u00d8\u00d9\7\6\2\2\u00d9\u00da\5(\25\2\u00da\u00db\7\7\2\2\u00db\u00de"+ - "\5 \21\2\u00dc\u00dd\7\31\2\2\u00dd\u00df\5 \21\2\u00de\u00dc\3\2\2\2"+ - "\u00de\u00df\3\2\2\2\u00df\u010c\3\2\2\2\u00e0\u00e2\5\34\17\2\u00e1\u00e0"+ - "\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e4\7\32\2\2"+ - "\u00e4\u00e5\7\6\2\2\u00e5\u00e6\5(\25\2\u00e6\u00e7\7\7\2\2\u00e7\u00e8"+ - "\5 \21\2\u00e8\u010c\3\2\2\2\u00e9\u00eb\5\34\17\2\u00ea\u00e9\3\2\2\2"+ - "\u00ea\u00eb\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\u00ed\7\33\2\2\u00ed\u00ee"+ - "\5 \21\2\u00ee\u00ef\7\32\2\2\u00ef\u00f0\7\6\2\2\u00f0\u00f1\5(\25\2"+ - "\u00f1\u00f2\7\7\2\2\u00f2\u00f3\7\5\2\2\u00f3\u010c\3\2\2\2\u00f4\u00f6"+ - "\5\34\17\2\u00f5\u00f4\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f7\3\2\2\2"+ - "\u00f7\u00f8\7\34\2\2\u00f8\u00fa\7\6\2\2\u00f9\u00fb\5\"\22\2\u00fa\u00f9"+ - "\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc\u00fd\5$\23\2\u00fd"+ - "\u00fe\7\7\2\2\u00fe\u00ff\5 \21\2\u00ff\u010c\3\2\2\2\u0100\u0102\7\35"+ - "\2\2\u0101\u0103\5(\25\2\u0102\u0101\3\2\2\2\u0102\u0103\3\2\2\2\u0103"+ - "\u0104\3\2\2\2\u0104\u010c\7\5\2\2\u0105\u0106\7\36\2\2\u0106\u0107\7"+ - "\b\2\2\u0107\u0108\5,\27\2\u0108\u0109\7\t\2\2\u0109\u010c\3\2\2\2\u010a"+ - "\u010c\5\22\n\2\u010b\u00ce\3\2\2\2\u010b\u00cf\3\2\2\2\u010b\u00d4\3"+ - "\2\2\2\u010b\u00d7\3\2\2\2\u010b\u00e1\3\2\2\2\u010b\u00ea\3\2\2\2\u010b"+ - "\u00f5\3\2\2\2\u010b\u0100\3\2\2\2\u010b\u0105\3\2\2\2\u010b\u010a\3\2"+ - "\2\2\u010c!\3\2\2\2\u010d\u010f\5\34\17\2\u010e\u010d\3\2\2\2\u010f\u0112"+ - "\3\2\2\2\u0110\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0114\3\2\2\2\u0112"+ - "\u0110\3\2\2\2\u0113\u0115\5&\24\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2"+ - "\2\2\u0115\u0119\3\2\2\2\u0116\u0118\5\34\17\2\u0117\u0116\3\2\2\2\u0118"+ - "\u011b\3\2\2\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u011c\3\2"+ - "\2\2\u011b\u0119\3\2\2\2\u011c\u011f\7T\2\2\u011d\u011e\7\4\2\2\u011e"+ - "\u0120\5(\25\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120#\3\2\2\2"+ - "\u0121\u0122\7\5\2\2\u0122\u0123\5(\25\2\u0123\u0124\7\5\2\2\u0124\u0125"+ - "\5(\25\2\u0125\u012c\3\2\2\2\u0126\u0127\7\17\2\2\u0127\u0128\5(\25\2"+ - "\u0128\u0129\7\37\2\2\u0129\u012a\5(\25\2\u012a\u012c\3\2\2\2\u012b\u0121"+ - "\3\2\2\2\u012b\u0126\3\2\2\2\u012c%\3\2\2\2\u012d\u012e\b\24\1\2\u012e"+ - "\u0132\7G\2\2\u012f\u0130\7 \2\2\u0130\u0132\7G\2\2\u0131\u012d\3\2\2"+ - "\2\u0131\u012f\3\2\2\2\u0132\u013d\3\2\2\2\u0133\u0134\f\4\2\2\u0134\u013c"+ - "\7!\2\2\u0135\u0136\f\3\2\2\u0136\u0138\7\"\2\2\u0137\u0139\5(\25\2\u0138"+ - "\u0137\3\2\2\2\u0138\u0139\3\2\2\2\u0139\u013a\3\2\2\2\u013a\u013c\7#"+ - "\2\2\u013b\u0133\3\2\2\2\u013b\u0135\3\2\2\2\u013c\u013f\3\2\2\2\u013d"+ - "\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e\'\3\2\2\2\u013f\u013d\3\2\2\2"+ - "\u0140\u0141\b\25\1\2\u0141\u0142\7\6\2\2\u0142\u0143\5(\25\2\u0143\u0144"+ - "\7\7\2\2\u0144\u0169\3\2\2\2\u0145\u0146\7T\2\2\u0146\u0148\7\6\2\2\u0147"+ - "\u0149\5*\26\2\u0148\u0147\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\3\2"+ - "\2\2\u014a\u0169\7\7\2\2\u014b\u014c\7\6\2\2\u014c\u014d\5&\24\2\u014d"+ - "\u014e\7\7\2\2\u014e\u014f\5(\25\31\u014f\u0169\3\2\2\2\u0150\u0151\t"+ - "\2\2\2\u0151\u0169\5(\25\30\u0152\u0153\7!\2\2\u0153\u0169\5(\25\26\u0154"+ - "\u0155\t\3\2\2\u0155\u0169\5(\25\25\u0156\u0157\t\4\2\2\u0157\u0169\5"+ - "(\25\21\u0158\u0159\7\b\2\2\u0159\u015e\5(\25\2\u015a\u015b\7\13\2\2\u015b"+ - "\u015d\5(\25\2\u015c\u015a\3\2\2\2\u015d\u0160\3\2\2\2\u015e\u015c\3\2"+ - "\2\2\u015e\u015f\3\2\2\2\u015f\u0161\3\2\2\2\u0160\u015e\3\2\2\2\u0161"+ - "\u0162\7\t\2\2\u0162\u0169\3\2\2\2\u0163\u0169\7T\2\2\u0164\u0169\7K\2"+ - "\2\u0165\u0169\7H\2\2\u0166\u0169\7I\2\2\u0167\u0169\7J\2\2\u0168\u0140"+ - "\3\2\2\2\u0168\u0145\3\2\2\2\u0168\u014b\3\2\2\2\u0168\u0150\3\2\2\2\u0168"+ - "\u0152\3\2\2\2\u0168\u0154\3\2\2\2\u0168\u0156\3\2\2\2\u0168\u0158\3\2"+ - "\2\2\u0168\u0163\3\2\2\2\u0168\u0164\3\2\2\2\u0168\u0165\3\2\2\2\u0168"+ - "\u0166\3\2\2\2\u0168\u0167\3\2\2\2\u0169\u0194\3\2\2\2\u016a\u016b\f\24"+ - "\2\2\u016b\u016c\t\5\2\2\u016c\u0193\5(\25\25\u016d\u016e\f\23\2\2\u016e"+ - "\u016f\t\6\2\2\u016f\u0193\5(\25\24\u0170\u0171\f\22\2\2\u0171\u0172\t"+ - "\7\2\2\u0172\u0193\5(\25\23\u0173\u0174\f\20\2\2\u0174\u0175\t\b\2\2\u0175"+ - "\u0193\5(\25\21\u0176\u0177\f\17\2\2\u0177\u0178\7)\2\2\u0178\u0193\5"+ - "(\25\20\u0179\u017a\f\16\2\2\u017a\u017b\7\65\2\2\u017b\u0193\5(\25\17"+ - "\u017c\u017d\f\r\2\2\u017d\u017e\7\66\2\2\u017e\u0193\5(\25\16\u017f\u0180"+ - "\f\f\2\2\u0180\u0181\7\67\2\2\u0181\u0193\5(\25\r\u0182\u0183\f\13\2\2"+ - "\u0183\u0184\78\2\2\u0184\u0193\5(\25\f\u0185\u0186\f\n\2\2\u0186\u0187"+ - "\7\4\2\2\u0187\u0193\5(\25\n\u0188\u0189\f\t\2\2\u0189\u018a\t\t\2\2\u018a"+ - "\u0193\5(\25\t\u018b\u018c\f\32\2\2\u018c\u018d\7\"\2\2\u018d\u018e\5"+ - "(\25\2\u018e\u018f\7#\2\2\u018f\u0193\3\2\2\2\u0190\u0191\f\27\2\2\u0191"+ - "\u0193\t\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"+ - "\u017c\3\2\2\2\u0192\u017f\3\2\2\2\u0192\u0182\3\2\2\2\u0192\u0185\3\2"+ - "\2\2\u0192\u0188\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(\25\2\u0198\u0199\7\13\2\2\u0199\u019b"+ - "\5(\25\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\5.\30\2"+ - "\u01a0\u019f\3\2\2\2\u01a1\u01a4\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a3"+ - "\3\2\2\2\u01a3-\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a5\u01a9\5\60\31\2\u01a6"+ - "\u01a9\5\62\32\2\u01a7\u01a9\5\64\33\2\u01a8\u01a5\3\2\2\2\u01a8\u01a6"+ - "\3\2\2\2\u01a8\u01a7\3\2\2\2\u01a9/\3\2\2\2\u01aa\u01ab\7T\2\2\u01ab\u01b2"+ - "\7\17\2\2\u01ac\u01ae\7(\2\2\u01ad\u01af\7T\2\2\u01ae\u01ad\3\2\2\2\u01ae"+ - "\u01af\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\u01b2\7\17\2\2\u01b1\u01aa\3"+ - "\2\2\2\u01b1\u01ac\3\2\2\2\u01b2\61\3\2\2\2\u01b3\u01b5\7E\2\2\u01b4\u01b6"+ - "\5\66\34\2\u01b5\u01b4\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\63\3\2\2\2\u01b7"+ - "\u01b8\7C\2\2\u01b8\u01bd\58\35\2\u01b9\u01ba\7\13\2\2\u01ba\u01bc\58"+ - "\35\2\u01bb\u01b9\3\2\2\2\u01bc\u01bf\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd"+ - "\u01be\3\2\2\2\u01be\65\3\2\2\2\u01bf\u01bd\3\2\2\2\u01c0\u01d8\58\35"+ - "\2\u01c1\u01c2\7D\2\2\u01c2\u01d8\58\35\2\u01c3\u01c4\58\35\2\u01c4\u01c5"+ - "\7\13\2\2\u01c5\u01c6\7T\2\2\u01c6\u01d8\3\2\2\2\u01c7\u01c8\7\6\2\2\u01c8"+ - "\u01c9\58\35\2\u01c9\u01ca\7\7\2\2\u01ca\u01cb\7\13\2\2\u01cb\u01cc\7"+ - "T\2\2\u01cc\u01d8\3\2\2\2\u01cd\u01ce\7\6\2\2\u01ce\u01cf\58\35\2\u01cf"+ - "\u01d0\7\13\2\2\u01d0\u01d1\7T\2\2\u01d1\u01d2\7\7\2\2\u01d2\u01d8\3\2"+ - "\2\2\u01d3\u01d4\7\6\2\2\u01d4\u01d5\58\35\2\u01d5\u01d6\7\7\2\2\u01d6"+ - "\u01d8\3\2\2\2\u01d7\u01c0\3\2\2\2\u01d7\u01c1\3\2\2\2\u01d7\u01c3\3\2"+ - "\2\2\u01d7\u01c7\3\2\2\2\u01d7\u01cd\3\2\2\2\u01d7\u01d3\3\2\2\2\u01d8"+ - "\67\3\2\2\2\u01d9\u01da\b\35\1\2\u01da\u01db\7\"\2\2\u01db\u01dc\58\35"+ - "\2\u01dc\u01dd\7#\2\2\u01dd\u01e8\3\2\2\2\u01de\u01df\t\n\2\2\u01df\u01e8"+ - "\58\35\n\u01e0\u01e8\7T\2\2\u01e1\u01e8\7U\2\2\u01e2\u01e3\7\b\2\2\u01e3"+ - "\u01e4\7T\2\2\u01e4\u01e8\7\t\2\2\u01e5\u01e8\7K\2\2\u01e6\u01e8\7I\2"+ - "\2\u01e7\u01d9\3\2\2\2\u01e7\u01de\3\2\2\2\u01e7\u01e0\3\2\2\2\u01e7\u01e1"+ - "\3\2\2\2\u01e7\u01e2\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7\u01e6\3\2\2\2\u01e8"+ - "\u01f4\3\2\2\2\u01e9\u01ea\f\13\2\2\u01ea\u01eb\t\5\2\2\u01eb\u01f3\5"+ - "8\35\f\u01ec\u01ed\f\t\2\2\u01ed\u01ee\t\13\2\2\u01ee\u01f3\58\35\n\u01ef"+ - "\u01f0\f\b\2\2\u01f0\u01f1\t\7\2\2\u01f1\u01f3\58\35\t\u01f2\u01e9\3\2"+ - "\2\2\u01f2\u01ec\3\2\2\2\u01f2\u01ef\3\2\2\2\u01f3\u01f6\3\2\2\2\u01f4"+ - "\u01f2\3\2\2\2\u01f4\u01f5\3\2\2\2\u01f59\3\2\2\2\u01f6\u01f4\3\2\2\2"+ - "\66DMRW^dkrx}\u0083\u008d\u00a1\u00a3\u00aa\u00b0\u00b7\u00c7\u00cc\u00d1"+ - "\u00de\u00e1\u00ea\u00f5\u00fa\u0102\u010b\u0110\u0114\u0119\u011f\u012b"+ - "\u0131\u0138\u013b\u013d\u0148\u015e\u0168\u0192\u0194\u019c\u01a2\u01a8"+ - "\u01ae\u01b1\u01b5\u01bd\u01d7\u01e7\u01f2\u01f4"; + "\u00bb\7U\2\2\u00bb\33\3\2\2\2\u00bc\u00c9\7\24\2\2\u00bd\u00c9\7\25\2"+ + "\2\u00be\u00bf\7\26\2\2\u00bf\u00c0\7\6\2\2\u00c0\u00c1\7L\2\2\u00c1\u00c9"+ + "\7\7\2\2\u00c2\u00c3\7\27\2\2\u00c3\u00c4\7\6\2\2\u00c4\u00c5\7U\2\2\u00c5"+ + "\u00c9\7\7\2\2\u00c6\u00c9\7\23\2\2\u00c7\u00c9\7\30\2\2\u00c8\u00bc\3"+ + "\2\2\2\u00c8\u00bd\3\2\2\2\u00c8\u00be\3\2\2\2\u00c8\u00c2\3\2\2\2\u00c8"+ + "\u00c6\3\2\2\2\u00c8\u00c7\3\2\2\2\u00c9\35\3\2\2\2\u00ca\u00cc\5 \21"+ + "\2\u00cb\u00ca\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00cb\3\2\2\2\u00cd\u00ce"+ + "\3\2\2\2\u00ce\37\3\2\2\2\u00cf\u010d\5\16\b\2\u00d0\u00d2\7\b\2\2\u00d1"+ + "\u00d3\5\36\20\2\u00d2\u00d1\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u00d4\3"+ + "\2\2\2\u00d4\u010d\7\t\2\2\u00d5\u00d6\5(\25\2\u00d6\u00d7\7\5\2\2\u00d7"+ + "\u010d\3\2\2\2\u00d8\u00d9\7\31\2\2\u00d9\u00da\7\6\2\2\u00da\u00db\5"+ + "(\25\2\u00db\u00dc\7\7\2\2\u00dc\u00df\5 \21\2\u00dd\u00de\7\32\2\2\u00de"+ + "\u00e0\5 \21\2\u00df\u00dd\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0\u010d\3\2"+ + "\2\2\u00e1\u00e3\5\34\17\2\u00e2\u00e1\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3"+ + "\u00e4\3\2\2\2\u00e4\u00e5\7\33\2\2\u00e5\u00e6\7\6\2\2\u00e6\u00e7\5"+ + "(\25\2\u00e7\u00e8\7\7\2\2\u00e8\u00e9\5 \21\2\u00e9\u010d\3\2\2\2\u00ea"+ + "\u00ec\5\34\17\2\u00eb\u00ea\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\u00ed\3"+ + "\2\2\2\u00ed\u00ee\7\34\2\2\u00ee\u00ef\5 \21\2\u00ef\u00f0\7\33\2\2\u00f0"+ + "\u00f1\7\6\2\2\u00f1\u00f2\5(\25\2\u00f2\u00f3\7\7\2\2\u00f3\u00f4\7\5"+ + "\2\2\u00f4\u010d\3\2\2\2\u00f5\u00f7\5\34\17\2\u00f6\u00f5\3\2\2\2\u00f6"+ + "\u00f7\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8\u00f9\7\35\2\2\u00f9\u00fb\7"+ + "\6\2\2\u00fa\u00fc\5\"\22\2\u00fb\u00fa\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc"+ + "\u00fd\3\2\2\2\u00fd\u00fe\5$\23\2\u00fe\u00ff\7\7\2\2\u00ff\u0100\5 "+ + "\21\2\u0100\u010d\3\2\2\2\u0101\u0103\7\36\2\2\u0102\u0104\5(\25\2\u0103"+ + "\u0102\3\2\2\2\u0103\u0104\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u010d\7\5"+ + "\2\2\u0106\u0107\7\37\2\2\u0107\u0108\7\b\2\2\u0108\u0109\5,\27\2\u0109"+ + "\u010a\7\t\2\2\u010a\u010d\3\2\2\2\u010b\u010d\5\22\n\2\u010c\u00cf\3"+ + "\2\2\2\u010c\u00d0\3\2\2\2\u010c\u00d5\3\2\2\2\u010c\u00d8\3\2\2\2\u010c"+ + "\u00e2\3\2\2\2\u010c\u00eb\3\2\2\2\u010c\u00f6\3\2\2\2\u010c\u0101\3\2"+ + "\2\2\u010c\u0106\3\2\2\2\u010c\u010b\3\2\2\2\u010d!\3\2\2\2\u010e\u0110"+ + "\5\34\17\2\u010f\u010e\3\2\2\2\u0110\u0113\3\2\2\2\u0111\u010f\3\2\2\2"+ + "\u0111\u0112\3\2\2\2\u0112\u0115\3\2\2\2\u0113\u0111\3\2\2\2\u0114\u0116"+ + "\5&\24\2\u0115\u0114\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u011a\3\2\2\2\u0117"+ + "\u0119\5\34\17\2\u0118\u0117\3\2\2\2\u0119\u011c\3\2\2\2\u011a\u0118\3"+ + "\2\2\2\u011a\u011b\3\2\2\2\u011b\u011d\3\2\2\2\u011c\u011a\3\2\2\2\u011d"+ + "\u0120\7U\2\2\u011e\u011f\7\4\2\2\u011f\u0121\5(\25\2\u0120\u011e\3\2"+ + "\2\2\u0120\u0121\3\2\2\2\u0121#\3\2\2\2\u0122\u0123\7\5\2\2\u0123\u0124"+ + "\5(\25\2\u0124\u0125\7\5\2\2\u0125\u0126\5(\25\2\u0126\u012d\3\2\2\2\u0127"+ + "\u0128\7\17\2\2\u0128\u0129\5(\25\2\u0129\u012a\7 \2\2\u012a\u012b\5("+ + "\25\2\u012b\u012d\3\2\2\2\u012c\u0122\3\2\2\2\u012c\u0127\3\2\2\2\u012d"+ + "%\3\2\2\2\u012e\u012f\b\24\1\2\u012f\u0133\7H\2\2\u0130\u0131\7!\2\2\u0131"+ + "\u0133\7H\2\2\u0132\u012e\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u013e\3\2"+ + "\2\2\u0134\u0135\f\4\2\2\u0135\u013d\7\"\2\2\u0136\u0137\f\3\2\2\u0137"+ + "\u0139\7#\2\2\u0138\u013a\5(\25\2\u0139\u0138\3\2\2\2\u0139\u013a\3\2"+ + "\2\2\u013a\u013b\3\2\2\2\u013b\u013d\7$\2\2\u013c\u0134\3\2\2\2\u013c"+ + "\u0136\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c\3\2\2\2\u013e\u013f\3\2"+ + "\2\2\u013f\'\3\2\2\2\u0140\u013e\3\2\2\2\u0141\u0142\b\25\1\2\u0142\u0143"+ + "\7\6\2\2\u0143\u0144\5(\25\2\u0144\u0145\7\7\2\2\u0145\u016a\3\2\2\2\u0146"+ + "\u0147\7U\2\2\u0147\u0149\7\6\2\2\u0148\u014a\5*\26\2\u0149\u0148\3\2"+ + "\2\2\u0149\u014a\3\2\2\2\u014a\u014b\3\2\2\2\u014b\u016a\7\7\2\2\u014c"+ + "\u014d\7\6\2\2\u014d\u014e\5&\24\2\u014e\u014f\7\7\2\2\u014f\u0150\5("+ + "\25\31\u0150\u016a\3\2\2\2\u0151\u0152\t\2\2\2\u0152\u016a\5(\25\30\u0153"+ + "\u0154\7\"\2\2\u0154\u016a\5(\25\26\u0155\u0156\t\3\2\2\u0156\u016a\5"+ + "(\25\25\u0157\u0158\t\4\2\2\u0158\u016a\5(\25\21\u0159\u015a\7\b\2\2\u015a"+ + "\u015f\5(\25\2\u015b\u015c\7\13\2\2\u015c\u015e\5(\25\2\u015d\u015b\3"+ + "\2\2\2\u015e\u0161\3\2\2\2\u015f\u015d\3\2\2\2\u015f\u0160\3\2\2\2\u0160"+ + "\u0162\3\2\2\2\u0161\u015f\3\2\2\2\u0162\u0163\7\t\2\2\u0163\u016a\3\2"+ + "\2\2\u0164\u016a\7U\2\2\u0165\u016a\7L\2\2\u0166\u016a\7I\2\2\u0167\u016a"+ + "\7J\2\2\u0168\u016a\7K\2\2\u0169\u0141\3\2\2\2\u0169\u0146\3\2\2\2\u0169"+ + "\u014c\3\2\2\2\u0169\u0151\3\2\2\2\u0169\u0153\3\2\2\2\u0169\u0155\3\2"+ + "\2\2\u0169\u0157\3\2\2\2\u0169\u0159\3\2\2\2\u0169\u0164\3\2\2\2\u0169"+ + "\u0165\3\2\2\2\u0169\u0166\3\2\2\2\u0169\u0167\3\2\2\2\u0169\u0168\3\2"+ + "\2\2\u016a\u0195\3\2\2\2\u016b\u016c\f\24\2\2\u016c\u016d\t\5\2\2\u016d"+ + "\u0194\5(\25\25\u016e\u016f\f\23\2\2\u016f\u0170\t\6\2\2\u0170\u0194\5"+ + "(\25\24\u0171\u0172\f\22\2\2\u0172\u0173\t\7\2\2\u0173\u0194\5(\25\23"+ + "\u0174\u0175\f\20\2\2\u0175\u0176\t\b\2\2\u0176\u0194\5(\25\21\u0177\u0178"+ + "\f\17\2\2\u0178\u0179\7*\2\2\u0179\u0194\5(\25\20\u017a\u017b\f\16\2\2"+ + "\u017b\u017c\7\66\2\2\u017c\u0194\5(\25\17\u017d\u017e\f\r\2\2\u017e\u017f"+ + "\7\67\2\2\u017f\u0194\5(\25\16\u0180\u0181\f\f\2\2\u0181\u0182\78\2\2"+ + "\u0182\u0194\5(\25\r\u0183\u0184\f\13\2\2\u0184\u0185\79\2\2\u0185\u0194"+ + "\5(\25\f\u0186\u0187\f\n\2\2\u0187\u0188\7\4\2\2\u0188\u0194\5(\25\n\u0189"+ + "\u018a\f\t\2\2\u018a\u018b\t\t\2\2\u018b\u0194\5(\25\t\u018c\u018d\f\32"+ + "\2\2\u018d\u018e\7#\2\2\u018e\u018f\5(\25\2\u018f\u0190\7$\2\2\u0190\u0194"+ + "\3\2\2\2\u0191\u0192\f\27\2\2\u0192\u0194\t\2\2\2\u0193\u016b\3\2\2\2"+ + "\u0193\u016e\3\2\2\2\u0193\u0171\3\2\2\2\u0193\u0174\3\2\2\2\u0193\u0177"+ + "\3\2\2\2\u0193\u017a\3\2\2\2\u0193\u017d\3\2\2\2\u0193\u0180\3\2\2\2\u0193"+ + "\u0183\3\2\2\2\u0193\u0186\3\2\2\2\u0193\u0189\3\2\2\2\u0193\u018c\3\2"+ + "\2\2\u0193\u0191\3\2\2\2\u0194\u0197\3\2\2\2\u0195\u0193\3\2\2\2\u0195"+ + "\u0196\3\2\2\2\u0196)\3\2\2\2\u0197\u0195\3\2\2\2\u0198\u019d\5(\25\2"+ + "\u0199\u019a\7\13\2\2\u019a\u019c\5(\25\2\u019b\u0199\3\2\2\2\u019c\u019f"+ + "\3\2\2\2\u019d\u019b\3\2\2\2\u019d\u019e\3\2\2\2\u019e+\3\2\2\2\u019f"+ + "\u019d\3\2\2\2\u01a0\u01a2\5.\30\2\u01a1\u01a0\3\2\2\2\u01a2\u01a5\3\2"+ + "\2\2\u01a3\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4-\3\2\2\2\u01a5\u01a3"+ + "\3\2\2\2\u01a6\u01aa\5\60\31\2\u01a7\u01aa\5\62\32\2\u01a8\u01aa\5\64"+ + "\33\2\u01a9\u01a6\3\2\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01a8\3\2\2\2\u01aa"+ + "/\3\2\2\2\u01ab\u01ac\7U\2\2\u01ac\u01b3\7\17\2\2\u01ad\u01af\7)\2\2\u01ae"+ + "\u01b0\7U\2\2\u01af\u01ae\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\u01b1\3\2"+ + "\2\2\u01b1\u01b3\7\17\2\2\u01b2\u01ab\3\2\2\2\u01b2\u01ad\3\2\2\2\u01b3"+ + "\61\3\2\2\2\u01b4\u01b6\7F\2\2\u01b5\u01b7\5\66\34\2\u01b6\u01b5\3\2\2"+ + "\2\u01b6\u01b7\3\2\2\2\u01b7\63\3\2\2\2\u01b8\u01b9\7D\2\2\u01b9\u01be"+ + "\58\35\2\u01ba\u01bb\7\13\2\2\u01bb\u01bd\58\35\2\u01bc\u01ba\3\2\2\2"+ + "\u01bd\u01c0\3\2\2\2\u01be\u01bc\3\2\2\2\u01be\u01bf\3\2\2\2\u01bf\65"+ + "\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01d9\58\35\2\u01c2\u01c3\7E\2\2\u01c3"+ + "\u01d9\58\35\2\u01c4\u01c5\58\35\2\u01c5\u01c6\7\13\2\2\u01c6\u01c7\7"+ + "U\2\2\u01c7\u01d9\3\2\2\2\u01c8\u01c9\7\6\2\2\u01c9\u01ca\58\35\2\u01ca"+ + "\u01cb\7\7\2\2\u01cb\u01cc\7\13\2\2\u01cc\u01cd\7U\2\2\u01cd\u01d9\3\2"+ + "\2\2\u01ce\u01cf\7\6\2\2\u01cf\u01d0\58\35\2\u01d0\u01d1\7\13\2\2\u01d1"+ + "\u01d2\7U\2\2\u01d2\u01d3\7\7\2\2\u01d3\u01d9\3\2\2\2\u01d4\u01d5\7\6"+ + "\2\2\u01d5\u01d6\58\35\2\u01d6\u01d7\7\7\2\2\u01d7\u01d9\3\2\2\2\u01d8"+ + "\u01c1\3\2\2\2\u01d8\u01c2\3\2\2\2\u01d8\u01c4\3\2\2\2\u01d8\u01c8\3\2"+ + "\2\2\u01d8\u01ce\3\2\2\2\u01d8\u01d4\3\2\2\2\u01d9\67\3\2\2\2\u01da\u01db"+ + "\b\35\1\2\u01db\u01dc\7#\2\2\u01dc\u01dd\58\35\2\u01dd\u01de\7$\2\2\u01de"+ + "\u01e9\3\2\2\2\u01df\u01e0\t\n\2\2\u01e0\u01e9\58\35\n\u01e1\u01e9\7U"+ + "\2\2\u01e2\u01e9\7V\2\2\u01e3\u01e4\7\b\2\2\u01e4\u01e5\7U\2\2\u01e5\u01e9"+ + "\7\t\2\2\u01e6\u01e9\7L\2\2\u01e7\u01e9\7J\2\2\u01e8\u01da\3\2\2\2\u01e8"+ + "\u01df\3\2\2\2\u01e8\u01e1\3\2\2\2\u01e8\u01e2\3\2\2\2\u01e8\u01e3\3\2"+ + "\2\2\u01e8\u01e6\3\2\2\2\u01e8\u01e7\3\2\2\2\u01e9\u01f5\3\2\2\2\u01ea"+ + "\u01eb\f\13\2\2\u01eb\u01ec\t\5\2\2\u01ec\u01f4\58\35\f\u01ed\u01ee\f"+ + "\t\2\2\u01ee\u01ef\t\13\2\2\u01ef\u01f4\58\35\n\u01f0\u01f1\f\b\2\2\u01f1"+ + "\u01f2\t\7\2\2\u01f2\u01f4\58\35\t\u01f3\u01ea\3\2\2\2\u01f3\u01ed\3\2"+ + "\2\2\u01f3\u01f0\3\2\2\2\u01f4\u01f7\3\2\2\2\u01f5\u01f3\3\2\2\2\u01f5"+ + "\u01f6\3\2\2\2\u01f69\3\2\2\2\u01f7\u01f5\3\2\2\2\66DMRW^dkrx}\u0083\u008d"+ + "\u00a1\u00a3\u00aa\u00b0\u00b7\u00c8\u00cd\u00d2\u00df\u00e2\u00eb\u00f6"+ + "\u00fb\u0103\u010c\u0111\u0115\u011a\u0120\u012c\u0132\u0139\u013c\u013e"+ + "\u0149\u015f\u0169\u0193\u0195\u019d\u01a3\u01a9\u01af\u01b2\u01b6\u01be"+ + "\u01d8\u01e8\u01f3\u01f5"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java index 860e3b05a..84c2715e9 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java @@ -1,4 +1,4 @@ -// Generated from C:/c64/kickc/src/main/java/dk/camelot64/kickc/parser\KickC.g4 by ANTLR 4.7 +// Generated from /Users/jespergravgaard/c64/kickc/src/main/java/dk/camelot64/kickc/parser/KickC.g4 by ANTLR 4.7 package dk.camelot64.kickc.parser; import org.antlr.v4.runtime.tree.ParseTreeVisitor; @@ -159,6 +159,13 @@ public interface KickCVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDirectiveInline(KickCParser.DirectiveInlineContext ctx); + /** + * Visit a parse tree produced by the {@code directiveInterrupt} + * labeled alternative in {@link KickCParser#directive}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDirectiveInterrupt(KickCParser.DirectiveInterruptContext ctx); /** * Visit a parse tree produced by {@link KickCParser#stmtSeq}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 488f78bc0..e221d9bdd 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -666,7 +666,11 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { @Override public Object visitExprAssignmentCompound(KickCParser.ExprAssignmentCompoundContext ctx) { // Assignment (rValue/lValue) - LValue lValue = (LValue) visit(ctx.expr(0)); + Object value = visit(ctx.expr(0)); + if(!(value instanceof LValue)) { + throw new CompileError("Error! Illegal assigment Lvalue "+value.toString(), new StatementSource(ctx)); + } + LValue lValue = (LValue) value; if(lValue instanceof VariableRef && ((VariableRef) lValue).isIntermediate()) { // Encountered an intermediate variable. This must be turned into a proper LValue later. Put it into a marker to signify that lValue = new LvalueIntermediate((VariableRef) lValue); diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index d28706c7b..5d3d6e194 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -48,7 +48,7 @@ public class TestPrograms { @Test public void testMultiplexer() throws IOException, URISyntaxException { - compileAndCompare("multiplexer"); + compileAndCompare("simple-multiplexer"); } @Test diff --git a/src/test/java/dk/camelot64/kickc/test/kc/balloon.png b/src/test/java/dk/camelot64/kickc/test/kc/balloon.png new file mode 100644 index 000000000..dd77df5fe Binary files /dev/null and b/src/test/java/dk/camelot64/kickc/test/kc/balloon.png differ diff --git a/src/test/java/dk/camelot64/kickc/test/kc/balloon.pxi b/src/test/java/dk/camelot64/kickc/test/kc/balloon.pxi new file mode 100644 index 000000000..8a0daa444 Binary files /dev/null and b/src/test/java/dk/camelot64/kickc/test/kc/balloon.pxi differ diff --git a/src/test/java/dk/camelot64/kickc/test/kc/multiplexer.kc b/src/test/java/dk/camelot64/kickc/test/kc/multiplexer.kc index 8130b4b80..c2d74d223 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/multiplexer.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/multiplexer.kc @@ -1,40 +1,55 @@ // A flexible sprite multiplexer routine -import "print.kc" + +// TODO: Let the caller specify the number of sprites (PLEX_COUNT) +// TODO: Optimize plexSort() - currently nxt_idx and nxt_y are stored in the outer loop. + +import "c64" +import "sinus" // The number of sprites in the multiplexer -const byte PLEX_COUNT = 10; +const byte PLEX_COUNT = 24; // The x-positions of the multiplexer sprites ($000-$1ff) word[PLEX_COUNT] PLEX_XPOS; -// The y-positions of the multiplexer sprites -byte[PLEX_COUNT] PLEX_YPOS = { $ff, $12, $11, $34, $2, $81, $77, $81, $ef, $11 }; +// The y-positions of the multiplexer sprites. +byte[PLEX_COUNT] PLEX_YPOS; // The sprite pointers for the multiplexed sprites byte[PLEX_COUNT] PLEX_PTR; -// The address of the sprite pointers on the current screen (screen+$3e8). -byte* PLEX_SCREEN_PTR = $400+$3e8; +// The address of the sprite pointers on the current screen (screen+$3f8). +byte* PLEX_SCREEN_PTR = $400+$3f8; // Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. byte[PLEX_COUNT] PLEX_SORTED_IDX; -// Set the address of the sprite pointers on the current screen (screen+$3e8) -inline void plexSetScreenPtr(byte* plexScreenPtr) { - PLEX_SCREEN_PTR = plexScreenPtr; -} +// Variables controlling the showing of sprites + +// The index in the PLEX tables of the next sprite to show +byte plex_show_idx=0; +// The index the next sprite to use for showing (sprites are used round-robin) +byte plex_sprite_idx=0; +// The MSB bit of the next sprite to use for showing +byte plex_sprite_msb=1; // Initialize the multiplexer data structures -void plexInit() { +void plexInit(byte* screen) { + plexSetScreen(screen); for(byte i: 0..PLEX_COUNT-1) { PLEX_SORTED_IDX[i] = i; } } -// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions of the sprites +// Set the address of the current screen used for setting sprite pointers (at screen+$3f8) +inline void plexSetScreen(byte* screen) { + PLEX_SCREEN_PTR = screen+$3f8; +} + +// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS // Assumes that the positions are nearly sorted already (as each sprite just moves a bit) -// Uses an insertion sort -// 1. Moves a marker from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. +// Uses an insertion sort: +// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. // 2a. If the next element after the marker is larger that the current element // the marker can be moved forwards (as the sorting is correct). // 2b. If the next element after the marker is smaller than the current element: @@ -44,8 +59,7 @@ void plexSort() { for(byte m: 0..PLEX_COUNT-2) { byte nxt_idx = PLEX_SORTED_IDX[m+1]; byte nxt_y = PLEX_YPOS[nxt_idx]; - byte cur_idx = PLEX_SORTED_IDX[m]; - if(nxt_yPLEX_XPOS[xpos_idx]!=0) { + *SPRITES_XMSB |= plex_sprite_msb; + } else { + *SPRITES_XMSB &= ($ff^plex_sprite_msb); + } + plex_sprite_idx = (plex_sprite_idx+1)&7; + plex_show_idx++; + plex_sprite_msb <<=1; + if(plex_sprite_msb==0) { + plex_sprite_msb = 1; } - print_ln(); } - - - - +// Get the y-position of the next sprite to show +inline byte plexShowNextYpos() { + return PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]]; +} \ No newline at end of file diff --git a/src/test/java/dk/camelot64/kickc/test/kc/simple-multiplexer.kc b/src/test/java/dk/camelot64/kickc/test/kc/simple-multiplexer.kc new file mode 100644 index 000000000..14a69c152 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/kc/simple-multiplexer.kc @@ -0,0 +1,89 @@ +// A simple usage of the flexible sprite multiplexer routine +import "c64" +import "multiplexer" + +// Location of screen & sprites +byte* SPRITE = $2000; +byte* SCREEN = $400; +byte* YSIN = $2100; + +// The size of the y-sinus +word YSIN_SIZE = 256; +// The y-sinus byte table +//byte[YSIN_SIZE] ysin; + +kickasm(pc YSIN) {{ + .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) +}} + + +kickasm(pc SPRITE, resource "balloon.png") {{ +.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) +}} + +void main() { + asm { sei } + init(); + loop(); +} + +// Initialize the program +void init() { + *D011 = VIC_DEN | VIC_RSEL | 3; + // Initialize the multiplexer + plexInit(SCREEN); + // Set the x-positions & pointers + word xp = 32; + for(byte sx: 0..PLEX_COUNT-1) { + PLEX_PTR[sx] = (byte)(SPRITE/$40); + PLEX_XPOS[sx<<1] = xp; + xp += 12; + } + + // Enable & initialize sprites + *SPRITES_ENABLE = $ff; + for(byte ss: 0..7) { + SPRITES_COLS[ss] = GREEN; + } +} + +// The raster loop +void loop() { + // The current index into the y-sinus + byte sin_idx = 0; + while(true) { + while(*RASTER!=$ff) {} + // Assign sinus positions + (*BORDERCOL)++; + byte y_idx = sin_idx; + for(byte sy: 0..PLEX_COUNT-1) { + PLEX_YPOS[sy] = YSIN[y_idx]; + y_idx += 10; + } + sin_idx +=1; + // Sort the sprites by y-position + (*BORDERCOL)++; + plexSort(); + // Show the first 8 sprites + (*BORDERCOL)++; + for( byte ss: 0..7) { + plexShowSprite(); + } + // Show the next 8 sprites + for( byte ss2: 8..PLEX_COUNT-1) { + *BORDERCOL = BLACK; + byte rasterY = plexShowNextYpos()-8; + while(*RASTER$400 - sta print_line_cursor+1 - lda #<$400 - sta print_char_cursor - lda #>$400 - sta print_char_cursor+1 - jsr print_plex - jsr plexSort - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - jsr print_plex - rts -} -print_plex: { - ldx #0 - b1: - lda PLEX_SORTED_IDX,x - tay - lda PLEX_YPOS,y - sta print_byte.b - jsr print_byte - lda #' ' - jsr print_char - inx - cpx #PLEX_COUNT-1+1 - bne b1 - jsr print_ln - rts -} -print_ln: { - b1: - lda print_line_cursor - clc - adc #$28 - 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_char: { - ldy #0 - sta (print_char_cursor),y - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - rts -} -print_byte: { - .label b = 6 - lda b - lsr - lsr - lsr - lsr - tay - lda print_hextab,y - jsr print_char - lda #$f - and b - tay - lda print_hextab,y - jsr print_char - rts -} -plexSort: { - .label nxt_idx = 7 - .label nxt_y = 8 - .label m = 6 - lda #0 - sta m - b1: - ldy m - lda PLEX_SORTED_IDX+1,y - sta nxt_idx - tay - lda PLEX_YPOS,y - sta nxt_y - ldx m - ldy PLEX_SORTED_IDX,x - cmp PLEX_YPOS,y - bcs b2 - b3: - lda PLEX_SORTED_IDX,x - sta PLEX_SORTED_IDX+1,x - dex - cpx #$ff - bne b7 - b5: - inx - lda nxt_idx - sta PLEX_SORTED_IDX,x - b2: - inc m - lda m - cmp #PLEX_COUNT-2+1 - bne b1 - rts - b7: - lda nxt_y - ldy PLEX_SORTED_IDX,x - cmp PLEX_YPOS,y - bcc b3 - jmp b5 -} -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 -} -plexInit: { - ldx #0 - b1: - txa - sta PLEX_SORTED_IDX,x - inx - cpx #PLEX_COUNT-1+1 - bne b1 - rts -} - print_hextab: .text "0123456789abcdef" - PLEX_YPOS: .byte $ff, $12, $11, $34, 2, $81, $77, $81, $ef, $11 - PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.cfg b/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.cfg deleted file mode 100644 index 6073abe02..000000000 --- a/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.cfg +++ /dev/null @@ -1,147 +0,0 @@ -@begin: scope:[] from - [0] phi() [ ] ( ) - to:@19 -@19: scope:[] from @begin - [1] phi() [ ] ( ) - [2] call main [ ] ( ) - to:@end -@end: scope:[] from @19 - [3] phi() [ ] ( ) -main: scope:[main] from @19 - [4] phi() [ ] ( main:2 [ ] ) - [5] call plexInit [ ] ( main:2 [ ] ) - to:main::@1 -main::@1: scope:[main] from main - [6] phi() [ ] ( main:2 [ ] ) - [7] call print_cls [ ] ( main:2 [ ] ) - to:main::@2 -main::@2: scope:[main] from main::@1 - [8] phi() [ ] ( main:2 [ ] ) - [9] call print_plex [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - to:main::@3 -main::@3: scope:[main] from main::@2 - [10] phi() [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - [11] call plexSort [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - to:main::@4 -main::@4: scope:[main] from main::@3 - [12] (byte*~) print_char_cursor#47 ← (byte*) print_line_cursor#1 [ print_char_cursor#47 print_line_cursor#1 ] ( main:2 [ print_char_cursor#47 print_line_cursor#1 ] ) - [13] call print_plex [ ] ( main:2 [ ] ) - to:main::@return -main::@return: scope:[main] from main::@4 - [14] return [ ] ( main:2 [ ] ) - to:@return -print_plex: scope:[print_plex] from main::@2 main::@4 - [15] (byte*) print_line_cursor#34 ← phi( main::@2/((byte*))(word/signed word/dword/signed dword) 1024 main::@4/(byte*) print_line_cursor#1 ) [ print_char_cursor#44 print_line_cursor#34 ] ( main:2::print_plex:9 [ print_char_cursor#44 print_line_cursor#34 ] main:2::print_plex:13 [ print_char_cursor#44 print_line_cursor#34 ] ) - [15] (byte*) print_char_cursor#44 ← phi( main::@2/((byte*))(word/signed word/dword/signed dword) 1024 main::@4/(byte*~) print_char_cursor#47 ) [ print_char_cursor#44 print_line_cursor#34 ] ( main:2::print_plex:9 [ print_char_cursor#44 print_line_cursor#34 ] main:2::print_plex:13 [ print_char_cursor#44 print_line_cursor#34 ] ) - to:print_plex::@1 -print_plex::@1: scope:[print_plex] from print_plex print_plex::@4 - [16] (byte*) print_char_cursor#40 ← phi( print_plex/(byte*) print_char_cursor#44 print_plex::@4/(byte*) print_char_cursor#25 ) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ) - [16] (byte) print_plex::i#2 ← phi( print_plex/(byte/signed byte/word/signed word/dword/signed dword) 0 print_plex::@4/(byte) print_plex::i#1 ) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ) - [17] (byte) print_byte::b#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ) - [18] call print_byte [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_plex::@3 -print_plex::@3: scope:[print_plex] from print_plex::@1 - [19] phi() [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - [20] call print_char [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_plex::@4 -print_plex::@4: scope:[print_plex] from print_plex::@3 - [21] (byte) print_plex::i#1 ← ++ (byte) print_plex::i#2 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) - [22] if((byte) print_plex::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_plex::@1 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) - to:print_plex::@2 -print_plex::@2: scope:[print_plex] from print_plex::@4 - [23] phi() [ print_line_cursor#34 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_char_cursor#25 ] ) - [24] call print_ln [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - to:print_plex::@return -print_plex::@return: scope:[print_plex] from print_plex::@2 - [25] return [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - to:@return -print_ln: scope:[print_ln] from print_plex::@2 - [26] phi() [ print_line_cursor#34 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#34 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#34 print_char_cursor#25 ] ) - to:print_ln::@1 -print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [27] (byte*) print_line_cursor#12 ← phi( print_ln/(byte*) print_line_cursor#34 print_ln::@1/(byte*) print_line_cursor#1 ) [ print_char_cursor#25 print_line_cursor#12 ] ( main:2::print_plex:9::print_ln:24 [ print_char_cursor#25 print_line_cursor#12 ] main:2::print_plex:13::print_ln:24 [ print_char_cursor#25 print_line_cursor#12 ] ) - [28] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) - [29] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) - to:print_ln::@return -print_ln::@return: scope:[print_ln] from print_ln::@1 - [30] return [ print_line_cursor#1 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 ] ) - to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 print_plex::@3 - [31] (byte*) print_char_cursor#24 ← phi( print_byte/(byte*) print_char_cursor#40 print_byte::@1/(byte*) print_char_cursor#25 print_plex::@3/(byte*) print_char_cursor#25 ) [ print_char::ch#3 print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] ) - [31] (byte) print_char::ch#3 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 print_plex::@3/(byte) ' ' ) [ print_char::ch#3 print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] ) - [32] *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 [ print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] ) - [33] (byte*) print_char_cursor#25 ← ++ (byte*) print_char_cursor#24 [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - [34] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:@return -print_byte: scope:[print_byte] from print_plex::@1 - [35] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ) - [36] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ) - [37] call print_char [ print_char_cursor#25 print_byte::b#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] ) - to:print_byte::@1 -print_byte::@1: scope:[print_byte] from print_byte - [38] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#25 print_byte::$2 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] ) - [39] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#25 print_char::ch#1 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] ) - [40] call print_char [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@1 - [41] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:@return -plexSort: scope:[plexSort] from main::@3 - [42] phi() [ ] ( main:2::plexSort:11 [ print_line_cursor#1 ] ) - to:plexSort::@1 -plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 - [43] (byte) plexSort::m#2 ← phi( plexSort/(byte/signed byte/word/signed word/dword/signed dword) 0 plexSort::@2/(byte) plexSort::m#1 ) [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) - [44] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) - [45] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) - [46] (byte) plexSort::cur_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ) - [47] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0)) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) - to:plexSort::@10 -plexSort::@10: scope:[plexSort] from plexSort::@1 - [48] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) - to:plexSort::@3 -plexSort::@3: scope:[plexSort] from plexSort::@10 plexSort::@7 - [49] (byte) plexSort::s#3 ← phi( plexSort::@7/(byte) plexSort::s#1 plexSort::@10/(byte~) plexSort::s#6 ) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) - [50] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) - [51] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) - [52] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) - to:plexSort::@5 -plexSort::@5: scope:[plexSort] from plexSort::@3 plexSort::@7 - [53] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) - [54] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) - to:plexSort::@2 -plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 - [55] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) - [56] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) - to:plexSort::@return -plexSort::@return: scope:[plexSort] from plexSort::@2 - [57] return [ ] ( main:2::plexSort:11 [ print_line_cursor#1 ] ) - to:@return -plexSort::@7: scope:[plexSort] from plexSort::@3 - [58] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) - to:plexSort::@5 -print_cls: scope:[print_cls] from main::@1 - [59] phi() [ ] ( main:2::print_cls:7 [ ] ) - to:print_cls::@1 -print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - [60] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) - [61] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) - [62] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) - [63] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@1 - [64] return [ ] ( main:2::print_cls:7 [ ] ) - to:@return -plexInit: scope:[plexInit] from main - [65] phi() [ ] ( main:2::plexInit:5 [ ] ) - to:plexInit::@1 -plexInit::@1: scope:[plexInit] from plexInit plexInit::@1 - [66] (byte) plexInit::i#2 ← phi( plexInit/(byte/signed byte/word/signed word/dword/signed dword) 0 plexInit::@1/(byte) plexInit::i#1 ) [ plexInit::i#2 ] ( main:2::plexInit:5 [ plexInit::i#2 ] ) - [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:2::plexInit:5 [ plexInit::i#2 ] ) - [68] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) - [69] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) - to:plexInit::@return -plexInit::@return: scope:[plexInit] from plexInit::@1 - [70] return [ ] ( main:2::plexInit:5 [ ] ) - to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.log b/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.log deleted file mode 100644 index 3bfeee3e0..000000000 --- a/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.log +++ /dev/null @@ -1,3359 +0,0 @@ -PARSING src/test/java/dk/camelot64/kickc/test/kc/multiplexer.kc -// A flexible sprite multiplexer routine -import "print.kc" - -// The number of sprites in the multiplexer -const byte PLEX_COUNT = 10; - -// The x-positions of the multiplexer sprites ($000-$1ff) -word[PLEX_COUNT] PLEX_XPOS; - -// The y-positions of the multiplexer sprites -byte[PLEX_COUNT] PLEX_YPOS = { $ff, $12, $11, $34, $2, $81, $77, $81, $ef, $11 }; - -// The sprite pointers for the multiplexed sprites -byte[PLEX_COUNT] PLEX_PTR; - -// The address of the sprite pointers on the current screen (screen+$3e8). -byte* PLEX_SCREEN_PTR = $400+$3e8; - -// Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. -byte[PLEX_COUNT] PLEX_SORTED_IDX; - -// Set the address of the sprite pointers on the current screen (screen+$3e8) -inline void plexSetScreenPtr(byte* plexScreenPtr) { - PLEX_SCREEN_PTR = plexScreenPtr; -} - -// Initialize the multiplexer data structures -void plexInit() { - for(byte i: 0..PLEX_COUNT-1) { - PLEX_SORTED_IDX[i] = i; - } -} - -// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions of the sprites -// Assumes that the positions are nearly sorted already (as each sprite just moves a bit) -// Uses an insertion sort -// 1. Moves a marker from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. -// 2a. If the next element after the marker is larger that the current element -// the marker can be moved forwards (as the sorting is correct). -// 2b. If the next element after the marker is smaller than the current element: -// elements before the marker are shifted right one at a time until encountering one smaller than the current one. -// It is then inserted at the spot. Now the marker can move forward. -void plexSort() { - for(byte m: 0..PLEX_COUNT-2) { - byte nxt_idx = PLEX_SORTED_IDX[m+1]; - byte nxt_y = PLEX_YPOS[nxt_idx]; - byte cur_idx = PLEX_SORTED_IDX[m]; - if(nxt_yw); - print_byte(dw); - print_word(>4]); - print_char(print_hextab[b&$f]); -} - -// Print a single char -void print_char(byte ch) { - *(print_char_cursor++) = ch; -} - -// Clear the screen. Also resets current line/char cursor. -void print_cls() { - for(byte* sc=print_screen; sc!=print_screen+1000; sc++) { - *sc = ' '; - } - print_line_cursor = print_screen; - print_char_cursor = print_line_cursor; -} - -// Set the screen to print on. Also resets current line/char cursor. -void print_set_screen(byte* screen) { - print_screen = screen; - print_line_cursor = print_screen; - print_char_cursor = print_line_cursor; -} - -Adding pre/post-modifier (byte*) print_str_lines::str ← ++ (byte*) print_str_lines::str -Adding pre/post-modifier (byte*) print_char_cursor ← ++ (byte*) print_char_cursor -Adding pre/post-modifier (byte*) print_char_cursor ← ++ (byte*) print_char_cursor -Adding pre/post-modifier (byte*) print_str::str ← ++ (byte*) print_str::str -Adding pre/post-modifier (byte*) print_str_at::at ← ++ (byte*) print_str_at::at -Adding pre/post-modifier (byte*) print_str_at::str ← ++ (byte*) print_str_at::str -Adding pre/post-modifier (byte*) print_char_cursor ← ++ (byte*) print_char_cursor -Adding pre/post-modifier (byte*) print_cls::sc ← ++ (byte*) print_cls::sc -Adding pre/post-modifier (byte) plexSort::s ← -- (byte) plexSort::s -Adding pre/post-modifier (byte) plexSort::s ← ++ (byte) plexSort::s -SYMBOLS -(word/signed word/dword/signed dword~) $0 -(label) @1 -(label) @10 -(label) @11 -(label) @12 -(label) @13 -(label) @14 -(label) @15 -(label) @16 -(label) @17 -(label) @18 -(label) @19 -(label) @2 -(label) @3 -(label) @4 -(label) @5 -(label) @6 -(label) @7 -(label) @8 -(label) @9 -(label) @begin -(label) @end -(byte) PLEX_COUNT -(byte[PLEX_COUNT]) PLEX_PTR -(byte*) PLEX_SCREEN_PTR -(byte[PLEX_COUNT]) PLEX_SORTED_IDX -(word[PLEX_COUNT]) PLEX_XPOS -(byte[PLEX_COUNT]) PLEX_YPOS -(void()) main() -(void~) main::$0 -(void~) main::$1 -(void~) main::$2 -(void~) main::$3 -(void~) main::$4 -(label) main::@return -(void()) plexInit() -(byte/signed word/word/dword/signed dword~) plexInit::$0 -(bool~) plexInit::$1 -(label) plexInit::@1 -(label) plexInit::@2 -(label) plexInit::@return -(byte) plexInit::i -inline (void()) plexSetScreenPtr((byte*) plexSetScreenPtr::plexScreenPtr) -(label) plexSetScreenPtr::@return -(byte*) plexSetScreenPtr::plexScreenPtr -(void()) plexSort() -(byte/signed word/word/dword/signed dword~) plexSort::$0 -(byte/signed word/word/dword/signed dword~) plexSort::$1 -(bool~) plexSort::$2 -(bool~) plexSort::$3 -(byte/signed word/word/dword/signed dword~) plexSort::$4 -(bool~) plexSort::$5 -(bool~) plexSort::$6 -(bool~) plexSort::$7 -(bool~) plexSort::$8 -(label) plexSort::@1 -(label) plexSort::@2 -(label) plexSort::@3 -(label) plexSort::@4 -(label) plexSort::@5 -(label) plexSort::@6 -(label) plexSort::@return -(byte) plexSort::cur_idx -(byte) plexSort::m -(byte) plexSort::nxt_idx -(byte) plexSort::nxt_y -(byte) plexSort::s -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 -(void~) print_byte::$1 -(byte~) print_byte::$2 -(void~) print_byte::$3 -(label) print_byte::@return -(byte) print_byte::b -(void()) print_char((byte) print_char::ch) -(label) print_char::@return -(byte) print_char::ch -(byte*) print_char_cursor -(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 -(void()) print_dword((dword) print_dword::dw) -(word~) print_dword::$0 -(void~) print_dword::$1 -(word~) print_dword::$2 -(void~) print_dword::$3 -(label) print_dword::@return -(dword) print_dword::dw -(byte[]) print_hextab -(byte*) print_line_cursor -(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_plex() -(byte/signed word/word/dword/signed dword~) print_plex::$0 -(void~) print_plex::$1 -(void~) print_plex::$2 -(bool~) print_plex::$3 -(void~) print_plex::$4 -(label) print_plex::@1 -(label) print_plex::@2 -(label) print_plex::@return -(byte) print_plex::i -(void()) print_sbyte((signed byte) print_sbyte::b) -(bool~) print_sbyte::$0 -(bool~) print_sbyte::$1 -(void~) print_sbyte::$2 -(signed byte~) print_sbyte::$3 -(byte~) print_sbyte::$4 -(void~) print_sbyte::$5 -(label) print_sbyte::@1 -(label) print_sbyte::@2 -(label) print_sbyte::@return -(signed byte) print_sbyte::b -(byte*) print_screen -(void()) print_sdword((signed dword) print_sdword::dw) -(bool~) print_sdword::$0 -(bool~) print_sdword::$1 -(void~) print_sdword::$2 -(signed dword~) print_sdword::$3 -(dword~) print_sdword::$4 -(void~) print_sdword::$5 -(label) print_sdword::@1 -(label) print_sdword::@2 -(label) print_sdword::@return -(signed dword) print_sdword::dw -(void()) print_set_screen((byte*) print_set_screen::screen) -(label) print_set_screen::@return -(byte*) print_set_screen::screen -(void()) print_str((byte*) print_str::str) -(bool~) print_str::$0 -(label) print_str::@1 -(label) print_str::@2 -(label) print_str::@3 -(label) print_str::@4 -(label) print_str::@5 -(label) print_str::@6 -(label) print_str::@return -(byte*) print_str::str -(void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at) -(bool~) print_str_at::$0 -(label) print_str_at::@1 -(label) print_str_at::@2 -(label) print_str_at::@3 -(label) print_str_at::@4 -(label) print_str_at::@5 -(label) print_str_at::@6 -(label) print_str_at::@return -(byte*) print_str_at::at -(byte*) print_str_at::str -(void()) print_str_lines((byte*) print_str_lines::str) -(bool~) print_str_lines::$0 -(bool~) print_str_lines::$1 -(bool~) print_str_lines::$2 -(bool~) print_str_lines::$3 -(void~) print_str_lines::$4 -(label) print_str_lines::@1 -(label) print_str_lines::@10 -(label) print_str_lines::@2 -(label) print_str_lines::@3 -(label) print_str_lines::@4 -(label) print_str_lines::@5 -(label) print_str_lines::@6 -(label) print_str_lines::@7 -(label) print_str_lines::@8 -(label) print_str_lines::@9 -(label) print_str_lines::@return -(byte) print_str_lines::ch -(byte*) print_str_lines::str -(void()) print_str_ln((byte*) print_str_ln::str) -(void~) print_str_ln::$0 -(void~) print_str_ln::$1 -(label) print_str_ln::@return -(byte*) print_str_ln::str -(void()) print_sword((signed word) print_sword::w) -(bool~) print_sword::$0 -(bool~) print_sword::$1 -(void~) print_sword::$2 -(signed word~) print_sword::$3 -(word~) print_sword::$4 -(void~) print_sword::$5 -(label) print_sword::@1 -(label) print_sword::@2 -(label) print_sword::@return -(signed word) print_sword::w -(void()) print_word((word) print_word::w) -(byte~) print_word::$0 -(void~) print_word::$1 -(byte~) print_word::$2 -(void~) print_word::$3 -(label) print_word::@return -(word) print_word::w - -Promoting word/signed word/dword/signed dword to byte* in print_screen ← ((byte*)) 1024 -Promoting word/signed word/dword/signed dword to byte* in PLEX_SCREEN_PTR ← ((byte*)) $0 -INITIAL CONTROL FLOW GRAPH -@begin: scope:[] from - (byte*) print_screen ← ((byte*)) (word/signed word/dword/signed dword) 1024 - (byte*) print_line_cursor ← (byte*) print_screen - (byte*) print_char_cursor ← (byte*) print_line_cursor - to:@1 -print_str_lines: scope:[print_str_lines] from - to:print_str_lines::@1 -print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9 - (bool~) print_str_lines::$0 ← *((byte*) print_str_lines::str) != (byte) '@' - if((bool~) print_str_lines::$0) goto print_str_lines::@2 - to:print_str_lines::@6 -print_str_lines::@2: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@7 - to:print_str_lines::@4 -print_str_lines::@6: scope:[print_str_lines] from print_str_lines::@1 - to:print_str_lines::@3 -print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@10 print_str_lines::@6 - to:print_str_lines::@return -print_str_lines::@7: scope:[print_str_lines] from - to:print_str_lines::@2 -print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@5 - (byte) print_str_lines::ch ← *((byte*) print_str_lines::str) - (byte*) print_str_lines::str ← ++ (byte*) print_str_lines::str - (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch != (byte) '@' - (bool~) print_str_lines::$2 ← ! (bool~) print_str_lines::$1 - if((bool~) print_str_lines::$2) goto print_str_lines::@5 - to:print_str_lines::@8 -print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 print_str_lines::@8 - (bool~) print_str_lines::$3 ← (byte) print_str_lines::ch != (byte) '@' - if((bool~) print_str_lines::$3) goto print_str_lines::@4 - to:print_str_lines::@9 -print_str_lines::@8: scope:[print_str_lines] from print_str_lines::@4 - *((byte*) print_char_cursor) ← (byte) print_str_lines::ch - (byte*) print_char_cursor ← ++ (byte*) print_char_cursor - to:print_str_lines::@5 -print_str_lines::@9: scope:[print_str_lines] from print_str_lines::@5 - (void~) print_str_lines::$4 ← call print_ln - to:print_str_lines::@1 -print_str_lines::@10: scope:[print_str_lines] from - to:print_str_lines::@3 -print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@3 - return - to:@return -@1: scope:[] from @begin - to:@2 -print_str_ln: scope:[print_str_ln] from - (void~) print_str_ln::$0 ← call print_str (byte*) print_str_ln::str - (void~) print_str_ln::$1 ← call print_ln - to:print_str_ln::@return -print_str_ln::@return: scope:[print_str_ln] from print_str_ln - return - to:@return -@2: scope:[] from @1 - to:@3 -print_str: scope:[print_str] from - to:print_str::@1 -print_str::@1: scope:[print_str] from print_str print_str::@2 - (bool~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' - if((bool~) print_str::$0) goto print_str::@2 - to:print_str::@4 -print_str::@2: scope:[print_str] from print_str::@1 print_str::@5 - *((byte*) print_char_cursor) ← *((byte*) print_str::str) - (byte*) print_char_cursor ← ++ (byte*) print_char_cursor - (byte*) print_str::str ← ++ (byte*) print_str::str - to:print_str::@1 -print_str::@4: scope:[print_str] from print_str::@1 - to:print_str::@3 -print_str::@3: scope:[print_str] from print_str::@4 print_str::@6 - to:print_str::@return -print_str::@5: scope:[print_str] from - to:print_str::@2 -print_str::@6: scope:[print_str] from - to:print_str::@3 -print_str::@return: scope:[print_str] from print_str::@3 - return - to:@return -@3: scope:[] from @2 - to:@4 -print_str_at: scope:[print_str_at] from - to:print_str_at::@1 -print_str_at::@1: scope:[print_str_at] from print_str_at print_str_at::@2 - (bool~) print_str_at::$0 ← *((byte*) print_str_at::str) != (byte) '@' - if((bool~) print_str_at::$0) goto print_str_at::@2 - to:print_str_at::@4 -print_str_at::@2: scope:[print_str_at] from print_str_at::@1 print_str_at::@5 - *((byte*) print_str_at::at) ← *((byte*) print_str_at::str) - (byte*) print_str_at::at ← ++ (byte*) print_str_at::at - (byte*) print_str_at::str ← ++ (byte*) print_str_at::str - to:print_str_at::@1 -print_str_at::@4: scope:[print_str_at] from print_str_at::@1 - to:print_str_at::@3 -print_str_at::@3: scope:[print_str_at] from print_str_at::@4 print_str_at::@6 - to:print_str_at::@return -print_str_at::@5: scope:[print_str_at] from - to:print_str_at::@2 -print_str_at::@6: scope:[print_str_at] from - to:print_str_at::@3 -print_str_at::@return: scope:[print_str_at] from print_str_at::@3 - return - to:@return -@4: scope:[] from @3 - to:@5 -print_ln: scope:[print_ln] from - to:print_ln::@1 -print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - (byte*~) print_ln::$0 ← (byte*) print_line_cursor + (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte*) print_line_cursor ← (byte*~) print_ln::$0 - (bool~) print_ln::$1 ← (byte*) print_line_cursor < (byte*) print_char_cursor - 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_char_cursor ← (byte*) print_line_cursor - to:print_ln::@return -print_ln::@return: scope:[print_ln] from print_ln::@2 - return - to:@return -@5: scope:[] from @4 - to:@6 -print_sword: scope:[print_sword] from - (bool~) print_sword::$0 ← (signed word) print_sword::w < (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::@2 - (word~) print_sword::$4 ← ((word)) (signed word) print_sword::w - (void~) print_sword::$5 ← call print_word (word~) print_sword::$4 - to:print_sword::@return -print_sword::@2: scope:[print_sword] from print_sword - (void~) print_sword::$2 ← call print_char (byte) '-' - (signed word~) print_sword::$3 ← - (signed word) print_sword::w - (signed word) print_sword::w ← (signed word~) print_sword::$3 - to:print_sword::@1 -print_sword::@return: scope:[print_sword] from print_sword::@1 - return - to:@return -@6: scope:[] from @5 - to:@7 -print_sbyte: scope:[print_sbyte] from - (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word/dword/signed dword) 0 - (bool~) print_sbyte::$1 ← ! (bool~) print_sbyte::$0 - if((bool~) print_sbyte::$1) goto print_sbyte::@1 - to:print_sbyte::@2 -print_sbyte::@1: scope:[print_sbyte] from print_sbyte print_sbyte::@2 - (byte~) print_sbyte::$4 ← ((byte)) (signed byte) print_sbyte::b - (void~) print_sbyte::$5 ← call print_byte (byte~) print_sbyte::$4 - to:print_sbyte::@return -print_sbyte::@2: scope:[print_sbyte] from print_sbyte - (void~) print_sbyte::$2 ← call print_char (byte) '-' - (signed byte~) print_sbyte::$3 ← - (signed byte) print_sbyte::b - (signed byte) print_sbyte::b ← (signed byte~) print_sbyte::$3 - to:print_sbyte::@1 -print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@1 - return - to:@return -@7: scope:[] from @6 - to:@8 -print_word: scope:[print_word] from - (byte~) print_word::$0 ← > (word) print_word::w - (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 - (byte~) print_word::$2 ← < (word) print_word::w - (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 - to:print_word::@return -print_word::@return: scope:[print_word] from print_word - return - to:@return -@8: scope:[] from @7 - to:@9 -print_dword: scope:[print_dword] from - (word~) print_dword::$0 ← > (dword) print_dword::dw - (void~) print_dword::$1 ← call print_word (word~) print_dword::$0 - (word~) print_dword::$2 ← < (dword) print_dword::dw - (void~) print_dword::$3 ← call print_word (word~) print_dword::$2 - to:print_dword::@return -print_dword::@return: scope:[print_dword] from print_dword - return - to:@return -@9: scope:[] from @8 - to:@10 -print_sdword: scope:[print_sdword] from - (bool~) print_sdword::$0 ← (signed dword) print_sdword::dw < (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::@2 - (dword~) print_sdword::$4 ← ((dword)) (signed dword) print_sdword::dw - (void~) print_sdword::$5 ← call print_dword (dword~) print_sdword::$4 - to:print_sdword::@return -print_sdword::@2: scope:[print_sdword] from print_sdword - (void~) print_sdword::$2 ← call print_char (byte) '-' - (signed dword~) print_sdword::$3 ← - (signed dword) print_sdword::dw - (signed dword) print_sdword::dw ← (signed dword~) print_sdword::$3 - to:print_sdword::@1 -print_sdword::@return: scope:[print_sdword] from print_sdword::@1 - return - to:@return -@10: scope:[] from @9 - (byte[]) print_hextab ← (string) "0123456789abcdef" - to:@11 -print_byte: scope:[print_byte] from - (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4 - (void~) print_byte::$1 ← call print_char *((byte[]) print_hextab + (byte~) print_byte::$0) - (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word/dword/signed dword) 15 - (void~) print_byte::$3 ← call print_char *((byte[]) print_hextab + (byte~) print_byte::$2) - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte - return - to:@return -@11: scope:[] from @10 - to:@12 -print_char: scope:[print_char] from - *((byte*) print_char_cursor) ← (byte) print_char::ch - (byte*) print_char_cursor ← ++ (byte*) print_char_cursor - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - return - to:@return -@12: scope:[] from @11 - to:@13 -print_cls: scope:[print_cls] from - (byte*) print_cls::sc ← (byte*) print_screen - to:print_cls::@1 -print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - *((byte*) print_cls::sc) ← (byte) ' ' - (byte*) print_cls::sc ← ++ (byte*) print_cls::sc - (byte*~) print_cls::$0 ← (byte*) print_screen + (word/signed word/dword/signed dword) 1000 - (bool~) print_cls::$1 ← (byte*) print_cls::sc != (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_line_cursor ← (byte*) print_screen - (byte*) print_char_cursor ← (byte*) print_line_cursor - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@2 - return - to:@return -@13: scope:[] from @12 - to:@14 -print_set_screen: scope:[print_set_screen] from - (byte*) print_screen ← (byte*) print_set_screen::screen - (byte*) print_line_cursor ← (byte*) print_screen - (byte*) print_char_cursor ← (byte*) print_line_cursor - to:print_set_screen::@return -print_set_screen::@return: scope:[print_set_screen] from print_set_screen - return - to:@return -@14: scope:[] from @13 - (byte) PLEX_COUNT ← (byte/signed byte/word/signed word/dword/signed dword) 10 - (word[PLEX_COUNT]) PLEX_XPOS ← { fill( PLEX_COUNT, 0) } - (byte[PLEX_COUNT]) PLEX_YPOS ← { (byte/word/signed word/dword/signed dword) 255, (byte/signed byte/word/signed word/dword/signed dword) 18, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 52, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/word/signed word/dword/signed dword) 129, (byte/signed byte/word/signed word/dword/signed dword) 119, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 239, (byte/signed byte/word/signed word/dword/signed dword) 17 } - (byte[PLEX_COUNT]) PLEX_PTR ← { fill( PLEX_COUNT, 0) } - (word/signed word/dword/signed dword~) $0 ← (word/signed word/dword/signed dword) 1024 + (word/signed word/dword/signed dword) 1000 - (byte*) PLEX_SCREEN_PTR ← ((byte*)) (word/signed word/dword/signed dword~) $0 - (byte[PLEX_COUNT]) PLEX_SORTED_IDX ← { fill( PLEX_COUNT, 0) } - to:@15 -plexSetScreenPtr: scope:[plexSetScreenPtr] from - (byte*) PLEX_SCREEN_PTR ← (byte*) plexSetScreenPtr::plexScreenPtr - to:plexSetScreenPtr::@return -plexSetScreenPtr::@return: scope:[plexSetScreenPtr] from plexSetScreenPtr - return - to:@return -@15: scope:[] from @14 - to:@16 -plexInit: scope:[plexInit] from - (byte/signed word/word/dword/signed dword~) plexInit::$0 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) plexInit::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:plexInit::@1 -plexInit::@1: scope:[plexInit] from plexInit plexInit::@1 - *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexInit::i) ← (byte) plexInit::i - (byte) plexInit::i ← (byte) plexInit::i + rangenext(0,plexInit::$0) - (bool~) plexInit::$1 ← (byte) plexInit::i != rangelast(0,plexInit::$0) - if((bool~) plexInit::$1) goto plexInit::@1 - to:plexInit::@2 -plexInit::@2: scope:[plexInit] from plexInit::@1 - to:plexInit::@return -plexInit::@return: scope:[plexInit] from plexInit::@2 - return - to:@return -@16: scope:[] from @15 - to:@17 -plexSort: scope:[plexSort] from - (byte/signed word/word/dword/signed dword~) plexSort::$0 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) plexSort::m ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:plexSort::@1 -plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 - (byte/signed word/word/dword/signed dword~) plexSort::$1 ← (byte) plexSort::m + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) plexSort::nxt_idx ← *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte/signed word/word/dword/signed dword~) plexSort::$1) - (byte) plexSort::nxt_y ← *((byte[PLEX_COUNT]) PLEX_YPOS + (byte) plexSort::nxt_idx) - (byte) plexSort::cur_idx ← *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::m) - (bool~) plexSort::$2 ← (byte) plexSort::nxt_y < *((byte[PLEX_COUNT]) PLEX_YPOS + (byte) plexSort::cur_idx) - (bool~) plexSort::$3 ← ! (bool~) plexSort::$2 - if((bool~) plexSort::$3) goto plexSort::@2 - to:plexSort::@4 -plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 - (byte) plexSort::m ← (byte) plexSort::m + rangenext(0,plexSort::$0) - (bool~) plexSort::$8 ← (byte) plexSort::m != rangelast(0,plexSort::$0) - if((bool~) plexSort::$8) goto plexSort::@1 - to:plexSort::@6 -plexSort::@4: scope:[plexSort] from plexSort::@1 - (byte) plexSort::s ← (byte) plexSort::m - to:plexSort::@3 -plexSort::@3: scope:[plexSort] from plexSort::@3 plexSort::@4 - (byte/signed word/word/dword/signed dword~) plexSort::$4 ← (byte) plexSort::s + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte/signed word/word/dword/signed dword~) plexSort::$4) ← *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::s) - (byte) plexSort::s ← -- (byte) plexSort::s - (bool~) plexSort::$5 ← (byte) plexSort::s != (byte/word/signed word/dword/signed dword) 255 - (bool~) plexSort::$6 ← (byte) plexSort::nxt_y < *((byte[PLEX_COUNT]) PLEX_YPOS + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::s)) - (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 - if((bool~) plexSort::$7) goto plexSort::@3 - to:plexSort::@5 -plexSort::@5: scope:[plexSort] from plexSort::@3 - (byte) plexSort::s ← ++ (byte) plexSort::s - *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::s) ← (byte) plexSort::nxt_idx - to:plexSort::@2 -plexSort::@6: scope:[plexSort] from plexSort::@2 - to:plexSort::@return -plexSort::@return: scope:[plexSort] from plexSort::@6 - return - to:@return -@17: scope:[] from @16 - to:@18 -main: scope:[main] from - (void~) main::$0 ← call plexInit - (void~) main::$1 ← call print_cls - (void~) main::$2 ← call print_plex - (void~) main::$3 ← call plexSort - (void~) main::$4 ← call print_plex - to:main::@return -main::@return: scope:[main] from main - return - to:@return -@18: scope:[] from @17 - to:@19 -print_plex: scope:[print_plex] from - (byte/signed word/word/dword/signed dword~) print_plex::$0 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) print_plex::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:print_plex::@1 -print_plex::@1: scope:[print_plex] from print_plex print_plex::@1 - (void~) print_plex::$1 ← call print_byte *((byte[PLEX_COUNT]) PLEX_YPOS + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) print_plex::i)) - (void~) print_plex::$2 ← call print_char (byte) ' ' - (byte) print_plex::i ← (byte) print_plex::i + rangenext(0,print_plex::$0) - (bool~) print_plex::$3 ← (byte) print_plex::i != rangelast(0,print_plex::$0) - if((bool~) print_plex::$3) goto print_plex::@1 - to:print_plex::@2 -print_plex::@2: scope:[print_plex] from print_plex::@1 - (void~) print_plex::$4 ← call print_ln - to:print_plex::@return -print_plex::@return: scope:[print_plex] from print_plex::@2 - return - to:@return -@19: scope:[] from @18 - call main - to:@end -@end: scope:[] from @19 - -Removing unused procedure print_str_lines -Removing unused procedure print_str_ln -Removing unused procedure print_str_at -Removing unused procedure print_sword -Removing unused procedure print_sbyte -Removing unused procedure print_sdword -Removing unused procedure print_set_screen -Removing unused procedure plexSetScreenPtr -Removing unused procedure print_str -Removing unused procedure print_dword -Removing unused procedure print_word -Eliminating unused variable - keeping the call (void~) print_byte::$1 -Eliminating unused variable - keeping the call (void~) print_byte::$3 -Eliminating unused variable (word[PLEX_COUNT]) PLEX_XPOS and assignment [28] (word[PLEX_COUNT]) PLEX_XPOS ← { fill( PLEX_COUNT, 0) } -Eliminating unused variable (byte[PLEX_COUNT]) PLEX_PTR and assignment [30] (byte[PLEX_COUNT]) PLEX_PTR ← { fill( PLEX_COUNT, 0) } -Eliminating unused variable (byte*) PLEX_SCREEN_PTR and assignment [32] (byte*) PLEX_SCREEN_PTR ← ((byte*)) (word/signed word/dword/signed dword~) $0 -Eliminating unused variable - keeping the call (void~) main::$0 -Eliminating unused variable - keeping the call (void~) main::$1 -Eliminating unused variable - keeping the call (void~) main::$2 -Eliminating unused variable - keeping the call (void~) main::$3 -Eliminating unused variable - keeping the call (void~) main::$4 -Eliminating unused variable - keeping the call (void~) print_plex::$1 -Eliminating unused variable - keeping the call (void~) print_plex::$2 -Eliminating unused variable - keeping the call (void~) print_plex::$4 -Eliminating unused variable (word/signed word/dword/signed dword~) $0 and assignment [29] (word/signed word/dword/signed dword~) $0 ← (word/signed word/dword/signed dword) 1024 + (word/signed word/dword/signed dword) 1000 -Creating constant string variable for inline (const string) $1 "0123456789abcdef" -Removing empty block @1 -Removing empty block @2 -Removing empty block @3 -Removing empty block @4 -Removing empty block @5 -Removing empty block @6 -Removing empty block @7 -Removing empty block @8 -Removing empty block @9 -Removing empty block @11 -Removing empty block @12 -Removing empty block @13 -Removing empty block @15 -Removing empty block plexInit::@2 -Removing empty block @16 -Removing empty block plexSort::@6 -Removing empty block @17 -Removing empty block @18 -PROCEDURE MODIFY VARIABLE ANALYSIS -print_ln modifies print_line_cursor -print_ln modifies print_char_cursor -print_byte modifies print_char_cursor -print_char modifies print_char_cursor -print_cls modifies print_line_cursor -print_cls modifies print_char_cursor -main modifies print_line_cursor -main modifies print_char_cursor -print_plex modifies print_char_cursor -print_plex modifies print_line_cursor - -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... - -CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN -@begin: scope:[] from - (byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 - (byte*) print_line_cursor#0 ← (byte*) print_screen#0 - (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0 - to:@10 -print_ln: scope:[print_ln] from print_plex::@2 - (byte*) print_char_cursor#36 ← phi( print_plex::@2/(byte*) print_char_cursor#41 ) - (byte*) print_line_cursor#23 ← phi( print_plex::@2/(byte*) print_line_cursor#26 ) - to:print_ln::@1 -print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - (byte*) print_char_cursor#19 ← phi( print_ln/(byte*) print_char_cursor#36 print_ln::@1/(byte*) print_char_cursor#19 ) - (byte*) print_line_cursor#12 ← phi( print_ln/(byte*) print_line_cursor#23 print_ln::@1/(byte*) print_line_cursor#1 ) - (byte*~) print_ln::$0 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 - (byte*) print_line_cursor#1 ← (byte*~) print_ln::$0 - (bool~) print_ln::$1 ← (byte*) print_line_cursor#1 < (byte*) print_char_cursor#19 - 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#13 ← phi( print_ln::@1/(byte*) print_line_cursor#1 ) - (byte*) print_char_cursor#1 ← (byte*) print_line_cursor#13 - to:print_ln::@return -print_ln::@return: scope:[print_ln] from print_ln::@2 - (byte*) print_char_cursor#20 ← phi( print_ln::@2/(byte*) print_char_cursor#1 ) - (byte*) print_line_cursor#14 ← phi( print_ln::@2/(byte*) print_line_cursor#13 ) - (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#14 - (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#20 - return - to:@return -@10: scope:[] from @begin - (byte*) print_screen#8 ← phi( @begin/(byte*) print_screen#0 ) - (byte*) print_char_cursor#46 ← phi( @begin/(byte*) print_char_cursor#0 ) - (byte*) print_line_cursor#31 ← phi( @begin/(byte*) print_line_cursor#0 ) - (byte[]) print_hextab#0 ← (const string) $1 - to:@14 -print_byte: scope:[print_byte] from print_plex::@1 - (byte*) print_char_cursor#37 ← phi( print_plex::@1/(byte*) print_char_cursor#40 ) - (byte) print_byte::b#1 ← phi( print_plex::@1/(byte) print_byte::b#0 ) - (byte~) print_byte::$0 ← (byte) print_byte::b#1 >> (byte/signed byte/word/signed word/dword/signed dword) 4 - (byte) print_char::ch#0 ← *((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#2 ← phi( print_byte/(byte) print_byte::b#1 ) - (byte*) print_char_cursor#21 ← phi( print_byte/(byte*) print_char_cursor#7 ) - (byte*) print_char_cursor#3 ← (byte*) print_char_cursor#21 - (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) 15 - (byte) print_char::ch#1 ← *((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#22 ← phi( print_byte::@1/(byte*) print_char_cursor#7 ) - (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#22 - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@2 - (byte*) print_char_cursor#23 ← phi( print_byte::@2/(byte*) print_char_cursor#4 ) - (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#23 - return - to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 print_plex::@3 - (byte*) print_char_cursor#24 ← phi( print_byte/(byte*) print_char_cursor#37 print_byte::@1/(byte*) print_char_cursor#3 print_plex::@3/(byte*) print_char_cursor#14 ) - (byte) print_char::ch#3 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 print_plex::@3/(byte) print_char::ch#2 ) - *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 - (byte*) print_char_cursor#6 ← ++ (byte*) print_char_cursor#24 - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - (byte*) print_char_cursor#25 ← phi( print_char/(byte*) print_char_cursor#6 ) - (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#25 - return - to:@return -print_cls: scope:[print_cls] from main::@1 - (byte*) print_screen#1 ← phi( main::@1/(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) 1000 - (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#8 ← (byte*) print_line_cursor#3 - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@2 - (byte*) print_char_cursor#26 ← phi( print_cls::@2/(byte*) print_char_cursor#8 ) - (byte*) print_line_cursor#15 ← phi( print_cls::@2/(byte*) print_line_cursor#3 ) - (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#15 - (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#26 - return - to:@return -@14: scope:[] from @10 - (byte*) print_screen#7 ← phi( @10/(byte*) print_screen#8 ) - (byte*) print_char_cursor#45 ← phi( @10/(byte*) print_char_cursor#46 ) - (byte*) print_line_cursor#30 ← phi( @10/(byte*) print_line_cursor#31 ) - (byte) PLEX_COUNT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10 - (byte[PLEX_COUNT#0]) PLEX_YPOS#0 ← { (byte/word/signed word/dword/signed dword) 255, (byte/signed byte/word/signed word/dword/signed dword) 18, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 52, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/word/signed word/dword/signed dword) 129, (byte/signed byte/word/signed word/dword/signed dword) 119, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 239, (byte/signed byte/word/signed word/dword/signed dword) 17 } - (byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 ← { fill( PLEX_COUNT#0, 0) } - to:@19 -plexInit: scope:[plexInit] from main - (byte/signed word/word/dword/signed dword~) plexInit::$0 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) plexInit::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:plexInit::@1 -plexInit::@1: scope:[plexInit] from plexInit plexInit::@1 - (byte) plexInit::i#2 ← phi( plexInit/(byte) plexInit::i#0 plexInit::@1/(byte) plexInit::i#1 ) - *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 - (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,plexInit::$0) - (bool~) plexInit::$1 ← (byte) plexInit::i#1 != rangelast(0,plexInit::$0) - if((bool~) plexInit::$1) goto plexInit::@1 - to:plexInit::@return -plexInit::@return: scope:[plexInit] from plexInit::@1 - return - to:@return -plexSort: scope:[plexSort] from main::@3 - (byte/signed word/word/dword/signed dword~) plexSort::$0 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 2 - (byte) plexSort::m#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:plexSort::@1 -plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 - (byte) plexSort::m#2 ← phi( plexSort/(byte) plexSort::m#0 plexSort::@2/(byte) plexSort::m#1 ) - (byte/signed word/word/dword/signed dword~) plexSort::$1 ← (byte) plexSort::m#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) plexSort::nxt_idx#0 ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte/signed word/word/dword/signed dword~) plexSort::$1) - (byte) plexSort::nxt_y#0 ← *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) - (byte) plexSort::cur_idx#0 ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2) - (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0) - (bool~) plexSort::$3 ← ! (bool~) plexSort::$2 - if((bool~) plexSort::$3) goto plexSort::@2 - to:plexSort::@4 -plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 - (byte) plexSort::m#3 ← phi( plexSort::@1/(byte) plexSort::m#2 plexSort::@5/(byte) plexSort::m#5 ) - (byte) plexSort::m#1 ← (byte) plexSort::m#3 + rangenext(0,plexSort::$0) - (bool~) plexSort::$8 ← (byte) plexSort::m#1 != rangelast(0,plexSort::$0) - if((bool~) plexSort::$8) goto plexSort::@1 - to:plexSort::@return -plexSort::@4: scope:[plexSort] from plexSort::@1 - (byte) plexSort::nxt_idx#3 ← phi( plexSort::@1/(byte) plexSort::nxt_idx#0 ) - (byte) plexSort::nxt_y#2 ← phi( plexSort::@1/(byte) plexSort::nxt_y#0 ) - (byte) plexSort::m#4 ← phi( plexSort::@1/(byte) plexSort::m#2 ) - (byte) plexSort::s#0 ← (byte) plexSort::m#4 - to:plexSort::@3 -plexSort::@3: scope:[plexSort] from plexSort::@3 plexSort::@4 - (byte) plexSort::m#6 ← phi( plexSort::@3/(byte) plexSort::m#6 plexSort::@4/(byte) plexSort::m#4 ) - (byte) plexSort::nxt_idx#2 ← phi( plexSort::@3/(byte) plexSort::nxt_idx#2 plexSort::@4/(byte) plexSort::nxt_idx#3 ) - (byte) plexSort::nxt_y#1 ← phi( plexSort::@3/(byte) plexSort::nxt_y#1 plexSort::@4/(byte) plexSort::nxt_y#2 ) - (byte) plexSort::s#3 ← phi( plexSort::@3/(byte) plexSort::s#1 plexSort::@4/(byte) plexSort::s#0 ) - (byte/signed word/word/dword/signed dword~) plexSort::$4 ← (byte) plexSort::s#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 - *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte/signed word/word/dword/signed dword~) plexSort::$4) ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) - (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 - (bool~) plexSort::$5 ← (byte) plexSort::s#1 != (byte/word/signed word/dword/signed dword) 255 - (bool~) plexSort::$6 ← (byte) plexSort::nxt_y#1 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1)) - (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 - if((bool~) plexSort::$7) goto plexSort::@3 - to:plexSort::@5 -plexSort::@5: scope:[plexSort] from plexSort::@3 - (byte) plexSort::m#5 ← phi( plexSort::@3/(byte) plexSort::m#6 ) - (byte) plexSort::nxt_idx#1 ← phi( plexSort::@3/(byte) plexSort::nxt_idx#2 ) - (byte) plexSort::s#4 ← phi( plexSort::@3/(byte) plexSort::s#1 ) - (byte) plexSort::s#2 ← ++ (byte) plexSort::s#4 - *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#1 - to:plexSort::@2 -plexSort::@return: scope:[plexSort] from plexSort::@2 - return - to:@return -main: scope:[main] from @19 - (byte*) print_char_cursor#43 ← phi( @19/(byte*) print_char_cursor#42 ) - (byte*) print_line_cursor#28 ← phi( @19/(byte*) print_line_cursor#27 ) - (byte*) print_screen#5 ← phi( @19/(byte*) print_screen#6 ) - call plexInit - to:main::@1 -main::@1: scope:[main] from main - (byte*) print_char_cursor#38 ← phi( main/(byte*) print_char_cursor#43 ) - (byte*) print_line_cursor#24 ← phi( main/(byte*) print_line_cursor#28 ) - (byte*) print_screen#4 ← phi( main/(byte*) print_screen#5 ) - call print_cls - to:main::@2 -main::@2: scope:[main] from main::@1 - (byte*) print_char_cursor#27 ← phi( main::@1/(byte*) print_char_cursor#9 ) - (byte*) print_line_cursor#16 ← phi( main::@1/(byte*) print_line_cursor#4 ) - (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#16 - (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#27 - call print_plex - to:main::@3 -main::@3: scope:[main] from main::@2 - (byte*) print_line_cursor#17 ← phi( main::@2/(byte*) print_line_cursor#10 ) - (byte*) print_char_cursor#28 ← phi( main::@2/(byte*) print_char_cursor#17 ) - (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#28 - (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#17 - call plexSort - to:main::@4 -main::@4: scope:[main] from main::@3 - (byte*) print_line_cursor#25 ← phi( main::@3/(byte*) print_line_cursor#6 ) - (byte*) print_char_cursor#39 ← phi( main::@3/(byte*) print_char_cursor#11 ) - call print_plex - to:main::@5 -main::@5: scope:[main] from main::@4 - (byte*) print_line_cursor#18 ← phi( main::@4/(byte*) print_line_cursor#10 ) - (byte*) print_char_cursor#29 ← phi( main::@4/(byte*) print_char_cursor#17 ) - (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#29 - (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#18 - to:main::@return -main::@return: scope:[main] from main::@5 - (byte*) print_char_cursor#30 ← phi( main::@5/(byte*) print_char_cursor#12 ) - (byte*) print_line_cursor#19 ← phi( main::@5/(byte*) print_line_cursor#7 ) - (byte*) print_line_cursor#8 ← (byte*) print_line_cursor#19 - (byte*) print_char_cursor#13 ← (byte*) print_char_cursor#30 - return - to:@return -print_plex: scope:[print_plex] from main::@2 main::@4 - (byte*) print_line_cursor#34 ← phi( main::@2/(byte*) print_line_cursor#5 main::@4/(byte*) print_line_cursor#25 ) - (byte*) print_char_cursor#44 ← phi( main::@2/(byte*) print_char_cursor#10 main::@4/(byte*) print_char_cursor#39 ) - (byte/signed word/word/dword/signed dword~) print_plex::$0 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 1 - (byte) print_plex::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:print_plex::@1 -print_plex::@1: scope:[print_plex] from print_plex print_plex::@4 - (byte*) print_line_cursor#33 ← phi( print_plex/(byte*) print_line_cursor#34 print_plex::@4/(byte*) print_line_cursor#29 ) - (byte*) print_char_cursor#40 ← phi( print_plex/(byte*) print_char_cursor#44 print_plex::@4/(byte*) print_char_cursor#15 ) - (byte) print_plex::i#2 ← phi( print_plex/(byte) print_plex::i#0 print_plex::@4/(byte) print_plex::i#1 ) - (byte) print_byte::b#0 ← *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) - call print_byte - to:print_plex::@3 -print_plex::@3: scope:[print_plex] from print_plex::@1 - (byte*) print_line_cursor#32 ← phi( print_plex::@1/(byte*) print_line_cursor#33 ) - (byte) print_plex::i#4 ← phi( print_plex::@1/(byte) print_plex::i#2 ) - (byte*) print_char_cursor#31 ← phi( print_plex::@1/(byte*) print_char_cursor#5 ) - (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#31 - (byte) print_char::ch#2 ← (byte) ' ' - call print_char - to:print_plex::@4 -print_plex::@4: scope:[print_plex] from print_plex::@3 - (byte*) print_line_cursor#29 ← phi( print_plex::@3/(byte*) print_line_cursor#32 ) - (byte) print_plex::i#3 ← phi( print_plex::@3/(byte) print_plex::i#4 ) - (byte*) print_char_cursor#32 ← phi( print_plex::@3/(byte*) print_char_cursor#7 ) - (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#32 - (byte) print_plex::i#1 ← (byte) print_plex::i#3 + rangenext(0,print_plex::$0) - (bool~) print_plex::$3 ← (byte) print_plex::i#1 != rangelast(0,print_plex::$0) - if((bool~) print_plex::$3) goto print_plex::@1 - to:print_plex::@2 -print_plex::@2: scope:[print_plex] from print_plex::@4 - (byte*) print_char_cursor#41 ← phi( print_plex::@4/(byte*) print_char_cursor#15 ) - (byte*) print_line_cursor#26 ← phi( print_plex::@4/(byte*) print_line_cursor#29 ) - call print_ln - to:print_plex::@5 -print_plex::@5: scope:[print_plex] from print_plex::@2 - (byte*) print_char_cursor#33 ← phi( print_plex::@2/(byte*) print_char_cursor#2 ) - (byte*) print_line_cursor#20 ← phi( print_plex::@2/(byte*) print_line_cursor#2 ) - (byte*) print_line_cursor#9 ← (byte*) print_line_cursor#20 - (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#33 - to:print_plex::@return -print_plex::@return: scope:[print_plex] from print_plex::@5 - (byte*) print_line_cursor#21 ← phi( print_plex::@5/(byte*) print_line_cursor#9 ) - (byte*) print_char_cursor#34 ← phi( print_plex::@5/(byte*) print_char_cursor#16 ) - (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#34 - (byte*) print_line_cursor#10 ← (byte*) print_line_cursor#21 - return - to:@return -@19: scope:[] from @14 - (byte*) print_screen#6 ← phi( @14/(byte*) print_screen#7 ) - (byte*) print_char_cursor#42 ← phi( @14/(byte*) print_char_cursor#45 ) - (byte*) print_line_cursor#27 ← phi( @14/(byte*) print_line_cursor#30 ) - call main - to:@20 -@20: scope:[] from @19 - (byte*) print_char_cursor#35 ← phi( @19/(byte*) print_char_cursor#13 ) - (byte*) print_line_cursor#22 ← phi( @19/(byte*) print_line_cursor#8 ) - (byte*) print_line_cursor#11 ← (byte*) print_line_cursor#22 - (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#35 - to:@end -@end: scope:[] from @20 - -SYMBOL TABLE SSA -(const string) $1 = (string) "0123456789abcdef" -(label) @10 -(label) @14 -(label) @19 -(label) @20 -(label) @begin -(label) @end -(byte) PLEX_COUNT -(byte) PLEX_COUNT#0 -(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX -(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 -(byte[PLEX_COUNT#0]) PLEX_YPOS -(byte[PLEX_COUNT#0]) PLEX_YPOS#0 -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@3 -(label) main::@4 -(label) main::@5 -(label) main::@return -(void()) plexInit() -(byte/signed word/word/dword/signed dword~) plexInit::$0 -(bool~) plexInit::$1 -(label) plexInit::@1 -(label) plexInit::@return -(byte) plexInit::i -(byte) plexInit::i#0 -(byte) plexInit::i#1 -(byte) plexInit::i#2 -(void()) plexSort() -(byte/signed word/word/dword/signed dword~) plexSort::$0 -(byte/signed word/word/dword/signed dword~) plexSort::$1 -(bool~) plexSort::$2 -(bool~) plexSort::$3 -(byte/signed word/word/dword/signed dword~) plexSort::$4 -(bool~) plexSort::$5 -(bool~) plexSort::$6 -(bool~) plexSort::$7 -(bool~) plexSort::$8 -(label) plexSort::@1 -(label) plexSort::@2 -(label) plexSort::@3 -(label) plexSort::@4 -(label) plexSort::@5 -(label) plexSort::@return -(byte) plexSort::cur_idx -(byte) plexSort::cur_idx#0 -(byte) plexSort::m -(byte) plexSort::m#0 -(byte) plexSort::m#1 -(byte) plexSort::m#2 -(byte) plexSort::m#3 -(byte) plexSort::m#4 -(byte) plexSort::m#5 -(byte) plexSort::m#6 -(byte) plexSort::nxt_idx -(byte) plexSort::nxt_idx#0 -(byte) plexSort::nxt_idx#1 -(byte) plexSort::nxt_idx#2 -(byte) plexSort::nxt_idx#3 -(byte) plexSort::nxt_y -(byte) plexSort::nxt_y#0 -(byte) plexSort::nxt_y#1 -(byte) plexSort::nxt_y#2 -(byte) plexSort::s -(byte) plexSort::s#0 -(byte) plexSort::s#1 -(byte) plexSort::s#2 -(byte) plexSort::s#3 -(byte) plexSort::s#4 -(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 -(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#2 -(byte) print_char::ch#3 -(byte*) print_char_cursor -(byte*) print_char_cursor#0 -(byte*) print_char_cursor#1 -(byte*) print_char_cursor#10 -(byte*) print_char_cursor#11 -(byte*) print_char_cursor#12 -(byte*) print_char_cursor#13 -(byte*) print_char_cursor#14 -(byte*) print_char_cursor#15 -(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#5 -(byte*) print_char_cursor#6 -(byte*) print_char_cursor#7 -(byte*) print_char_cursor#8 -(byte*) print_char_cursor#9 -(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 -(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#4 -(byte*) print_line_cursor#5 -(byte*) print_line_cursor#6 -(byte*) print_line_cursor#7 -(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_plex() -(byte/signed word/word/dword/signed dword~) print_plex::$0 -(bool~) print_plex::$3 -(label) print_plex::@1 -(label) print_plex::@2 -(label) print_plex::@3 -(label) print_plex::@4 -(label) print_plex::@5 -(label) print_plex::@return -(byte) print_plex::i -(byte) print_plex::i#0 -(byte) print_plex::i#1 -(byte) print_plex::i#2 -(byte) print_plex::i#3 -(byte) print_plex::i#4 -(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 -(byte*) print_screen#7 -(byte*) print_screen#8 - -OPTIMIZING CONTROL FLOW GRAPH -Inversing boolean not (bool~) plexSort::$3 ← (byte) plexSort::nxt_y#0 >= *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0) from (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0) -Succesful SSA optimization Pass2UnaryNotSimplification -Not aliassing across scopes: print_line_cursor#23 print_line_cursor#26 -Not aliassing across scopes: print_char_cursor#36 print_char_cursor#41 -Not aliassing across scopes: print_byte::b#1 print_byte::b#0 -Not aliassing across scopes: print_char_cursor#37 print_char_cursor#40 -Not aliassing across scopes: print_char_cursor#21 print_char_cursor#7 -Not aliassing across scopes: print_char_cursor#22 print_char_cursor#7 -Not aliassing across scopes: print_char::ch#3 print_char::ch#0 -Not aliassing across scopes: print_char_cursor#24 print_char_cursor#37 -Not aliassing across scopes: print_screen#1 print_screen#4 -Not aliassing across scopes: print_cls::sc#0 print_screen#1 -Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 -Not aliassing identity: plexSort::nxt_idx#2 plexSort::nxt_idx#2 -Not aliassing identity: plexSort::m#6 plexSort::m#6 -Not aliassing across scopes: print_screen#5 print_screen#6 -Not aliassing across scopes: print_line_cursor#28 print_line_cursor#27 -Not aliassing across scopes: print_char_cursor#43 print_char_cursor#42 -Not aliassing across scopes: print_line_cursor#16 print_line_cursor#4 -Not aliassing across scopes: print_char_cursor#27 print_char_cursor#9 -Not aliassing across scopes: print_char_cursor#28 print_char_cursor#17 -Not aliassing across scopes: print_line_cursor#17 print_line_cursor#10 -Not aliassing across scopes: print_char_cursor#29 print_char_cursor#17 -Not aliassing across scopes: print_line_cursor#18 print_line_cursor#10 -Not aliassing across scopes: print_char_cursor#44 print_char_cursor#10 -Not aliassing across scopes: print_line_cursor#34 print_line_cursor#5 -Not aliassing across scopes: print_char_cursor#31 print_char_cursor#5 -Not aliassing across scopes: print_char_cursor#32 print_char_cursor#7 -Not aliassing across scopes: print_line_cursor#20 print_line_cursor#2 -Not aliassing across scopes: print_char_cursor#33 print_char_cursor#2 -Not aliassing across scopes: print_line_cursor#22 print_line_cursor#8 -Not aliassing across scopes: print_char_cursor#35 print_char_cursor#13 -Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#31 (byte*) print_char_cursor#46 (byte*) print_screen#8 (byte*) print_line_cursor#30 (byte*) print_char_cursor#45 (byte*) print_screen#7 (byte*) print_line_cursor#27 (byte*) print_char_cursor#42 (byte*) print_screen#6 -Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#13 (byte*) print_char_cursor#1 (byte*) print_line_cursor#14 (byte*) print_char_cursor#20 (byte*) print_line_cursor#2 (byte*) print_char_cursor#2 -Alias (byte) print_byte::b#1 = (byte) print_byte::b#2 -Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#3 -Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#4 (byte*) print_char_cursor#23 (byte*) print_char_cursor#5 -Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#6 (byte*) print_char_cursor#7 -Alias (byte*) print_line_cursor#15 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_line_cursor#3 (byte*) print_char_cursor#8 (byte*) print_char_cursor#26 (byte*) print_line_cursor#4 (byte*) print_char_cursor#9 -Alias (byte) plexSort::m#2 = (byte) plexSort::m#4 (byte) plexSort::s#0 -Alias (byte) plexSort::nxt_y#0 = (byte) plexSort::nxt_y#2 -Alias (byte) plexSort::nxt_idx#0 = (byte) plexSort::nxt_idx#3 -Alias (byte) plexSort::s#1 = (byte) plexSort::s#4 -Alias (byte) plexSort::nxt_idx#1 = (byte) plexSort::nxt_idx#2 -Alias (byte) plexSort::m#5 = (byte) plexSort::m#6 -Alias (byte*) print_screen#4 = (byte*) print_screen#5 -Alias (byte*) print_line_cursor#24 = (byte*) print_line_cursor#28 -Alias (byte*) print_char_cursor#38 = (byte*) print_char_cursor#43 -Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#5 -Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#27 -Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#28 (byte*) print_char_cursor#39 -Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#6 (byte*) print_line_cursor#25 -Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#29 (byte*) print_char_cursor#30 (byte*) print_char_cursor#13 -Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#7 (byte*) print_line_cursor#19 (byte*) print_line_cursor#8 -Alias (byte) print_plex::i#2 = (byte) print_plex::i#4 (byte) print_plex::i#3 -Alias (byte*) print_line_cursor#26 = (byte*) print_line_cursor#32 (byte*) print_line_cursor#33 (byte*) print_line_cursor#29 -Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#31 -Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#32 (byte*) print_char_cursor#41 -Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#9 (byte*) print_line_cursor#20 (byte*) print_line_cursor#21 -Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#33 (byte*) print_char_cursor#34 (byte*) print_char_cursor#17 -Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#22 -Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#35 -Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: print_line_cursor#23 print_line_cursor#26 -Not aliassing across scopes: print_char_cursor#36 print_char_cursor#15 -Not aliassing across scopes: print_byte::b#1 print_byte::b#0 -Not aliassing across scopes: print_char_cursor#37 print_char_cursor#40 -Not aliassing across scopes: print_char_cursor#21 print_char_cursor#25 -Not aliassing across scopes: print_char_cursor#22 print_char_cursor#25 -Not aliassing across scopes: print_char::ch#3 print_char::ch#0 -Not aliassing across scopes: print_char_cursor#24 print_char_cursor#37 -Not aliassing across scopes: print_screen#1 print_screen#4 -Not aliassing across scopes: print_cls::sc#0 print_screen#1 -Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 -Not aliassing identity: plexSort::nxt_idx#1 plexSort::nxt_idx#1 -Not aliassing identity: plexSort::m#5 plexSort::m#5 -Not aliassing across scopes: print_screen#4 print_line_cursor#0 -Not aliassing across scopes: print_line_cursor#24 print_line_cursor#0 -Not aliassing across scopes: print_char_cursor#38 print_line_cursor#0 -Not aliassing across scopes: print_line_cursor#16 print_line_cursor#15 -Not aliassing across scopes: print_char_cursor#10 print_line_cursor#15 -Not aliassing across scopes: print_char_cursor#11 print_char_cursor#16 -Not aliassing across scopes: print_line_cursor#17 print_line_cursor#10 -Not aliassing across scopes: print_char_cursor#12 print_char_cursor#16 -Not aliassing across scopes: print_line_cursor#18 print_line_cursor#10 -Not aliassing across scopes: print_char_cursor#44 print_char_cursor#10 -Not aliassing across scopes: print_line_cursor#34 print_line_cursor#16 -Not aliassing across scopes: print_char_cursor#14 print_char_cursor#22 -Not aliassing across scopes: print_char_cursor#15 print_char_cursor#25 -Not aliassing across scopes: print_line_cursor#10 print_line_cursor#1 -Not aliassing across scopes: print_char_cursor#16 print_line_cursor#1 -Not aliassing across scopes: print_line_cursor#11 print_line_cursor#18 -Not aliassing across scopes: print_char_cursor#18 print_char_cursor#12 -Self Phi Eliminated (byte*) print_char_cursor#19 -Self Phi Eliminated (byte*) print_line_cursor#15 -Self Phi Eliminated (byte) plexSort::nxt_y#1 -Self Phi Eliminated (byte) plexSort::nxt_idx#1 -Self Phi Eliminated (byte) plexSort::m#5 -Self Phi Eliminated (byte*) print_line_cursor#26 -Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (byte*) print_line_cursor#23 (byte*) print_line_cursor#26 -Redundant Phi (byte*) print_char_cursor#36 (byte*) print_char_cursor#15 -Redundant Phi (byte*) print_char_cursor#19 (byte*) print_char_cursor#36 -Redundant Phi (byte) print_byte::b#1 (byte) print_byte::b#0 -Redundant Phi (byte*) print_char_cursor#37 (byte*) print_char_cursor#40 -Redundant Phi (byte*) print_char_cursor#21 (byte*) print_char_cursor#25 -Redundant Phi (byte*) print_char_cursor#22 (byte*) print_char_cursor#25 -Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4 -Redundant Phi (byte*) print_line_cursor#15 (byte*) print_screen#1 -Redundant Phi (byte) plexSort::nxt_y#1 (byte) plexSort::nxt_y#0 -Redundant Phi (byte) plexSort::nxt_idx#1 (byte) plexSort::nxt_idx#0 -Redundant Phi (byte) plexSort::m#5 (byte) plexSort::m#2 -Redundant Phi (byte*) print_screen#4 (byte*) print_line_cursor#0 -Redundant Phi (byte*) print_line_cursor#24 (byte*) print_line_cursor#0 -Redundant Phi (byte*) print_char_cursor#38 (byte*) print_line_cursor#0 -Redundant Phi (byte*) print_line_cursor#16 (byte*) print_line_cursor#15 -Redundant Phi (byte*) print_char_cursor#10 (byte*) print_line_cursor#15 -Redundant Phi (byte*) print_char_cursor#11 (byte*) print_char_cursor#16 -Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#10 -Redundant Phi (byte*) print_char_cursor#12 (byte*) print_char_cursor#16 -Redundant Phi (byte*) print_line_cursor#18 (byte*) print_line_cursor#10 -Redundant Phi (byte*) print_line_cursor#26 (byte*) print_line_cursor#34 -Redundant Phi (byte*) print_char_cursor#14 (byte*) print_char_cursor#22 -Redundant Phi (byte*) print_char_cursor#15 (byte*) print_char_cursor#25 -Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#1 -Redundant Phi (byte*) print_char_cursor#16 (byte*) print_line_cursor#1 -Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#18 -Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#12 -Succesful SSA optimization Pass2RedundantPhiElimination -Redundant Phi (byte) plexSort::m#3 (byte) plexSort::m#2 -Succesful SSA optimization Pass2RedundantPhiElimination -Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 -Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 -Simple Condition (bool~) plexInit::$1 if((byte) plexInit::i#1!=rangelast(0,plexInit::$0)) goto plexInit::@1 -Simple Condition (bool~) plexSort::$3 if((byte) plexSort::nxt_y#0>=*((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0)) goto plexSort::@2 -Simple Condition (bool~) plexSort::$8 if((byte) plexSort::m#1!=rangelast(0,plexSort::$0)) goto plexSort::@1 -Simple Condition (bool~) print_plex::$3 if((byte) print_plex::i#1!=rangelast(0,print_plex::$0)) goto print_plex::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification -Rewriting && if()-condition to two if()s (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 -Succesful SSA optimization Pass2ConditionalAndOrRewriting -Constant (const byte*) print_line_cursor#0 = ((byte*))1024 -Constant (const byte[]) print_hextab#0 = $1 -Constant (const byte) PLEX_COUNT#0 = 10 -Constant (const byte[PLEX_COUNT#0]) PLEX_YPOS#0 = { 255, 18, 17, 52, 2, 129, 119, 129, 239, 17 } -Constant (const byte) plexInit::i#0 = 0 -Constant (const byte) plexSort::m#0 = 0 -Constant (const byte) print_plex::i#0 = 0 -Constant (const byte) print_char::ch#2 = ' ' -Succesful SSA optimization Pass2ConstantIdentification -Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 -Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 -Constant (const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 = { fill( PLEX_COUNT#0, 0) } -Constant (const byte/signed word/word/dword/signed dword) plexInit::$0 = PLEX_COUNT#0-1 -Constant (const byte/signed word/word/dword/signed dword) plexSort::$0 = PLEX_COUNT#0-2 -Constant (const byte/signed word/word/dword/signed dword) print_plex::$0 = PLEX_COUNT#0-1 -Succesful SSA optimization Pass2ConstantIdentification -Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$1) -Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$4) -Succesful SSA optimization Pass2ConstantAdditionElimination -Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) plexSort::$1 ← (byte) plexSort::m#2 -Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) plexSort::$4 ← (byte) plexSort::s#3 -Resolved ranged next value plexInit::i#1 ← ++ plexInit::i#2 to ++ -Resolved ranged comparison value if(plexInit::i#1!=rangelast(0,plexInit::$0)) goto plexInit::@1 to (const byte/signed word/word/dword/signed dword) plexInit::$0+(byte/signed byte/word/signed word/dword/signed dword) 1 -Resolved ranged next value plexSort::m#1 ← ++ plexSort::m#2 to ++ -Resolved ranged comparison value if(plexSort::m#1!=rangelast(0,plexSort::$0)) goto plexSort::@1 to (const byte/signed word/word/dword/signed dword) plexSort::$0+(byte/signed byte/word/signed word/dword/signed dword) 1 -Resolved ranged next value print_plex::i#1 ← ++ print_plex::i#2 to ++ -Resolved ranged comparison value if(print_plex::i#1!=rangelast(0,print_plex::$0)) goto print_plex::@1 to (const byte/signed word/word/dword/signed dword) print_plex::$0+(byte/signed byte/word/signed word/dword/signed dword) 1 -Culled Empty Block (label) print_ln::@2 -Culled Empty Block (label) @10 -Culled Empty Block (label) print_byte::@2 -Culled Empty Block (label) print_cls::@2 -Culled Empty Block (label) @14 -Culled Empty Block (label) plexSort::@4 -Culled Empty Block (label) main::@5 -Culled Empty Block (label) print_plex::@5 -Culled Empty Block (label) @20 -Succesful SSA optimization Pass2CullEmptyBlocks -Not aliassing across scopes: print_line_cursor#12 print_line_cursor#34 -Not aliassing across scopes: print_char::ch#3 print_char::ch#0 -Not aliassing across scopes: print_char_cursor#24 print_char_cursor#40 -Alias (byte) plexSort::m#2 = (byte~) plexSort::$1 -Alias (byte) plexSort::s#3 = (byte~) plexSort::$4 -Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: print_line_cursor#12 print_line_cursor#34 -Not aliassing across scopes: print_char::ch#3 print_char::ch#0 -Not aliassing across scopes: print_char_cursor#24 print_char_cursor#40 -Simple Condition (bool~) plexSort::$5 if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 -Simple Condition (bool~) plexSort::$6 if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 -Succesful SSA optimization Pass2ConditionalJumpSimplification -Not aliassing across scopes: print_line_cursor#12 print_line_cursor#34 -Not aliassing across scopes: print_char::ch#3 print_char::ch#0 -Not aliassing across scopes: print_char_cursor#24 print_char_cursor#40 -OPTIMIZING CONTROL FLOW GRAPH -Inlining constant with var siblings (const byte) print_char::ch#2 -Inlining constant with var siblings (const byte) print_char::ch#2 -Inlining constant with var siblings (const byte) print_char::ch#2 -Inlining constant with var siblings (const byte*) print_cls::sc#0 -Inlining constant with var siblings (const byte*) print_cls::sc#0 -Inlining constant with var siblings (const byte) plexInit::i#0 -Inlining constant with var siblings (const byte) plexInit::i#0 -Inlining constant with var siblings (const byte) plexSort::m#0 -Inlining constant with var siblings (const byte) plexSort::m#0 -Inlining constant with var siblings (const byte) print_plex::i#0 -Inlining constant with var siblings (const byte) print_plex::i#0 -Inlining constant with var siblings (const byte*) print_line_cursor#0 -Inlining constant with var siblings (const byte*) print_line_cursor#0 -Inlining constant with var siblings (const byte*) print_line_cursor#0 -Constant inlined print_char::ch#2 = (byte) ' ' -Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000 -Constant inlined plexInit::$0 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 -Constant inlined plexSort::$0 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2 -Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024 -Constant inlined plexInit::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined plexSort::m#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined print_plex::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024 -Constant inlined $1 = (const byte[]) print_hextab#0 -Constant inlined print_plex::$0 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@3 main::@4 main::@return print_plex print_plex::@1 print_plex::@3 print_plex::@4 print_plex::@2 print_plex::@return print_ln print_ln::@1 print_ln::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return plexSort plexSort::@1 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::@return plexSort::@7 print_cls print_cls::@1 print_cls::@return plexInit plexInit::@1 plexInit::@return -Added new block during phi lifting print_plex::@6(between print_plex::@4 and print_plex::@1) -Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) -Added new block during phi lifting plexSort::@8(between plexSort::@2 and plexSort::@1) -Added new block during phi lifting plexSort::@9(between plexSort::@7 and plexSort::@3) -Added new block during phi lifting plexSort::@10(between plexSort::@1 and plexSort::@3) -Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Added new block during phi lifting plexInit::@3(between plexInit::@1 and plexInit::@1) -Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@3 main::@4 main::@return print_plex print_plex::@1 print_plex::@3 print_plex::@4 print_plex::@2 print_plex::@return print_plex::@6 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_char print_char::@return print_byte print_byte::@1 print_byte::@return plexSort plexSort::@1 plexSort::@10 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::@return plexSort::@8 plexSort::@7 plexSort::@9 print_cls print_cls::@1 print_cls::@return print_cls::@3 plexInit plexInit::@1 plexInit::@return plexInit::@3 -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @19 -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 print_plex::@2 -Adding NOP phi() at start of plexSort -Adding NOP phi() at start of print_cls -Adding NOP phi() at start of plexInit -CALL GRAPH -Calls in [] to main:2 -Calls in [main] to plexInit:5 print_cls:7 print_plex:9 plexSort:11 print_plex:14 -Calls in [print_plex] to print_byte:20 print_char:22 print_ln:26 -Calls in [print_byte] to print_char:44 print_char:49 - -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Created 11 initial phi equivalence classes -Not coalescing [12] print_char_cursor#47 ← print_line_cursor#1 -Coalesced [13] print_line_cursor#35 ← print_line_cursor#1 -Coalesced [17] print_char_cursor#48 ← print_char_cursor#44 -Coalesced [21] print_char_cursor#52 ← print_char_cursor#25 -Coalesced [28] print_plex::i#5 ← print_plex::i#1 -Coalesced [29] print_char_cursor#49 ← print_char_cursor#25 -Coalesced [30] print_line_cursor#36 ← print_line_cursor#34 -Coalesced (already) [35] print_line_cursor#37 ← print_line_cursor#1 -Coalesced [42] print_char::ch#4 ← print_char::ch#0 -Coalesced (already) [43] print_char_cursor#50 ← print_char_cursor#40 -Coalesced [47] print_char::ch#5 ← print_char::ch#1 -Coalesced (already) [48] print_char_cursor#51 ← print_char_cursor#25 -Not coalescing [57] plexSort::s#6 ← plexSort::m#2 -Coalesced [67] plexSort::m#7 ← plexSort::m#1 -Coalesced [69] plexSort::s#5 ← plexSort::s#1 -Coalesced [76] print_cls::sc#3 ← print_cls::sc#1 -Coalesced [83] plexInit::i#3 ← plexInit::i#1 -Coalesced down to 8 phi equivalence classes -Culled Empty Block (label) print_plex::@6 -Culled Empty Block (label) print_ln::@3 -Culled Empty Block (label) plexSort::@8 -Culled Empty Block (label) plexSort::@9 -Culled Empty Block (label) print_cls::@3 -Culled Empty Block (label) plexInit::@3 -Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@3 main::@4 main::@return print_plex print_plex::@1 print_plex::@3 print_plex::@4 print_plex::@2 print_plex::@return print_ln print_ln::@1 print_ln::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return plexSort plexSort::@1 plexSort::@10 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::@return plexSort::@7 print_cls print_cls::@1 print_cls::@return plexInit plexInit::@1 plexInit::@return -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @19 -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 print_plex::@3 -Adding NOP phi() at start of print_plex::@2 -Adding NOP phi() at start of print_ln -Adding NOP phi() at start of plexSort -Adding NOP phi() at start of print_cls -Adding NOP phi() at start of plexInit -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... - -FINAL CONTROL FLOW GRAPH -@begin: scope:[] from - [0] phi() [ ] ( ) - to:@19 -@19: scope:[] from @begin - [1] phi() [ ] ( ) - [2] call main [ ] ( ) - to:@end -@end: scope:[] from @19 - [3] phi() [ ] ( ) -main: scope:[main] from @19 - [4] phi() [ ] ( main:2 [ ] ) - [5] call plexInit [ ] ( main:2 [ ] ) - to:main::@1 -main::@1: scope:[main] from main - [6] phi() [ ] ( main:2 [ ] ) - [7] call print_cls [ ] ( main:2 [ ] ) - to:main::@2 -main::@2: scope:[main] from main::@1 - [8] phi() [ ] ( main:2 [ ] ) - [9] call print_plex [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - to:main::@3 -main::@3: scope:[main] from main::@2 - [10] phi() [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - [11] call plexSort [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - to:main::@4 -main::@4: scope:[main] from main::@3 - [12] (byte*~) print_char_cursor#47 ← (byte*) print_line_cursor#1 [ print_char_cursor#47 print_line_cursor#1 ] ( main:2 [ print_char_cursor#47 print_line_cursor#1 ] ) - [13] call print_plex [ ] ( main:2 [ ] ) - to:main::@return -main::@return: scope:[main] from main::@4 - [14] return [ ] ( main:2 [ ] ) - to:@return -print_plex: scope:[print_plex] from main::@2 main::@4 - [15] (byte*) print_line_cursor#34 ← phi( main::@2/((byte*))(word/signed word/dword/signed dword) 1024 main::@4/(byte*) print_line_cursor#1 ) [ print_char_cursor#44 print_line_cursor#34 ] ( main:2::print_plex:9 [ print_char_cursor#44 print_line_cursor#34 ] main:2::print_plex:13 [ print_char_cursor#44 print_line_cursor#34 ] ) - [15] (byte*) print_char_cursor#44 ← phi( main::@2/((byte*))(word/signed word/dword/signed dword) 1024 main::@4/(byte*~) print_char_cursor#47 ) [ print_char_cursor#44 print_line_cursor#34 ] ( main:2::print_plex:9 [ print_char_cursor#44 print_line_cursor#34 ] main:2::print_plex:13 [ print_char_cursor#44 print_line_cursor#34 ] ) - to:print_plex::@1 -print_plex::@1: scope:[print_plex] from print_plex print_plex::@4 - [16] (byte*) print_char_cursor#40 ← phi( print_plex/(byte*) print_char_cursor#44 print_plex::@4/(byte*) print_char_cursor#25 ) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ) - [16] (byte) print_plex::i#2 ← phi( print_plex/(byte/signed byte/word/signed word/dword/signed dword) 0 print_plex::@4/(byte) print_plex::i#1 ) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 ] ) - [17] (byte) print_byte::b#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ) - [18] call print_byte [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_plex::@3 -print_plex::@3: scope:[print_plex] from print_plex::@1 - [19] phi() [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - [20] call print_char [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_plex::@4 -print_plex::@4: scope:[print_plex] from print_plex::@3 - [21] (byte) print_plex::i#1 ← ++ (byte) print_plex::i#2 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) - [22] if((byte) print_plex::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_plex::@1 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) - to:print_plex::@2 -print_plex::@2: scope:[print_plex] from print_plex::@4 - [23] phi() [ print_line_cursor#34 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_char_cursor#25 ] ) - [24] call print_ln [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - to:print_plex::@return -print_plex::@return: scope:[print_plex] from print_plex::@2 - [25] return [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - to:@return -print_ln: scope:[print_ln] from print_plex::@2 - [26] phi() [ print_line_cursor#34 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#34 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#34 print_char_cursor#25 ] ) - to:print_ln::@1 -print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [27] (byte*) print_line_cursor#12 ← phi( print_ln/(byte*) print_line_cursor#34 print_ln::@1/(byte*) print_line_cursor#1 ) [ print_char_cursor#25 print_line_cursor#12 ] ( main:2::print_plex:9::print_ln:24 [ print_char_cursor#25 print_line_cursor#12 ] main:2::print_plex:13::print_ln:24 [ print_char_cursor#25 print_line_cursor#12 ] ) - [28] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) - [29] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) - to:print_ln::@return -print_ln::@return: scope:[print_ln] from print_ln::@1 - [30] return [ print_line_cursor#1 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 ] ) - to:@return -print_char: scope:[print_char] from print_byte print_byte::@1 print_plex::@3 - [31] (byte*) print_char_cursor#24 ← phi( print_byte/(byte*) print_char_cursor#40 print_byte::@1/(byte*) print_char_cursor#25 print_plex::@3/(byte*) print_char_cursor#25 ) [ print_char::ch#3 print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] ) - [31] (byte) print_char::ch#3 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 print_plex::@3/(byte) ' ' ) [ print_char::ch#3 print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char::ch#3 print_char_cursor#24 ] ) - [32] *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 [ print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] ) - [33] (byte*) print_char_cursor#25 ← ++ (byte*) print_char_cursor#24 [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_char::@return -print_char::@return: scope:[print_char] from print_char - [34] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:@return -print_byte: scope:[print_byte] from print_plex::@1 - [35] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ) - [36] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ) - [37] call print_char [ print_char_cursor#25 print_byte::b#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] ) - to:print_byte::@1 -print_byte::@1: scope:[print_byte] from print_byte - [38] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#25 print_byte::$2 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] ) - [39] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#25 print_char::ch#1 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] ) - [40] call print_char [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:print_byte::@return -print_byte::@return: scope:[print_byte] from print_byte::@1 - [41] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - to:@return -plexSort: scope:[plexSort] from main::@3 - [42] phi() [ ] ( main:2::plexSort:11 [ print_line_cursor#1 ] ) - to:plexSort::@1 -plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 - [43] (byte) plexSort::m#2 ← phi( plexSort/(byte/signed byte/word/signed word/dword/signed dword) 0 plexSort::@2/(byte) plexSort::m#1 ) [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) - [44] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) - [45] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) - [46] (byte) plexSort::cur_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ) - [47] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0)) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) - to:plexSort::@10 -plexSort::@10: scope:[plexSort] from plexSort::@1 - [48] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) - to:plexSort::@3 -plexSort::@3: scope:[plexSort] from plexSort::@10 plexSort::@7 - [49] (byte) plexSort::s#3 ← phi( plexSort::@7/(byte) plexSort::s#1 plexSort::@10/(byte~) plexSort::s#6 ) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) - [50] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) - [51] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) - [52] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) - to:plexSort::@5 -plexSort::@5: scope:[plexSort] from plexSort::@3 plexSort::@7 - [53] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) - [54] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) - to:plexSort::@2 -plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 - [55] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) - [56] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) - to:plexSort::@return -plexSort::@return: scope:[plexSort] from plexSort::@2 - [57] return [ ] ( main:2::plexSort:11 [ print_line_cursor#1 ] ) - to:@return -plexSort::@7: scope:[plexSort] from plexSort::@3 - [58] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) - to:plexSort::@5 -print_cls: scope:[print_cls] from main::@1 - [59] phi() [ ] ( main:2::print_cls:7 [ ] ) - to:print_cls::@1 -print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 - [60] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) - [61] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) - [62] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) - [63] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) - to:print_cls::@return -print_cls::@return: scope:[print_cls] from print_cls::@1 - [64] return [ ] ( main:2::print_cls:7 [ ] ) - to:@return -plexInit: scope:[plexInit] from main - [65] phi() [ ] ( main:2::plexInit:5 [ ] ) - to:plexInit::@1 -plexInit::@1: scope:[plexInit] from plexInit plexInit::@1 - [66] (byte) plexInit::i#2 ← phi( plexInit/(byte/signed byte/word/signed word/dword/signed dword) 0 plexInit::@1/(byte) plexInit::i#1 ) [ plexInit::i#2 ] ( main:2::plexInit:5 [ plexInit::i#2 ] ) - [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:2::plexInit:5 [ plexInit::i#2 ] ) - [68] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) - [69] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) - to:plexInit::@return -plexInit::@return: scope:[plexInit] from plexInit::@1 - [70] return [ ] ( main:2::plexInit:5 [ ] ) - to:@return - -DOMINATORS -@begin dominated by @begin -@19 dominated by @begin @19 -@end dominated by @end @begin @19 -main dominated by main @begin @19 -main::@1 dominated by main main::@1 @begin @19 -main::@2 dominated by main main::@1 main::@2 @begin @19 -main::@3 dominated by main main::@1 main::@2 main::@3 @begin @19 -main::@4 dominated by main main::@1 main::@2 main::@3 main::@4 @begin @19 -main::@return dominated by main::@return main main::@1 main::@2 main::@3 main::@4 @begin @19 -print_plex dominated by print_plex main main::@1 main::@2 @begin @19 -print_plex::@1 dominated by print_plex main print_plex::@1 main::@1 main::@2 @begin @19 -print_plex::@3 dominated by print_plex main print_plex::@1 print_plex::@3 main::@1 main::@2 @begin @19 -print_plex::@4 dominated by print_plex main print_plex::@1 print_plex::@4 print_plex::@3 main::@1 main::@2 @begin @19 -print_plex::@2 dominated by print_plex main print_plex::@2 print_plex::@1 print_plex::@4 print_plex::@3 main::@1 main::@2 @begin @19 -print_plex::@return dominated by print_plex main print_plex::@2 print_plex::@1 print_plex::@4 print_plex::@3 main::@1 main::@2 @begin @19 print_plex::@return -print_ln dominated by print_plex main print_plex::@2 print_plex::@1 print_plex::@4 print_plex::@3 main::@1 main::@2 @begin @19 print_ln -print_ln::@1 dominated by print_ln::@1 print_plex main print_plex::@2 print_plex::@1 print_plex::@4 print_plex::@3 main::@1 main::@2 @begin @19 print_ln -print_ln::@return dominated by print_ln::@1 print_plex main print_plex::@2 print_plex::@1 print_ln::@return print_plex::@4 print_plex::@3 main::@1 main::@2 @begin @19 print_ln -print_char dominated by print_plex main print_plex::@1 print_char main::@1 main::@2 @begin @19 -print_char::@return dominated by print_plex main print_plex::@1 print_char main::@1 main::@2 print_char::@return @begin @19 -print_byte dominated by print_plex main print_plex::@1 main::@1 main::@2 @begin print_byte @19 -print_byte::@1 dominated by print_plex main print_plex::@1 main::@1 main::@2 print_byte::@1 @begin print_byte @19 -print_byte::@return dominated by print_plex main print_plex::@1 main::@1 main::@2 print_byte::@1 @begin print_byte print_byte::@return @19 -plexSort dominated by main main::@1 main::@2 main::@3 @begin @19 plexSort -plexSort::@1 dominated by plexSort::@1 main main::@1 main::@2 main::@3 @begin @19 plexSort -plexSort::@10 dominated by plexSort::@1 main plexSort::@10 main::@1 main::@2 main::@3 @begin @19 plexSort -plexSort::@3 dominated by plexSort::@1 main plexSort::@10 main::@1 main::@2 main::@3 @begin @19 plexSort plexSort::@3 -plexSort::@5 dominated by plexSort::@1 main plexSort::@10 main::@1 main::@2 main::@3 @begin @19 plexSort plexSort::@3 plexSort::@5 -plexSort::@2 dominated by plexSort::@2 plexSort::@1 main main::@1 main::@2 main::@3 @begin @19 plexSort -plexSort::@return dominated by plexSort::@2 plexSort::@1 plexSort::@return main main::@1 main::@2 main::@3 @begin @19 plexSort -plexSort::@7 dominated by plexSort::@1 main plexSort::@10 main::@1 main::@2 main::@3 @begin @19 plexSort plexSort::@7 plexSort::@3 -print_cls dominated by main main::@1 @begin @19 print_cls -print_cls::@1 dominated by main main::@1 @begin @19 print_cls::@1 print_cls -print_cls::@return dominated by main main::@1 print_cls::@return @begin @19 print_cls::@1 print_cls -plexInit dominated by main @begin plexInit @19 -plexInit::@1 dominated by main plexInit::@1 @begin plexInit @19 -plexInit::@return dominated by main plexInit::@1 @begin plexInit @19 plexInit::@return - -NATURAL LOOPS -Found back edge: Loop head: print_plex::@1 tails: print_plex::@4 blocks: null -Found back edge: Loop head: print_ln::@1 tails: print_ln::@1 blocks: null -Found back edge: Loop head: plexSort::@1 tails: plexSort::@2 blocks: null -Found back edge: Loop head: plexSort::@3 tails: plexSort::@7 blocks: null -Found back edge: Loop head: print_cls::@1 tails: print_cls::@1 blocks: null -Found back edge: Loop head: plexInit::@1 tails: plexInit::@1 blocks: null -Populated: Loop head: print_plex::@1 tails: print_plex::@4 blocks: print_plex::@4 print_plex::@3 print_plex::@1 -Populated: Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 -Populated: Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 -Populated: Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 -Populated: Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 -Populated: Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 -Loop head: print_plex::@1 tails: print_plex::@4 blocks: print_plex::@4 print_plex::@3 print_plex::@1 -Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 -Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 -Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 -Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 -Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 - -NATURAL LOOPS WITH DEPTH -Found 0 loops in scope [] -Found 0 loops in scope [main] -Found 1 loops in scope [plexInit] - Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 -Found 1 loops in scope [print_cls] - Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 -Found 1 loops in scope [print_plex] - Loop head: print_plex::@1 tails: print_plex::@4 blocks: print_plex::@4 print_plex::@3 print_plex::@1 -Found 2 loops in scope [plexSort] - Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 - Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 -Found 0 loops in scope [print_byte] -Found 0 loops in scope [print_char] -Found 1 loops in scope [print_ln] - Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 -Loop head: print_plex::@1 tails: print_plex::@4 blocks: print_plex::@4 print_plex::@3 print_plex::@1 depth: 1 -Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 depth: 1 -Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 depth: 1 -Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 depth: 2 -Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 depth: 1 -Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 depth: 1 - - -VARIABLE REGISTER WEIGHTS -(byte) PLEX_COUNT -(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX -(byte[PLEX_COUNT#0]) PLEX_YPOS -(void()) main() -(void()) plexInit() -(byte) plexInit::i -(byte) plexInit::i#1 16.5 -(byte) plexInit::i#2 22.0 -(void()) plexSort() -(byte) plexSort::cur_idx -(byte) plexSort::cur_idx#0 22.0 -(byte) plexSort::m -(byte) plexSort::m#1 16.5 -(byte) plexSort::m#2 4.230769230769231 -(byte) plexSort::nxt_idx -(byte) plexSort::nxt_idx#0 3.0 -(byte) plexSort::nxt_y -(byte) plexSort::nxt_y#0 13.666666666666666 -(byte) plexSort::s -(byte) plexSort::s#1 138.33333333333334 -(byte) plexSort::s#2 22.0 -(byte) plexSort::s#3 207.5 -(byte~) plexSort::s#6 22.0 -(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#0 3.75 -(void()) print_char((byte) print_char::ch) -(byte) print_char::ch -(byte) print_char::ch#0 4.0 -(byte) print_char::ch#1 4.0 -(byte) print_char::ch#3 6.0 -(byte*) print_char_cursor -(byte*) print_char_cursor#24 9.5 -(byte*) print_char_cursor#25 2.1764705882352944 -(byte*) print_char_cursor#40 3.75 -(byte*) print_char_cursor#44 4.0 -(byte*~) print_char_cursor#47 4.0 -(void()) print_cls() -(byte*) print_cls::sc -(byte*) print_cls::sc#1 16.5 -(byte*) print_cls::sc#2 16.5 -(byte[]) print_hextab -(byte*) print_line_cursor -(byte*) print_line_cursor#1 4.111111111111112 -(byte*) print_line_cursor#12 24.0 -(byte*) print_line_cursor#34 0.4 -(void()) print_ln() -(void()) print_plex() -(byte) print_plex::i -(byte) print_plex::i#1 16.5 -(byte) print_plex::i#2 6.6000000000000005 -(byte*) print_screen - -Initial phi equivalence classes -[ print_plex::i#2 print_plex::i#1 ] -[ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 ] -[ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -[ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -[ plexSort::m#2 plexSort::m#1 ] -[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -[ print_cls::sc#2 print_cls::sc#1 ] -[ plexInit::i#2 plexInit::i#1 ] -Added variable print_byte::b#0 to zero page equivalence class [ print_byte::b#0 ] -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 ] -Added variable plexSort::nxt_idx#0 to zero page equivalence class [ plexSort::nxt_idx#0 ] -Added variable plexSort::nxt_y#0 to zero page equivalence class [ plexSort::nxt_y#0 ] -Added variable plexSort::cur_idx#0 to zero page equivalence class [ plexSort::cur_idx#0 ] -Added variable plexSort::s#2 to zero page equivalence class [ plexSort::s#2 ] -Complete equivalence classes -[ print_plex::i#2 print_plex::i#1 ] -[ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 ] -[ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -[ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -[ plexSort::m#2 plexSort::m#1 ] -[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -[ print_cls::sc#2 print_cls::sc#1 ] -[ plexInit::i#2 plexInit::i#1 ] -[ print_byte::b#0 ] -[ print_byte::$0 ] -[ print_byte::$2 ] -[ plexSort::nxt_idx#0 ] -[ plexSort::nxt_y#0 ] -[ plexSort::cur_idx#0 ] -[ plexSort::s#2 ] -Allocated zp ZP_BYTE:2 [ print_plex::i#2 print_plex::i#1 ] -Allocated zp ZP_WORD:3 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 ] -Allocated zp ZP_BYTE:5 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -Allocated zp ZP_WORD:6 [ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -Allocated zp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] -Allocated zp ZP_BYTE:9 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Allocated zp ZP_WORD:10 [ print_cls::sc#2 print_cls::sc#1 ] -Allocated zp ZP_BYTE:12 [ plexInit::i#2 plexInit::i#1 ] -Allocated zp ZP_BYTE:13 [ print_byte::b#0 ] -Allocated zp ZP_BYTE:14 [ print_byte::$0 ] -Allocated zp ZP_BYTE:15 [ print_byte::$2 ] -Allocated zp ZP_BYTE:16 [ plexSort::nxt_idx#0 ] -Allocated zp ZP_BYTE:17 [ plexSort::nxt_y#0 ] -Allocated zp ZP_BYTE:18 [ plexSort::cur_idx#0 ] -Allocated zp ZP_BYTE:19 [ plexSort::s#2 ] - -INITIAL ASM -//SEG0 Basic Upstart -.pc = $801 "Basic" -:BasicUpstart(main) -.pc = $80d "Program" -//SEG1 Global Constants & labels - .const PLEX_COUNT = $a - .label print_line_cursor = 3 - .label print_char_cursor = 6 -//SEG2 @begin -bbegin: -//SEG3 [1] phi from @begin to @19 [phi:@begin->@19] -b19_from_bbegin: - jmp b19 -//SEG4 @19 -b19: -//SEG5 [2] call main [ ] ( ) -//SEG6 [4] phi from @19 to main [phi:@19->main] -main_from_b19: - jsr main -//SEG7 [3] phi from @19 to @end [phi:@19->@end] -bend_from_b19: - jmp bend -//SEG8 @end -bend: -//SEG9 main -main: { - //SEG10 [5] call plexInit [ ] ( main:2 [ ] ) - //SEG11 [65] phi from main to plexInit [phi:main->plexInit] - plexInit_from_main: - jsr plexInit - //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - jmp b1 - //SEG13 main::@1 - b1: - //SEG14 [7] call print_cls [ ] ( main:2 [ ] ) - //SEG15 [59] phi from main::@1 to print_cls [phi:main::@1->print_cls] - print_cls_from_b1: - jsr print_cls - //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - jmp b2 - //SEG17 main::@2 - b2: - //SEG18 [9] call print_plex [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - //SEG19 [15] phi from main::@2 to print_plex [phi:main::@2->print_plex] - print_plex_from_b2: - //SEG20 [15] phi (byte*) print_line_cursor#34 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@2->print_plex#0] -- pbuz1=pbuc1 - lda #<$400 - sta print_line_cursor - lda #>$400 - sta print_line_cursor+1 - //SEG21 [15] phi (byte*) print_char_cursor#44 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@2->print_plex#1] -- pbuz1=pbuc1 - lda #<$400 - sta print_char_cursor - lda #>$400 - sta print_char_cursor+1 - jsr print_plex - //SEG22 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - jmp b3 - //SEG23 main::@3 - b3: - //SEG24 [11] call plexSort [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - //SEG25 [42] phi from main::@3 to plexSort [phi:main::@3->plexSort] - plexSort_from_b3: - jsr plexSort - jmp b4 - //SEG26 main::@4 - b4: - //SEG27 [12] (byte*~) print_char_cursor#47 ← (byte*) print_line_cursor#1 [ print_char_cursor#47 print_line_cursor#1 ] ( main:2 [ print_char_cursor#47 print_line_cursor#1 ] ) -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - //SEG28 [13] call print_plex [ ] ( main:2 [ ] ) - //SEG29 [15] phi from main::@4 to print_plex [phi:main::@4->print_plex] - print_plex_from_b4: - //SEG30 [15] phi (byte*) print_line_cursor#34 = (byte*) print_line_cursor#1 [phi:main::@4->print_plex#0] -- register_copy - //SEG31 [15] phi (byte*) print_char_cursor#44 = (byte*~) print_char_cursor#47 [phi:main::@4->print_plex#1] -- register_copy - jsr print_plex - jmp breturn - //SEG32 main::@return - breturn: - //SEG33 [14] return [ ] ( main:2 [ ] ) - rts -} -//SEG34 print_plex -print_plex: { - .label i = 2 - //SEG35 [16] phi from print_plex to print_plex::@1 [phi:print_plex->print_plex::@1] - b1_from_print_plex: - //SEG36 [16] phi (byte*) print_char_cursor#40 = (byte*) print_char_cursor#44 [phi:print_plex->print_plex::@1#0] -- register_copy - //SEG37 [16] phi (byte) print_plex::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_plex->print_plex::@1#1] -- vbuz1=vbuc1 - lda #0 - sta i - jmp b1 - //SEG38 [16] phi from print_plex::@4 to print_plex::@1 [phi:print_plex::@4->print_plex::@1] - b1_from_b4: - //SEG39 [16] phi (byte*) print_char_cursor#40 = (byte*) print_char_cursor#25 [phi:print_plex::@4->print_plex::@1#0] -- register_copy - //SEG40 [16] phi (byte) print_plex::i#2 = (byte) print_plex::i#1 [phi:print_plex::@4->print_plex::@1#1] -- register_copy - jmp b1 - //SEG41 print_plex::@1 - b1: - //SEG42 [17] (byte) print_byte::b#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ) -- vbuz1=pbuc1_derefidx_pbuc2_derefidx_vbuz2 - ldy i - lda PLEX_SORTED_IDX,y - tay - lda PLEX_YPOS,y - sta print_byte.b - //SEG43 [18] call print_byte [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - jsr print_byte - //SEG44 [19] phi from print_plex::@1 to print_plex::@3 [phi:print_plex::@1->print_plex::@3] - b3_from_b1: - jmp b3 - //SEG45 print_plex::@3 - b3: - //SEG46 [20] call print_char [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - //SEG47 [31] phi from print_plex::@3 to print_char [phi:print_plex::@3->print_char] - print_char_from_b3: - //SEG48 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#25 [phi:print_plex::@3->print_char#0] -- register_copy - //SEG49 [31] phi (byte) print_char::ch#3 = (byte) ' ' [phi:print_plex::@3->print_char#1] -- vbuz1=vbuc1 - lda #' ' - sta print_char.ch - jsr print_char - jmp b4 - //SEG50 print_plex::@4 - b4: - //SEG51 [21] (byte) print_plex::i#1 ← ++ (byte) print_plex::i#2 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) -- vbuz1=_inc_vbuz1 - inc i - //SEG52 [22] if((byte) print_plex::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_plex::@1 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) -- vbuz1_neq_vbuc1_then_la1 - lda i - cmp #PLEX_COUNT-1+1 - bne b1_from_b4 - //SEG53 [23] phi from print_plex::@4 to print_plex::@2 [phi:print_plex::@4->print_plex::@2] - b2_from_b4: - jmp b2 - //SEG54 print_plex::@2 - b2: - //SEG55 [24] call print_ln [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - //SEG56 [26] phi from print_plex::@2 to print_ln [phi:print_plex::@2->print_ln] - print_ln_from_b2: - jsr print_ln - jmp breturn - //SEG57 print_plex::@return - breturn: - //SEG58 [25] return [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - rts -} -//SEG59 print_ln -print_ln: { - //SEG60 [27] 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: - //SEG61 [27] phi (byte*) print_line_cursor#12 = (byte*) print_line_cursor#34 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy - jmp b1 - //SEG62 print_ln::@1 - b1: - //SEG63 [28] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) -- pbuz1=pbuz1_plus_vbuc1 - lda print_line_cursor - clc - adc #$28 - sta print_line_cursor - bcc !+ - inc print_line_cursor+1 - !: - //SEG64 [29] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) -- 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 - //SEG65 print_ln::@return - breturn: - //SEG66 [30] return [ print_line_cursor#1 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 ] ) - rts -} -//SEG67 print_char -print_char: { - .label ch = 5 - //SEG68 [32] *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 [ print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] ) -- _deref_pbuz1=vbuz2 - lda ch - ldy #0 - sta (print_char_cursor),y - //SEG69 [33] (byte*) print_char_cursor#25 ← ++ (byte*) print_char_cursor#24 [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - jmp breturn - //SEG70 print_char::@return - breturn: - //SEG71 [34] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - rts -} -//SEG72 print_byte -print_byte: { - .label _0 = $e - .label _2 = $f - .label b = $d - //SEG73 [35] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ) -- vbuz1=vbuz2_ror_4 - lda b - lsr - lsr - lsr - lsr - sta _0 - //SEG74 [36] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy _0 - lda print_hextab,y - sta print_char.ch - //SEG75 [37] call print_char [ print_char_cursor#25 print_byte::b#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] ) - //SEG76 [31] phi from print_byte to print_char [phi:print_byte->print_char] - print_char_from_print_byte: - //SEG77 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#40 [phi:print_byte->print_char#0] -- register_copy - //SEG78 [31] phi (byte) print_char::ch#3 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - jmp b1 - //SEG79 print_byte::@1 - b1: - //SEG80 [38] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#25 print_byte::$2 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 - lda #$f - and b - sta _2 - //SEG81 [39] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#25 print_char::ch#1 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy _2 - lda print_hextab,y - sta print_char.ch - //SEG82 [40] call print_char [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - //SEG83 [31] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - print_char_from_b1: - //SEG84 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#25 [phi:print_byte::@1->print_char#0] -- register_copy - //SEG85 [31] phi (byte) print_char::ch#3 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - jmp breturn - //SEG86 print_byte::@return - breturn: - //SEG87 [41] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - rts -} -//SEG88 plexSort -plexSort: { - .label nxt_idx = $10 - .label nxt_y = $11 - .label cur_idx = $12 - .label m = 8 - .label s = 9 - .label s_2 = $13 - //SEG89 [43] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] - b1_from_plexSort: - //SEG90 [43] phi (byte) plexSort::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 - lda #0 - sta m - jmp b1 - //SEG91 [43] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] - b1_from_b2: - //SEG92 [43] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy - jmp b1 - //SEG93 plexSort::@1 - b1: - //SEG94 [44] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy m - lda PLEX_SORTED_IDX+1,y - sta nxt_idx - //SEG95 [45] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy nxt_idx - lda PLEX_YPOS,y - sta nxt_y - //SEG96 [46] (byte) plexSort::cur_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy m - lda PLEX_SORTED_IDX,y - sta cur_idx - //SEG97 [47] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0)) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1_ge_pbuc1_derefidx_vbuz2_then_la1 - lda nxt_y - ldy cur_idx - cmp PLEX_YPOS,y - bcs b2 - jmp b10 - //SEG98 plexSort::@10 - b10: - //SEG99 [48] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) -- vbuz1=vbuz2 - lda m - sta s - //SEG100 [49] phi from plexSort::@10 plexSort::@7 to plexSort::@3 [phi:plexSort::@10/plexSort::@7->plexSort::@3] - b3_from_b10: - b3_from_b7: - //SEG101 [49] phi (byte) plexSort::s#3 = (byte~) plexSort::s#6 [phi:plexSort::@10/plexSort::@7->plexSort::@3#0] -- register_copy - jmp b3 - //SEG102 plexSort::@3 - b3: - //SEG103 [50] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 - ldy s - lda PLEX_SORTED_IDX,y - sta PLEX_SORTED_IDX+1,y - //SEG104 [51] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1=_dec_vbuz1 - dec s - //SEG105 [52] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_neq_vbuc1_then_la1 - lda s - cmp #$ff - bne b7 - jmp b5 - //SEG106 plexSort::@5 - b5: - //SEG107 [53] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) -- vbuz1=_inc_vbuz2 - ldy s - iny - sty s_2 - //SEG108 [54] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 - lda nxt_idx - ldy s_2 - sta PLEX_SORTED_IDX,y - jmp b2 - //SEG109 plexSort::@2 - b2: - //SEG110 [55] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) -- vbuz1=_inc_vbuz1 - inc m - //SEG111 [56] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) -- vbuz1_neq_vbuc1_then_la1 - lda m - cmp #PLEX_COUNT-2+1 - bne b1_from_b2 - jmp breturn - //SEG112 plexSort::@return - breturn: - //SEG113 [57] return [ ] ( main:2::plexSort:11 [ print_line_cursor#1 ] ) - rts - //SEG114 plexSort::@7 - b7: - //SEG115 [58] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_lt_pbuc1_derefidx_pbuc2_derefidx_vbuz2_then_la1 - lda nxt_y - ldx s - ldy PLEX_SORTED_IDX,x - cmp PLEX_YPOS,y - bcc b3_from_b7 - jmp b5 -} -//SEG116 print_cls -print_cls: { - .label sc = $a - //SEG117 [60] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] - b1_from_print_cls: - //SEG118 [60] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta sc - lda #>$400 - sta sc+1 - jmp b1 - //SEG119 [60] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] - b1_from_b1: - //SEG120 [60] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy - jmp b1 - //SEG121 print_cls::@1 - b1: - //SEG122 [61] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - //SEG123 [62] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - //SEG124 [63] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#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 - //SEG125 print_cls::@return - breturn: - //SEG126 [64] return [ ] ( main:2::print_cls:7 [ ] ) - rts -} -//SEG127 plexInit -plexInit: { - .label i = $c - //SEG128 [66] phi from plexInit to plexInit::@1 [phi:plexInit->plexInit::@1] - b1_from_plexInit: - //SEG129 [66] phi (byte) plexInit::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexInit->plexInit::@1#0] -- vbuz1=vbuc1 - lda #0 - sta i - jmp b1 - //SEG130 [66] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] - b1_from_b1: - //SEG131 [66] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy - jmp b1 - //SEG132 plexInit::@1 - b1: - //SEG133 [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:2::plexInit:5 [ plexInit::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1 - ldy i - tya - sta PLEX_SORTED_IDX,y - //SEG134 [68] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) -- vbuz1=_inc_vbuz1 - inc i - //SEG135 [69] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 - lda i - cmp #PLEX_COUNT-1+1 - bne b1_from_b1 - jmp breturn - //SEG136 plexInit::@return - breturn: - //SEG137 [70] return [ ] ( main:2::plexInit:5 [ ] ) - rts -} - print_hextab: .text "0123456789abcdef" - PLEX_YPOS: .byte $ff, $12, $11, $34, 2, $81, $77, $81, $ef, $11 - PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 - -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [12] (byte*~) print_char_cursor#47 ← (byte*) print_line_cursor#1 [ print_char_cursor#47 print_line_cursor#1 ] ( main:2 [ print_char_cursor#47 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [17] (byte) print_byte::b#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ print_plex::i#2 print_plex::i#1 ] -Statement [28] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) always clobbers reg byte a -Statement [29] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) always clobbers reg byte a -Statement [32] *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 [ print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ print_plex::i#2 print_plex::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ print_byte::b#0 ] -Statement [35] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ print_byte::b#0 ] -Statement [38] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#25 print_byte::$2 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] ) always clobbers reg byte a -Statement [50] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ plexSort::nxt_idx#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ plexSort::nxt_y#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -Statement [54] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) always clobbers reg byte a -Statement [58] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) always clobbers reg byte a -Statement [61] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [63] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) always clobbers reg byte a -Statement [12] (byte*~) print_char_cursor#47 ← (byte*) print_line_cursor#1 [ print_char_cursor#47 print_line_cursor#1 ] ( main:2 [ print_char_cursor#47 print_line_cursor#1 ] ) always clobbers reg byte a -Statement [17] (byte) print_byte::b#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ) always clobbers reg byte a -Statement [28] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) always clobbers reg byte a -Statement [29] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) always clobbers reg byte a -Statement [32] *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 [ print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] ) always clobbers reg byte y -Statement [35] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a -Statement [38] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#25 print_byte::$2 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] ) always clobbers reg byte a -Statement [47] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0)) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) always clobbers reg byte a -Statement [50] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a -Statement [54] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) always clobbers reg byte a -Statement [58] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) always clobbers reg byte a -Statement [61] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y -Statement [63] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ print_plex::i#2 print_plex::i#1 ] : zp ZP_BYTE:2 , reg byte x , -Potential registers zp ZP_WORD:3 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 ] : zp ZP_WORD:3 , -Potential registers zp ZP_BYTE:5 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:6 [ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] : zp ZP_WORD:6 , -Potential registers zp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:10 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:10 , -Potential registers zp ZP_BYTE:12 [ plexInit::i#2 plexInit::i#1 ] : zp ZP_BYTE:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:13 [ print_byte::b#0 ] : zp ZP_BYTE:13 , reg byte x , -Potential registers zp ZP_BYTE:14 [ print_byte::$0 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:15 [ print_byte::$2 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:16 [ plexSort::nxt_idx#0 ] : zp ZP_BYTE:16 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:17 [ plexSort::nxt_y#0 ] : zp ZP_BYTE:17 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:18 [ plexSort::cur_idx#0 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:19 [ plexSort::s#2 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plexSort] 367.83: zp ZP_BYTE:9 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 22: zp ZP_BYTE:18 [ plexSort::cur_idx#0 ] 22: zp ZP_BYTE:19 [ plexSort::s#2 ] 20.73: zp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] 13.67: zp ZP_BYTE:17 [ plexSort::nxt_y#0 ] 3: zp ZP_BYTE:16 [ plexSort::nxt_idx#0 ] -Uplift Scope [] 28.51: zp ZP_WORD:3 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 ] 23.43: zp ZP_WORD:6 [ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -Uplift Scope [plexInit] 38.5: zp ZP_BYTE:12 [ plexInit::i#2 plexInit::i#1 ] -Uplift Scope [print_cls] 33: zp ZP_WORD:10 [ print_cls::sc#2 print_cls::sc#1 ] -Uplift Scope [print_plex] 23.1: zp ZP_BYTE:2 [ print_plex::i#2 print_plex::i#1 ] -Uplift Scope [print_char] 14: zp ZP_BYTE:5 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -Uplift Scope [print_byte] 4: zp ZP_BYTE:14 [ print_byte::$0 ] 4: zp ZP_BYTE:15 [ print_byte::$2 ] 3.75: zp ZP_BYTE:13 [ print_byte::b#0 ] -Uplift Scope [print_ln] -Uplift Scope [main] - -Uplifting [plexSort] best 6894 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte y [ plexSort::cur_idx#0 ] reg byte x [ plexSort::s#2 ] zp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] zp ZP_BYTE:17 [ plexSort::nxt_y#0 ] zp ZP_BYTE:16 [ plexSort::nxt_idx#0 ] -Limited combination testing to 100 combinations of 1296 possible. -Uplifting [] best 6894 combination zp ZP_WORD:3 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 ] zp ZP_WORD:6 [ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -Uplifting [plexInit] best 6774 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] -Uplifting [print_cls] best 6774 combination zp ZP_WORD:10 [ print_cls::sc#2 print_cls::sc#1 ] -Uplifting [print_plex] best 6654 combination reg byte x [ print_plex::i#2 print_plex::i#1 ] -Uplifting [print_char] best 6642 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -Uplifting [print_byte] best 6634 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp ZP_BYTE:13 [ print_byte::b#0 ] -Uplifting [print_ln] best 6634 combination -Uplifting [main] best 6634 combination -Attempting to uplift remaining variables inzp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] -Uplifting [plexSort] best 6634 combination zp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:17 [ plexSort::nxt_y#0 ] -Uplifting [plexSort] best 6634 combination zp ZP_BYTE:17 [ plexSort::nxt_y#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:13 [ print_byte::b#0 ] -Uplifting [print_byte] best 6634 combination zp ZP_BYTE:13 [ print_byte::b#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:16 [ plexSort::nxt_idx#0 ] -Uplifting [plexSort] best 6634 combination zp ZP_BYTE:16 [ plexSort::nxt_idx#0 ] -Coalescing zero page register [ zp ZP_WORD:3 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 ] ] with [ zp ZP_WORD:10 [ print_cls::sc#2 print_cls::sc#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:8 [ plexSort::m#2 plexSort::m#1 ] ] with [ zp ZP_BYTE:13 [ print_byte::b#0 ] ] -Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] -Allocated (was zp ZP_WORD:6) zp ZP_WORD:4 [ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:6 [ plexSort::m#2 plexSort::m#1 print_byte::b#0 ] -Allocated (was zp ZP_BYTE:16) zp ZP_BYTE:7 [ plexSort::nxt_idx#0 ] -Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:8 [ plexSort::nxt_y#0 ] - -ASSEMBLER BEFORE OPTIMIZATION -//SEG0 Basic Upstart -.pc = $801 "Basic" -:BasicUpstart(main) -.pc = $80d "Program" -//SEG1 Global Constants & labels - .const PLEX_COUNT = $a - .label print_line_cursor = 2 - .label print_char_cursor = 4 -//SEG2 @begin -bbegin: -//SEG3 [1] phi from @begin to @19 [phi:@begin->@19] -b19_from_bbegin: - jmp b19 -//SEG4 @19 -b19: -//SEG5 [2] call main [ ] ( ) -//SEG6 [4] phi from @19 to main [phi:@19->main] -main_from_b19: - jsr main -//SEG7 [3] phi from @19 to @end [phi:@19->@end] -bend_from_b19: - jmp bend -//SEG8 @end -bend: -//SEG9 main -main: { - //SEG10 [5] call plexInit [ ] ( main:2 [ ] ) - //SEG11 [65] phi from main to plexInit [phi:main->plexInit] - plexInit_from_main: - jsr plexInit - //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - jmp b1 - //SEG13 main::@1 - b1: - //SEG14 [7] call print_cls [ ] ( main:2 [ ] ) - //SEG15 [59] phi from main::@1 to print_cls [phi:main::@1->print_cls] - print_cls_from_b1: - jsr print_cls - //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: - jmp b2 - //SEG17 main::@2 - b2: - //SEG18 [9] call print_plex [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - //SEG19 [15] phi from main::@2 to print_plex [phi:main::@2->print_plex] - print_plex_from_b2: - //SEG20 [15] phi (byte*) print_line_cursor#34 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@2->print_plex#0] -- pbuz1=pbuc1 - lda #<$400 - sta print_line_cursor - lda #>$400 - sta print_line_cursor+1 - //SEG21 [15] phi (byte*) print_char_cursor#44 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@2->print_plex#1] -- pbuz1=pbuc1 - lda #<$400 - sta print_char_cursor - lda #>$400 - sta print_char_cursor+1 - jsr print_plex - //SEG22 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - b3_from_b2: - jmp b3 - //SEG23 main::@3 - b3: - //SEG24 [11] call plexSort [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - //SEG25 [42] phi from main::@3 to plexSort [phi:main::@3->plexSort] - plexSort_from_b3: - jsr plexSort - jmp b4 - //SEG26 main::@4 - b4: - //SEG27 [12] (byte*~) print_char_cursor#47 ← (byte*) print_line_cursor#1 [ print_char_cursor#47 print_line_cursor#1 ] ( main:2 [ print_char_cursor#47 print_line_cursor#1 ] ) -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - //SEG28 [13] call print_plex [ ] ( main:2 [ ] ) - //SEG29 [15] phi from main::@4 to print_plex [phi:main::@4->print_plex] - print_plex_from_b4: - //SEG30 [15] phi (byte*) print_line_cursor#34 = (byte*) print_line_cursor#1 [phi:main::@4->print_plex#0] -- register_copy - //SEG31 [15] phi (byte*) print_char_cursor#44 = (byte*~) print_char_cursor#47 [phi:main::@4->print_plex#1] -- register_copy - jsr print_plex - jmp breturn - //SEG32 main::@return - breturn: - //SEG33 [14] return [ ] ( main:2 [ ] ) - rts -} -//SEG34 print_plex -print_plex: { - //SEG35 [16] phi from print_plex to print_plex::@1 [phi:print_plex->print_plex::@1] - b1_from_print_plex: - //SEG36 [16] phi (byte*) print_char_cursor#40 = (byte*) print_char_cursor#44 [phi:print_plex->print_plex::@1#0] -- register_copy - //SEG37 [16] phi (byte) print_plex::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_plex->print_plex::@1#1] -- vbuxx=vbuc1 - ldx #0 - jmp b1 - //SEG38 [16] phi from print_plex::@4 to print_plex::@1 [phi:print_plex::@4->print_plex::@1] - b1_from_b4: - //SEG39 [16] phi (byte*) print_char_cursor#40 = (byte*) print_char_cursor#25 [phi:print_plex::@4->print_plex::@1#0] -- register_copy - //SEG40 [16] phi (byte) print_plex::i#2 = (byte) print_plex::i#1 [phi:print_plex::@4->print_plex::@1#1] -- register_copy - jmp b1 - //SEG41 print_plex::@1 - b1: - //SEG42 [17] (byte) print_byte::b#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ) -- vbuz1=pbuc1_derefidx_pbuc2_derefidx_vbuxx - lda PLEX_SORTED_IDX,x - tay - lda PLEX_YPOS,y - sta print_byte.b - //SEG43 [18] call print_byte [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - jsr print_byte - //SEG44 [19] phi from print_plex::@1 to print_plex::@3 [phi:print_plex::@1->print_plex::@3] - b3_from_b1: - jmp b3 - //SEG45 print_plex::@3 - b3: - //SEG46 [20] call print_char [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - //SEG47 [31] phi from print_plex::@3 to print_char [phi:print_plex::@3->print_char] - print_char_from_b3: - //SEG48 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#25 [phi:print_plex::@3->print_char#0] -- register_copy - //SEG49 [31] phi (byte) print_char::ch#3 = (byte) ' ' [phi:print_plex::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - jmp b4 - //SEG50 print_plex::@4 - b4: - //SEG51 [21] (byte) print_plex::i#1 ← ++ (byte) print_plex::i#2 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG52 [22] if((byte) print_plex::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_plex::@1 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) -- vbuxx_neq_vbuc1_then_la1 - cpx #PLEX_COUNT-1+1 - bne b1_from_b4 - //SEG53 [23] phi from print_plex::@4 to print_plex::@2 [phi:print_plex::@4->print_plex::@2] - b2_from_b4: - jmp b2 - //SEG54 print_plex::@2 - b2: - //SEG55 [24] call print_ln [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - //SEG56 [26] phi from print_plex::@2 to print_ln [phi:print_plex::@2->print_ln] - print_ln_from_b2: - jsr print_ln - jmp breturn - //SEG57 print_plex::@return - breturn: - //SEG58 [25] return [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - rts -} -//SEG59 print_ln -print_ln: { - //SEG60 [27] 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: - //SEG61 [27] phi (byte*) print_line_cursor#12 = (byte*) print_line_cursor#34 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy - jmp b1 - //SEG62 print_ln::@1 - b1: - //SEG63 [28] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) -- pbuz1=pbuz1_plus_vbuc1 - lda print_line_cursor - clc - adc #$28 - sta print_line_cursor - bcc !+ - inc print_line_cursor+1 - !: - //SEG64 [29] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) -- 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 - //SEG65 print_ln::@return - breturn: - //SEG66 [30] return [ print_line_cursor#1 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 ] ) - rts -} -//SEG67 print_char -print_char: { - //SEG68 [32] *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 [ print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] ) -- _deref_pbuz1=vbuaa - ldy #0 - sta (print_char_cursor),y - //SEG69 [33] (byte*) print_char_cursor#25 ← ++ (byte*) print_char_cursor#24 [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - jmp breturn - //SEG70 print_char::@return - breturn: - //SEG71 [34] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - rts -} -//SEG72 print_byte -print_byte: { - .label b = 6 - //SEG73 [35] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ) -- vbuaa=vbuz1_ror_4 - lda b - lsr - lsr - lsr - lsr - //SEG74 [36] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa - tay - lda print_hextab,y - //SEG75 [37] call print_char [ print_char_cursor#25 print_byte::b#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] ) - //SEG76 [31] phi from print_byte to print_char [phi:print_byte->print_char] - print_char_from_print_byte: - //SEG77 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#40 [phi:print_byte->print_char#0] -- register_copy - //SEG78 [31] phi (byte) print_char::ch#3 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - jmp b1 - //SEG79 print_byte::@1 - b1: - //SEG80 [38] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#25 print_byte::$2 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] ) -- vbuaa=vbuz1_band_vbuc1 - lda #$f - and b - //SEG81 [39] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#25 print_char::ch#1 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa - tay - lda print_hextab,y - //SEG82 [40] call print_char [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - //SEG83 [31] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - print_char_from_b1: - //SEG84 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#25 [phi:print_byte::@1->print_char#0] -- register_copy - //SEG85 [31] phi (byte) print_char::ch#3 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - jmp breturn - //SEG86 print_byte::@return - breturn: - //SEG87 [41] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - rts -} -//SEG88 plexSort -plexSort: { - .label nxt_idx = 7 - .label nxt_y = 8 - .label m = 6 - //SEG89 [43] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] - b1_from_plexSort: - //SEG90 [43] phi (byte) plexSort::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 - lda #0 - sta m - jmp b1 - //SEG91 [43] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] - b1_from_b2: - //SEG92 [43] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy - jmp b1 - //SEG93 plexSort::@1 - b1: - //SEG94 [44] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy m - lda PLEX_SORTED_IDX+1,y - sta nxt_idx - //SEG95 [45] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy nxt_idx - lda PLEX_YPOS,y - sta nxt_y - //SEG96 [46] (byte) plexSort::cur_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1 - ldx m - ldy PLEX_SORTED_IDX,x - //SEG97 [47] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0)) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1_ge_pbuc1_derefidx_vbuyy_then_la1 - lda nxt_y - cmp PLEX_YPOS,y - bcs b2 - jmp b10 - //SEG98 plexSort::@10 - b10: - //SEG99 [48] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) -- vbuxx=vbuz1 - ldx m - //SEG100 [49] phi from plexSort::@10 plexSort::@7 to plexSort::@3 [phi:plexSort::@10/plexSort::@7->plexSort::@3] - b3_from_b10: - b3_from_b7: - //SEG101 [49] phi (byte) plexSort::s#3 = (byte~) plexSort::s#6 [phi:plexSort::@10/plexSort::@7->plexSort::@3#0] -- register_copy - jmp b3 - //SEG102 plexSort::@3 - b3: - //SEG103 [50] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda PLEX_SORTED_IDX,x - sta PLEX_SORTED_IDX+1,x - //SEG104 [51] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx=_dec_vbuxx - dex - //SEG105 [52] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx_neq_vbuc1_then_la1 - cpx #$ff - bne b7 - jmp b5 - //SEG106 plexSort::@5 - b5: - //SEG107 [53] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG108 [54] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) -- pbuc1_derefidx_vbuxx=vbuz1 - lda nxt_idx - sta PLEX_SORTED_IDX,x - jmp b2 - //SEG109 plexSort::@2 - b2: - //SEG110 [55] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) -- vbuz1=_inc_vbuz1 - inc m - //SEG111 [56] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) -- vbuz1_neq_vbuc1_then_la1 - lda m - cmp #PLEX_COUNT-2+1 - bne b1_from_b2 - jmp breturn - //SEG112 plexSort::@return - breturn: - //SEG113 [57] return [ ] ( main:2::plexSort:11 [ print_line_cursor#1 ] ) - rts - //SEG114 plexSort::@7 - b7: - //SEG115 [58] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_lt_pbuc1_derefidx_pbuc2_derefidx_vbuxx_then_la1 - lda nxt_y - ldy PLEX_SORTED_IDX,x - cmp PLEX_YPOS,y - bcc b3_from_b7 - jmp b5 -} -//SEG116 print_cls -print_cls: { - .label sc = 2 - //SEG117 [60] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] - b1_from_print_cls: - //SEG118 [60] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta sc - lda #>$400 - sta sc+1 - jmp b1 - //SEG119 [60] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] - b1_from_b1: - //SEG120 [60] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy - jmp b1 - //SEG121 print_cls::@1 - b1: - //SEG122 [61] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - //SEG123 [62] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - //SEG124 [63] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#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 - //SEG125 print_cls::@return - breturn: - //SEG126 [64] return [ ] ( main:2::print_cls:7 [ ] ) - rts -} -//SEG127 plexInit -plexInit: { - //SEG128 [66] phi from plexInit to plexInit::@1 [phi:plexInit->plexInit::@1] - b1_from_plexInit: - //SEG129 [66] phi (byte) plexInit::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexInit->plexInit::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp b1 - //SEG130 [66] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] - b1_from_b1: - //SEG131 [66] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy - jmp b1 - //SEG132 plexInit::@1 - b1: - //SEG133 [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:2::plexInit:5 [ plexInit::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta PLEX_SORTED_IDX,x - //SEG134 [68] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG135 [69] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 - cpx #PLEX_COUNT-1+1 - bne b1_from_b1 - jmp breturn - //SEG136 plexInit::@return - breturn: - //SEG137 [70] return [ ] ( main:2::plexInit:5 [ ] ) - rts -} - print_hextab: .text "0123456789abcdef" - PLEX_YPOS: .byte $ff, $12, $11, $34, 2, $81, $77, $81, $ef, $11 - PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp b19 -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 b3 -Removing instruction jmp b4 -Removing instruction jmp b2 -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 b10 -Removing instruction jmp b3 -Removing instruction jmp b5 -Removing instruction jmp b2 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing instruction ldy nxt_idx with TAY -Removing instruction lda nxt_y -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label b1_from_b4 with b1 -Replacing label b1_from_b1 with b1 -Replacing label b1_from_b1 with b1 -Replacing label b1_from_b2 with b1 -Replacing label b3_from_b7 with b3 -Replacing label b1_from_b1 with b1 -Replacing label b1_from_b1 with b1 -Replacing label b1_from_b1 with b1 -Removing instruction bbegin: -Removing instruction b19_from_bbegin: -Removing instruction main_from_b19: -Removing instruction bend_from_b19: -Removing instruction b1_from_main: -Removing instruction print_cls_from_b1: -Removing instruction b2_from_b1: -Removing instruction print_plex_from_b2: -Removing instruction b3_from_b2: -Removing instruction plexSort_from_b3: -Removing instruction b1_from_b4: -Removing instruction b3_from_b1: -Removing instruction print_char_from_b3: -Removing instruction b2_from_b4: -Removing instruction print_ln_from_b2: -Removing instruction b1_from_print_ln: -Removing instruction b1_from_b1: -Removing instruction b1_from_b2: -Removing instruction b3_from_b10: -Removing instruction b3_from_b7: -Removing instruction b1_from_b1: -Removing instruction b1_from_b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction b19: -Removing instruction bend: -Removing instruction plexInit_from_main: -Removing instruction b1: -Removing instruction b2: -Removing instruction b3: -Removing instruction b4: -Removing instruction print_plex_from_b4: -Removing instruction breturn: -Removing instruction b1_from_print_plex: -Removing instruction b3: -Removing instruction b4: -Removing instruction b2: -Removing instruction breturn: -Removing instruction breturn: -Removing instruction breturn: -Removing instruction print_char_from_print_byte: -Removing instruction b1: -Removing instruction print_char_from_b1: -Removing instruction breturn: -Removing instruction b1_from_plexSort: -Removing instruction b10: -Removing instruction breturn: -Removing instruction b1_from_print_cls: -Removing instruction breturn: -Removing instruction b1_from_plexInit: -Removing instruction breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp b1 -Removing instruction jmp b1 -Removing instruction jmp b1 -Removing instruction jmp b1 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction ldx m -Succesful ASM optimization Pass5UnnecesaryLoadElimination - -FINAL SYMBOL TABLE -(label) @19 -(label) @begin -(label) @end -(byte) PLEX_COUNT -(const byte) PLEX_COUNT#0 PLEX_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 10 -(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX -(const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 PLEX_SORTED_IDX = { fill( PLEX_COUNT#0, 0) } -(byte[PLEX_COUNT#0]) PLEX_YPOS -(const byte[PLEX_COUNT#0]) PLEX_YPOS#0 PLEX_YPOS = { (byte/word/signed word/dword/signed dword) 255, (byte/signed byte/word/signed word/dword/signed dword) 18, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 52, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/word/signed word/dword/signed dword) 129, (byte/signed byte/word/signed word/dword/signed dword) 119, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 239, (byte/signed byte/word/signed word/dword/signed dword) 17 } -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@3 -(label) main::@4 -(label) main::@return -(void()) plexInit() -(label) plexInit::@1 -(label) plexInit::@return -(byte) plexInit::i -(byte) plexInit::i#1 reg byte x 16.5 -(byte) plexInit::i#2 reg byte x 22.0 -(void()) plexSort() -(label) plexSort::@1 -(label) plexSort::@10 -(label) plexSort::@2 -(label) plexSort::@3 -(label) plexSort::@5 -(label) plexSort::@7 -(label) plexSort::@return -(byte) plexSort::cur_idx -(byte) plexSort::cur_idx#0 reg byte y 22.0 -(byte) plexSort::m -(byte) plexSort::m#1 m zp ZP_BYTE:6 16.5 -(byte) plexSort::m#2 m zp ZP_BYTE:6 4.230769230769231 -(byte) plexSort::nxt_idx -(byte) plexSort::nxt_idx#0 nxt_idx zp ZP_BYTE:7 3.0 -(byte) plexSort::nxt_y -(byte) plexSort::nxt_y#0 nxt_y zp ZP_BYTE:8 13.666666666666666 -(byte) plexSort::s -(byte) plexSort::s#1 reg byte x 138.33333333333334 -(byte) plexSort::s#2 reg byte x 22.0 -(byte) plexSort::s#3 reg byte x 207.5 -(byte~) plexSort::s#6 reg byte x 22.0 -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 reg byte a 4.0 -(byte~) print_byte::$2 reg byte a 4.0 -(label) print_byte::@1 -(label) print_byte::@return -(byte) print_byte::b -(byte) print_byte::b#0 b zp ZP_BYTE:6 3.75 -(void()) print_char((byte) print_char::ch) -(label) print_char::@return -(byte) print_char::ch -(byte) print_char::ch#0 reg byte a 4.0 -(byte) print_char::ch#1 reg byte a 4.0 -(byte) print_char::ch#3 reg byte a 6.0 -(byte*) print_char_cursor -(byte*) print_char_cursor#24 print_char_cursor zp ZP_WORD:4 9.5 -(byte*) print_char_cursor#25 print_char_cursor zp ZP_WORD:4 2.1764705882352944 -(byte*) print_char_cursor#40 print_char_cursor zp ZP_WORD:4 3.75 -(byte*) print_char_cursor#44 print_char_cursor zp ZP_WORD:4 4.0 -(byte*~) print_char_cursor#47 print_char_cursor zp ZP_WORD:4 4.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 -(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 4.111111111111112 -(byte*) print_line_cursor#12 print_line_cursor zp ZP_WORD:2 24.0 -(byte*) print_line_cursor#34 print_line_cursor zp ZP_WORD:2 0.4 -(void()) print_ln() -(label) print_ln::@1 -(label) print_ln::@return -(void()) print_plex() -(label) print_plex::@1 -(label) print_plex::@2 -(label) print_plex::@3 -(label) print_plex::@4 -(label) print_plex::@return -(byte) print_plex::i -(byte) print_plex::i#1 reg byte x 16.5 -(byte) print_plex::i#2 reg byte x 6.6000000000000005 -(byte*) print_screen - -reg byte x [ print_plex::i#2 print_plex::i#1 ] -zp ZP_WORD:2 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] -reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:4 [ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -zp ZP_BYTE:6 [ plexSort::m#2 plexSort::m#1 print_byte::b#0 ] -reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -reg byte x [ plexInit::i#2 plexInit::i#1 ] -reg byte a [ print_byte::$0 ] -reg byte a [ print_byte::$2 ] -zp ZP_BYTE:7 [ plexSort::nxt_idx#0 ] -zp ZP_BYTE:8 [ plexSort::nxt_y#0 ] -reg byte y [ plexSort::cur_idx#0 ] -reg byte x [ plexSort::s#2 ] - - -FINAL ASSEMBLER -Score: 5445 - -//SEG0 Basic Upstart -.pc = $801 "Basic" -:BasicUpstart(main) -.pc = $80d "Program" -//SEG1 Global Constants & labels - .const PLEX_COUNT = $a - .label print_line_cursor = 2 - .label print_char_cursor = 4 -//SEG2 @begin -//SEG3 [1] phi from @begin to @19 [phi:@begin->@19] -//SEG4 @19 -//SEG5 [2] call main [ ] ( ) -//SEG6 [4] phi from @19 to main [phi:@19->main] - jsr main -//SEG7 [3] phi from @19 to @end [phi:@19->@end] -//SEG8 @end -//SEG9 main -main: { - //SEG10 [5] call plexInit [ ] ( main:2 [ ] ) - //SEG11 [65] phi from main to plexInit [phi:main->plexInit] - jsr plexInit - //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] - //SEG13 main::@1 - //SEG14 [7] call print_cls [ ] ( main:2 [ ] ) - //SEG15 [59] phi from main::@1 to print_cls [phi:main::@1->print_cls] - jsr print_cls - //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - //SEG17 main::@2 - //SEG18 [9] call print_plex [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - //SEG19 [15] phi from main::@2 to print_plex [phi:main::@2->print_plex] - //SEG20 [15] phi (byte*) print_line_cursor#34 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@2->print_plex#0] -- pbuz1=pbuc1 - lda #<$400 - sta print_line_cursor - lda #>$400 - sta print_line_cursor+1 - //SEG21 [15] phi (byte*) print_char_cursor#44 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main::@2->print_plex#1] -- pbuz1=pbuc1 - lda #<$400 - sta print_char_cursor - lda #>$400 - sta print_char_cursor+1 - jsr print_plex - //SEG22 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - //SEG23 main::@3 - //SEG24 [11] call plexSort [ print_line_cursor#1 ] ( main:2 [ print_line_cursor#1 ] ) - //SEG25 [42] phi from main::@3 to plexSort [phi:main::@3->plexSort] - jsr plexSort - //SEG26 main::@4 - //SEG27 [12] (byte*~) print_char_cursor#47 ← (byte*) print_line_cursor#1 [ print_char_cursor#47 print_line_cursor#1 ] ( main:2 [ print_char_cursor#47 print_line_cursor#1 ] ) -- pbuz1=pbuz2 - lda print_line_cursor - sta print_char_cursor - lda print_line_cursor+1 - sta print_char_cursor+1 - //SEG28 [13] call print_plex [ ] ( main:2 [ ] ) - //SEG29 [15] phi from main::@4 to print_plex [phi:main::@4->print_plex] - //SEG30 [15] phi (byte*) print_line_cursor#34 = (byte*) print_line_cursor#1 [phi:main::@4->print_plex#0] -- register_copy - //SEG31 [15] phi (byte*) print_char_cursor#44 = (byte*~) print_char_cursor#47 [phi:main::@4->print_plex#1] -- register_copy - jsr print_plex - //SEG32 main::@return - //SEG33 [14] return [ ] ( main:2 [ ] ) - rts -} -//SEG34 print_plex -print_plex: { - //SEG35 [16] phi from print_plex to print_plex::@1 [phi:print_plex->print_plex::@1] - //SEG36 [16] phi (byte*) print_char_cursor#40 = (byte*) print_char_cursor#44 [phi:print_plex->print_plex::@1#0] -- register_copy - //SEG37 [16] phi (byte) print_plex::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:print_plex->print_plex::@1#1] -- vbuxx=vbuc1 - ldx #0 - //SEG38 [16] phi from print_plex::@4 to print_plex::@1 [phi:print_plex::@4->print_plex::@1] - //SEG39 [16] phi (byte*) print_char_cursor#40 = (byte*) print_char_cursor#25 [phi:print_plex::@4->print_plex::@1#0] -- register_copy - //SEG40 [16] phi (byte) print_plex::i#2 = (byte) print_plex::i#1 [phi:print_plex::@4->print_plex::@1#1] -- register_copy - //SEG41 print_plex::@1 - b1: - //SEG42 [17] (byte) print_byte::b#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) print_plex::i#2)) [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 ] ) -- vbuz1=pbuc1_derefidx_pbuc2_derefidx_vbuxx - lda PLEX_SORTED_IDX,x - tay - lda PLEX_YPOS,y - sta print_byte.b - //SEG43 [18] call print_byte [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - jsr print_byte - //SEG44 [19] phi from print_plex::@1 to print_plex::@3 [phi:print_plex::@1->print_plex::@3] - //SEG45 print_plex::@3 - //SEG46 [20] call print_char [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - //SEG47 [31] phi from print_plex::@3 to print_char [phi:print_plex::@3->print_char] - //SEG48 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#25 [phi:print_plex::@3->print_char#0] -- register_copy - //SEG49 [31] phi (byte) print_char::ch#3 = (byte) ' ' [phi:print_plex::@3->print_char#1] -- vbuaa=vbuc1 - lda #' ' - jsr print_char - //SEG50 print_plex::@4 - //SEG51 [21] (byte) print_plex::i#1 ← ++ (byte) print_plex::i#2 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG52 [22] if((byte) print_plex::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_plex::@1 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ( main:2::print_plex:9 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] main:2::print_plex:13 [ print_line_cursor#34 print_plex::i#1 print_char_cursor#25 ] ) -- vbuxx_neq_vbuc1_then_la1 - cpx #PLEX_COUNT-1+1 - bne b1 - //SEG53 [23] phi from print_plex::@4 to print_plex::@2 [phi:print_plex::@4->print_plex::@2] - //SEG54 print_plex::@2 - //SEG55 [24] call print_ln [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - //SEG56 [26] phi from print_plex::@2 to print_ln [phi:print_plex::@2->print_ln] - jsr print_ln - //SEG57 print_plex::@return - //SEG58 [25] return [ print_line_cursor#1 ] ( main:2::print_plex:9 [ print_line_cursor#1 ] main:2::print_plex:13 [ print_line_cursor#1 ] ) - rts -} -//SEG59 print_ln -print_ln: { - //SEG60 [27] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] - //SEG61 [27] phi (byte*) print_line_cursor#12 = (byte*) print_line_cursor#34 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy - //SEG62 print_ln::@1 - b1: - //SEG63 [28] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#12 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) -- pbuz1=pbuz1_plus_vbuc1 - lda print_line_cursor - clc - adc #$28 - sta print_line_cursor - bcc !+ - inc print_line_cursor+1 - !: - //SEG64 [29] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#25) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#25 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 print_char_cursor#25 ] ) -- 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 - !: - //SEG65 print_ln::@return - //SEG66 [30] return [ print_line_cursor#1 ] ( main:2::print_plex:9::print_ln:24 [ print_line_cursor#1 ] main:2::print_plex:13::print_ln:24 [ print_line_cursor#1 ] ) - rts -} -//SEG67 print_char -print_char: { - //SEG68 [32] *((byte*) print_char_cursor#24) ← (byte) print_char::ch#3 [ print_char_cursor#24 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#24 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#24 ] ) -- _deref_pbuz1=vbuaa - ldy #0 - sta (print_char_cursor),y - //SEG69 [33] (byte*) print_char_cursor#25 ← ++ (byte*) print_char_cursor#24 [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) -- pbuz1=_inc_pbuz1 - inc print_char_cursor - bne !+ - inc print_char_cursor+1 - !: - //SEG70 print_char::@return - //SEG71 [34] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_char:20 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:37 [ print_line_cursor#34 print_plex::i#2 print_byte::b#0 print_char_cursor#25 ] main:2::print_plex:9::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18::print_char:40 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - rts -} -//SEG72 print_byte -print_byte: { - .label b = 6 - //SEG73 [35] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_byte::$0 ] ) -- vbuaa=vbuz1_ror_4 - lda b - lsr - lsr - lsr - lsr - //SEG74 [36] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#40 print_byte::b#0 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa - tay - lda print_hextab,y - //SEG75 [37] call print_char [ print_char_cursor#25 print_byte::b#0 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::b#0 ] ) - //SEG76 [31] phi from print_byte to print_char [phi:print_byte->print_char] - //SEG77 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#40 [phi:print_byte->print_char#0] -- register_copy - //SEG78 [31] phi (byte) print_char::ch#3 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy - jsr print_char - //SEG79 print_byte::@1 - //SEG80 [38] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#25 print_byte::$2 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_byte::$2 ] ) -- vbuaa=vbuz1_band_vbuc1 - lda #$f - and b - //SEG81 [39] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#25 print_char::ch#1 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa - tay - lda print_hextab,y - //SEG82 [40] call print_char [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - //SEG83 [31] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] - //SEG84 [31] phi (byte*) print_char_cursor#24 = (byte*) print_char_cursor#25 [phi:print_byte::@1->print_char#0] -- register_copy - //SEG85 [31] phi (byte) print_char::ch#3 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy - jsr print_char - //SEG86 print_byte::@return - //SEG87 [41] return [ print_char_cursor#25 ] ( main:2::print_plex:9::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] main:2::print_plex:13::print_byte:18 [ print_line_cursor#34 print_plex::i#2 print_char_cursor#25 ] ) - rts -} -//SEG88 plexSort -plexSort: { - .label nxt_idx = 7 - .label nxt_y = 8 - .label m = 6 - //SEG89 [43] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] - //SEG90 [43] phi (byte) plexSort::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 - lda #0 - sta m - //SEG91 [43] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] - //SEG92 [43] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy - //SEG93 plexSort::@1 - b1: - //SEG94 [44] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy m - lda PLEX_SORTED_IDX+1,y - sta nxt_idx - //SEG95 [45] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 - tay - lda PLEX_YPOS,y - sta nxt_y - //SEG96 [46] (byte) plexSort::cur_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::cur_idx#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1 - ldx m - ldy PLEX_SORTED_IDX,x - //SEG97 [47] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::cur_idx#0)) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1_ge_pbuc1_derefidx_vbuyy_then_la1 - cmp PLEX_YPOS,y - bcs b2 - //SEG98 plexSort::@10 - //SEG99 [48] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) -- vbuxx=vbuz1 - //SEG100 [49] phi from plexSort::@10 plexSort::@7 to plexSort::@3 [phi:plexSort::@10/plexSort::@7->plexSort::@3] - //SEG101 [49] phi (byte) plexSort::s#3 = (byte~) plexSort::s#6 [phi:plexSort::@10/plexSort::@7->plexSort::@3#0] -- register_copy - //SEG102 plexSort::@3 - b3: - //SEG103 [50] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx - lda PLEX_SORTED_IDX,x - sta PLEX_SORTED_IDX+1,x - //SEG104 [51] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx=_dec_vbuxx - dex - //SEG105 [52] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx_neq_vbuc1_then_la1 - cpx #$ff - bne b7 - //SEG106 plexSort::@5 - b5: - //SEG107 [53] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG108 [54] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 ] ) -- pbuc1_derefidx_vbuxx=vbuz1 - lda nxt_idx - sta PLEX_SORTED_IDX,x - //SEG109 plexSort::@2 - b2: - //SEG110 [55] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) -- vbuz1=_inc_vbuz1 - inc m - //SEG111 [56] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#1 ] ) -- vbuz1_neq_vbuc1_then_la1 - lda m - cmp #PLEX_COUNT-2+1 - bne b1 - //SEG112 plexSort::@return - //SEG113 [57] return [ ] ( main:2::plexSort:11 [ print_line_cursor#1 ] ) - rts - //SEG114 plexSort::@7 - b7: - //SEG115 [58] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:2::plexSort:11 [ print_line_cursor#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_lt_pbuc1_derefidx_pbuc2_derefidx_vbuxx_then_la1 - lda nxt_y - ldy PLEX_SORTED_IDX,x - cmp PLEX_YPOS,y - bcc b3 - jmp b5 -} -//SEG116 print_cls -print_cls: { - .label sc = 2 - //SEG117 [60] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] - //SEG118 [60] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta sc - lda #>$400 - sta sc+1 - //SEG119 [60] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] - //SEG120 [60] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy - //SEG121 print_cls::@1 - b1: - //SEG122 [61] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 - lda #' ' - ldy #0 - sta (sc),y - //SEG123 [62] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 - inc sc - bne !+ - inc sc+1 - !: - //SEG124 [63] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) -- pbuz1_neq_pbuc1_then_la1 - lda sc+1 - cmp #>$400+$3e8 - bne b1 - lda sc - cmp #<$400+$3e8 - bne b1 - //SEG125 print_cls::@return - //SEG126 [64] return [ ] ( main:2::print_cls:7 [ ] ) - rts -} -//SEG127 plexInit -plexInit: { - //SEG128 [66] phi from plexInit to plexInit::@1 [phi:plexInit->plexInit::@1] - //SEG129 [66] phi (byte) plexInit::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexInit->plexInit::@1#0] -- vbuxx=vbuc1 - ldx #0 - //SEG130 [66] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] - //SEG131 [66] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy - //SEG132 plexInit::@1 - b1: - //SEG133 [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:2::plexInit:5 [ plexInit::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta PLEX_SORTED_IDX,x - //SEG134 [68] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) -- vbuxx=_inc_vbuxx - inx - //SEG135 [69] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:2::plexInit:5 [ plexInit::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 - cpx #PLEX_COUNT-1+1 - bne b1 - //SEG136 plexInit::@return - //SEG137 [70] return [ ] ( main:2::plexInit:5 [ ] ) - rts -} - print_hextab: .text "0123456789abcdef" - PLEX_YPOS: .byte $ff, $12, $11, $34, 2, $81, $77, $81, $ef, $11 - PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 - diff --git a/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.sym b/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.sym deleted file mode 100644 index b8bac7921..000000000 --- a/src/test/java/dk/camelot64/kickc/test/ref/multiplexer.sym +++ /dev/null @@ -1,101 +0,0 @@ -(label) @19 -(label) @begin -(label) @end -(byte) PLEX_COUNT -(const byte) PLEX_COUNT#0 PLEX_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 10 -(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX -(const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 PLEX_SORTED_IDX = { fill( PLEX_COUNT#0, 0) } -(byte[PLEX_COUNT#0]) PLEX_YPOS -(const byte[PLEX_COUNT#0]) PLEX_YPOS#0 PLEX_YPOS = { (byte/word/signed word/dword/signed dword) 255, (byte/signed byte/word/signed word/dword/signed dword) 18, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 52, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/word/signed word/dword/signed dword) 129, (byte/signed byte/word/signed word/dword/signed dword) 119, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 239, (byte/signed byte/word/signed word/dword/signed dword) 17 } -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@3 -(label) main::@4 -(label) main::@return -(void()) plexInit() -(label) plexInit::@1 -(label) plexInit::@return -(byte) plexInit::i -(byte) plexInit::i#1 reg byte x 16.5 -(byte) plexInit::i#2 reg byte x 22.0 -(void()) plexSort() -(label) plexSort::@1 -(label) plexSort::@10 -(label) plexSort::@2 -(label) plexSort::@3 -(label) plexSort::@5 -(label) plexSort::@7 -(label) plexSort::@return -(byte) plexSort::cur_idx -(byte) plexSort::cur_idx#0 reg byte y 22.0 -(byte) plexSort::m -(byte) plexSort::m#1 m zp ZP_BYTE:6 16.5 -(byte) plexSort::m#2 m zp ZP_BYTE:6 4.230769230769231 -(byte) plexSort::nxt_idx -(byte) plexSort::nxt_idx#0 nxt_idx zp ZP_BYTE:7 3.0 -(byte) plexSort::nxt_y -(byte) plexSort::nxt_y#0 nxt_y zp ZP_BYTE:8 13.666666666666666 -(byte) plexSort::s -(byte) plexSort::s#1 reg byte x 138.33333333333334 -(byte) plexSort::s#2 reg byte x 22.0 -(byte) plexSort::s#3 reg byte x 207.5 -(byte~) plexSort::s#6 reg byte x 22.0 -(void()) print_byte((byte) print_byte::b) -(byte~) print_byte::$0 reg byte a 4.0 -(byte~) print_byte::$2 reg byte a 4.0 -(label) print_byte::@1 -(label) print_byte::@return -(byte) print_byte::b -(byte) print_byte::b#0 b zp ZP_BYTE:6 3.75 -(void()) print_char((byte) print_char::ch) -(label) print_char::@return -(byte) print_char::ch -(byte) print_char::ch#0 reg byte a 4.0 -(byte) print_char::ch#1 reg byte a 4.0 -(byte) print_char::ch#3 reg byte a 6.0 -(byte*) print_char_cursor -(byte*) print_char_cursor#24 print_char_cursor zp ZP_WORD:4 9.5 -(byte*) print_char_cursor#25 print_char_cursor zp ZP_WORD:4 2.1764705882352944 -(byte*) print_char_cursor#40 print_char_cursor zp ZP_WORD:4 3.75 -(byte*) print_char_cursor#44 print_char_cursor zp ZP_WORD:4 4.0 -(byte*~) print_char_cursor#47 print_char_cursor zp ZP_WORD:4 4.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 -(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 4.111111111111112 -(byte*) print_line_cursor#12 print_line_cursor zp ZP_WORD:2 24.0 -(byte*) print_line_cursor#34 print_line_cursor zp ZP_WORD:2 0.4 -(void()) print_ln() -(label) print_ln::@1 -(label) print_ln::@return -(void()) print_plex() -(label) print_plex::@1 -(label) print_plex::@2 -(label) print_plex::@3 -(label) print_plex::@4 -(label) print_plex::@return -(byte) print_plex::i -(byte) print_plex::i#1 reg byte x 16.5 -(byte) print_plex::i#2 reg byte x 6.6000000000000005 -(byte*) print_screen - -reg byte x [ print_plex::i#2 print_plex::i#1 ] -zp ZP_WORD:2 [ print_line_cursor#12 print_line_cursor#34 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] -reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] -zp ZP_WORD:4 [ print_char_cursor#24 print_char_cursor#40 print_char_cursor#44 print_char_cursor#47 print_char_cursor#25 ] -zp ZP_BYTE:6 [ plexSort::m#2 plexSort::m#1 print_byte::b#0 ] -reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] -reg byte x [ plexInit::i#2 plexInit::i#1 ] -reg byte a [ print_byte::$0 ] -reg byte a [ print_byte::$2 ] -zp ZP_BYTE:7 [ plexSort::nxt_idx#0 ] -zp ZP_BYTE:8 [ plexSort::nxt_y#0 ] -reg byte y [ plexSort::cur_idx#0 ] -reg byte x [ plexSort::s#2 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.asm b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.asm new file mode 100644 index 000000000..b4bb380f2 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.asm @@ -0,0 +1,253 @@ +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + .const BLACK = 0 + .const GREEN = 5 + .const PLEX_COUNT = $18 + .label SPRITE = $2000 + .label SCREEN = $400 + .label YSIN = $2100 + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label plex_sprite_idx = 4 + .label plex_show_idx = 5 + .label plex_sprite_msb = 6 + jsr main +main: { + sei + jsr init + jsr loop + rts +} +loop: { + .label sin_idx = 2 + .label ss = 3 + .label rasterY = 9 + .label ss2 = 3 + lda #0 + sta sin_idx + b4: + lda RASTER + cmp #$ff + bne b4 + inc BORDERCOL + ldx sin_idx + ldy #0 + b7: + lda YSIN,x + sta PLEX_YPOS,y + txa + clc + adc #$a + tax + iny + cpy #PLEX_COUNT-1+1 + bne b7 + inc sin_idx + inc BORDERCOL + jsr plexSort + inc BORDERCOL + lda #0 + sta ss + lda #1 + sta plex_sprite_msb + lda #0 + sta plex_show_idx + sta plex_sprite_idx + b8: + jsr plexShowSprite + inc ss + lda ss + cmp #8 + bne b8 + lda #8 + sta ss2 + b9: + lda #BLACK + sta BORDERCOL + ldy plex_show_idx + lda PLEX_SORTED_IDX,y + tay + lda PLEX_YPOS,y + sec + sbc #8 + sta rasterY + b10: + lda RASTER + cmp rasterY + bcc b10 + inc BORDERCOL + jsr plexShowSprite + inc ss2 + lda ss2 + cmp #PLEX_COUNT-1+1 + bne b9 + lda #BLACK + sta BORDERCOL + jmp b4 +} +plexShowSprite: { + lda plex_sprite_idx + asl + tay + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_YPOS,x + sta SPRITES_YPOS,y + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_PTR,x + ldx plex_sprite_idx + sta PLEX_SCREEN_PTR,x + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + asl + tax + lda PLEX_XPOS,x + sta SPRITES_XPOS,y + lda PLEX_XPOS+1,x + cmp #0 + bne b1 + lda plex_sprite_msb + eor #$ff + and SPRITES_XMSB + sta SPRITES_XMSB + b2: + lda plex_sprite_idx + clc + adc #1 + and #7 + sta plex_sprite_idx + inc plex_show_idx + asl plex_sprite_msb + lda plex_sprite_msb + bne breturn + lda #1 + sta plex_sprite_msb + breturn: + rts + b1: + lda SPRITES_XMSB + ora plex_sprite_msb + sta SPRITES_XMSB + jmp b2 +} +plexSort: { + .label nxt_idx = 4 + .label nxt_y = 5 + .label m = 3 + lda #0 + sta m + b1: + ldy m + lda PLEX_SORTED_IDX+1,y + sta nxt_idx + tay + lda PLEX_YPOS,y + sta nxt_y + ldx m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs b2 + b3: + lda PLEX_SORTED_IDX,x + sta PLEX_SORTED_IDX+1,x + dex + cpx #$ff + bne b7 + b5: + inx + lda nxt_idx + sta PLEX_SORTED_IDX,x + b2: + inc m + lda m + cmp #PLEX_COUNT-2+1 + bne b1 + rts + b7: + lda nxt_y + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcc b3 + jmp b5 +} +init: { + .label xp = 7 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + jsr plexInit + lda #<$20 + sta xp + lda #>$20 + sta xp+1 + ldx #0 + b1: + lda #$ff&SPRITE/$40 + sta PLEX_PTR,x + txa + asl + tay + lda xp + sta PLEX_XPOS,y + lda xp+1 + sta PLEX_XPOS+1,y + clc + lda xp + adc #<$c + sta xp + lda xp+1 + adc #>$c + sta xp+1 + inx + cpx #PLEX_COUNT-1+1 + bne b1 + lda #$ff + sta SPRITES_ENABLE + ldx #0 + b2: + lda #GREEN + sta SPRITES_COLS,x + inx + cpx #8 + bne b2 + rts +} +plexInit: { + ldx #0 + b1: + txa + sta PLEX_SORTED_IDX,x + inx + cpx #PLEX_COUNT-1+1 + bne b1 + rts +} + PLEX_XPOS: .fill 2*PLEX_COUNT, 0 + PLEX_YPOS: .fill PLEX_COUNT, 0 + PLEX_PTR: .fill PLEX_COUNT, 0 + PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 +.pc = YSIN "Inline" + .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + +.pc = SPRITE "Inline" + .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + diff --git a/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.cfg b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.cfg new file mode 100644 index 000000000..543e9af03 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.cfg @@ -0,0 +1,204 @@ +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@28 +@28: scope:[] from @begin + kickasm(location (const byte*) YSIN#0) {{ .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + }} + kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + }} + to:@31 +@31: scope:[] from @28 + [3] phi() [ ] ( ) + [4] call main [ ] ( ) + to:@end +@end: scope:[] from @31 + [5] phi() [ ] ( ) +main: scope:[main] from @31 + asm { sei } + [7] call init [ ] ( main:4 [ ] ) + to:main::@1 +main::@1: scope:[main] from main + [8] phi() [ ] ( main:4 [ ] ) + [9] call loop [ ] ( main:4 [ ] ) + to:main::@return +main::@return: scope:[main] from main::@1 + [10] return [ ] ( main:4 [ ] ) + to:@return +loop: scope:[loop] from main::@1 + [11] phi() [ ] ( main:4::loop:9 [ ] ) + to:loop::@1 +loop::@1: scope:[loop] from loop loop::@23 + [12] (byte) loop::sin_idx#6 ← phi( loop/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@23/(byte) loop::sin_idx#1 ) [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) + to:loop::@4 +loop::@4: scope:[loop] from loop::@1 loop::@4 + [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) + to:loop::@6 +loop::@6: scope:[loop] from loop::@4 + [14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) + [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 [ loop::sin_idx#6 loop::y_idx#3 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#3 ] ) + to:loop::@7 +loop::@7: scope:[loop] from loop::@6 loop::@7 + [16] (byte) loop::sy#2 ← phi( loop::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@7/(byte) loop::sy#1 ) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) + [16] (byte) loop::y_idx#2 ← phi( loop::@6/(byte~) loop::y_idx#3 loop::@7/(byte) loop::y_idx#1 ) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) + [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) + [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) + [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) + [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) + to:loop::@18 +loop::@18: scope:[loop] from loop::@7 + [21] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + [22] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + [23] call plexSort [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + to:loop::@26 +loop::@26: scope:[loop] from loop::@18 + [24] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + to:loop::@8 +loop::@8: scope:[loop] from loop::@26 loop::@27 + [25] (byte) loop::ss#2 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@27/(byte) loop::ss#1 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [25] (byte) plex_sprite_msb#29 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 1 loop::@27/(byte) plex_sprite_msb#17 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [25] (byte) plex_show_idx#25 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@27/(byte) plex_show_idx#15 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [25] (byte) plex_sprite_idx#24 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@27/(byte) plex_sprite_idx#15 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [26] call plexShowSprite [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + to:loop::@27 +loop::@27: scope:[loop] from loop::@8 + [27] (byte) loop::ss#1 ← ++ (byte) loop::ss#2 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) + [28] if((byte) loop::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) + to:loop::@9 +loop::@9: scope:[loop] from loop::@27 loop::@28 + [29] (byte) loop::ss2#6 ← phi( loop::@27/(byte/signed byte/word/signed word/dword/signed dword) 8 loop::@28/(byte) loop::ss2#1 ) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + [30] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + to:loop::plexShowNextYpos1 +loop::plexShowNextYpos1: scope:[loop] from loop::@9 + [31] (byte) loop::plexShowNextYpos1_return#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#15)) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ) + to:loop::@25 +loop::@25: scope:[loop] from loop::plexShowNextYpos1 + [32] (byte) loop::rasterY#0 ← (byte) loop::plexShowNextYpos1_return#0 - (byte/signed byte/word/signed word/dword/signed dword) 8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) + to:loop::@10 +loop::@10: scope:[loop] from loop::@10 loop::@25 + [33] if(*((const byte*) RASTER#0)<(byte) loop::rasterY#0) goto loop::@10 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) + to:loop::@12 +loop::@12: scope:[loop] from loop::@10 + [34] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + [35] call plexShowSprite [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + to:loop::@28 +loop::@28: scope:[loop] from loop::@12 + [36] (byte) loop::ss2#1 ← ++ (byte) loop::ss2#6 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) + [37] if((byte) loop::ss2#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) + to:loop::@23 +loop::@23: scope:[loop] from loop::@28 + [38] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + to:loop::@1 +plexShowSprite: scope:[plexShowSprite] from loop::@12 loop::@8 + [39] (byte) plex_sprite_msb#14 ← phi( loop::@12/(byte) plex_sprite_msb#17 loop::@8/(byte) plex_sprite_msb#29 ) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + [39] (byte) plex_show_idx#13 ← phi( loop::@12/(byte) plex_show_idx#15 loop::@8/(byte) plex_show_idx#25 ) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + [39] (byte) plex_sprite_idx#13 ← phi( loop::@12/(byte) plex_sprite_idx#15 loop::@8/(byte) plex_sprite_idx#24 ) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + [40] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) + [41] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) + [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#13) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) + [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) + [44] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ) + [45] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ) + [46] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ) + [47] if((byte~) plexShowSprite::$3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + to:plexShowSprite::@4 +plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite + [48] (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ) + [49] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + to:plexShowSprite::@2 +plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@4 + [50] (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 ← (byte) plex_sprite_idx#13 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ) + [51] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ) + [52] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#13 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ) + [53] (byte) plex_sprite_msb#26 ← (byte) plex_sprite_msb#14 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) + [54] if((byte) plex_sprite_msb#26!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@7 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) + to:plexShowSprite::@return +plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@7 + [55] (byte) plex_sprite_msb#17 ← phi( plexShowSprite::@7/(byte) plex_sprite_msb#26 plexShowSprite::@2/(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + [56] return [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + to:@return +plexShowSprite::@7: scope:[plexShowSprite] from plexShowSprite::@2 + [57] phi() [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) + to:plexShowSprite::@return +plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite + [58] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + to:plexShowSprite::@2 +plexSort: scope:[plexSort] from loop::@18 + [59] phi() [ ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 ] ) + to:plexSort::@1 +plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 + [60] (byte) plexSort::m#2 ← phi( plexSort/(byte/signed byte/word/signed word/dword/signed dword) 0 plexSort::@2/(byte) plexSort::m#1 ) [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) + [61] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) + [62] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) + [63] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) + to:plexSort::@10 +plexSort::@10: scope:[plexSort] from plexSort::@1 + [64] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) + to:plexSort::@3 +plexSort::@3: scope:[plexSort] from plexSort::@10 plexSort::@7 + [65] (byte) plexSort::s#3 ← phi( plexSort::@7/(byte) plexSort::s#1 plexSort::@10/(byte~) plexSort::s#6 ) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) + [66] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) + [67] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) + [68] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) + to:plexSort::@5 +plexSort::@5: scope:[plexSort] from plexSort::@3 plexSort::@7 + [69] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) + [70] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) + to:plexSort::@2 +plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 + [71] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) + [72] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) + to:plexSort::@return +plexSort::@return: scope:[plexSort] from plexSort::@2 + [73] return [ ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 ] ) + to:@return +plexSort::@7: scope:[plexSort] from plexSort::@3 + [74] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) + to:plexSort::@5 +init: scope:[init] from main + [75] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:4::init:7 [ ] ) + [76] call plexInit [ ] ( main:4::init:7 [ ] ) + to:init::@1 +init::@1: scope:[init] from init init::@1 + [77] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte/signed byte/word/signed word/dword/signed dword) 32 ) [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [77] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [78] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [79] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ init::sx#2 init::xp#2 init::$6 ] ( main:4::init:7 [ init::sx#2 init::xp#2 init::$6 ] ) + [80] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [81] (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 [ init::sx#2 init::xp#1 ] ( main:4::init:7 [ init::sx#2 init::xp#1 ] ) + [82] (byte) init::sx#1 ← ++ (byte) init::sx#2 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) + [83] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) + to:init::@3 +init::@3: scope:[init] from init::@1 + [84] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:4::init:7 [ ] ) + to:init::@2 +init::@2: scope:[init] from init::@2 init::@3 + [85] (byte) init::ss#2 ← phi( init::@2/(byte) init::ss#1 init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) + [86] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) + [87] (byte) init::ss#1 ← ++ (byte) init::ss#2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) + [88] if((byte) init::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) + to:init::@return +init::@return: scope:[init] from init::@2 + [89] return [ ] ( main:4::init:7 [ ] ) + to:@return +plexInit: scope:[plexInit] from init + [90] phi() [ ] ( main:4::init:7::plexInit:76 [ ] ) + to:plexInit::plexSetScreen1 +plexInit::plexSetScreen1: scope:[plexInit] from plexInit + [91] phi() [ ] ( main:4::init:7::plexInit:76 [ ] ) + to:plexInit::@1 +plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 + [92] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ plexInit::i#2 ] ( main:4::init:7::plexInit:76 [ plexInit::i#2 ] ) + [93] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:4::init:7::plexInit:76 [ plexInit::i#2 ] ) + [94] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) + [95] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) + to:plexInit::@return +plexInit::@return: scope:[plexInit] from plexInit::@1 + [96] return [ ] ( main:4::init:7::plexInit:76 [ ] ) + to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.log b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.log new file mode 100644 index 000000000..eb791fe35 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.log @@ -0,0 +1,7051 @@ +PARSING src/test/java/dk/camelot64/kickc/test/kc/simple-multiplexer.kc +// A simple usage of the flexible sprite multiplexer routine +import "c64" +import "multiplexer" + +// Location of screen & sprites +byte* SPRITE = $2000; +byte* SCREEN = $400; +byte* YSIN = $2100; + +// The size of the y-sinus +word YSIN_SIZE = 256; +// The y-sinus byte table +//byte[YSIN_SIZE] ysin; + +kickasm(pc YSIN) {{ + .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) +}} + + +kickasm(pc SPRITE, resource "balloon.png") {{ +.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) +}} + +void main() { + asm { sei } + init(); + loop(); +} + +// Initialize the program +void init() { + *D011 = VIC_DEN | VIC_RSEL | 3; + // Initialize the multiplexer + plexInit(SCREEN); + // Set the x-positions & pointers + word xp = 32; + for(byte sx: 0..PLEX_COUNT-1) { + PLEX_PTR[sx] = (byte)(SPRITE/$40); + PLEX_XPOS[sx<<1] = xp; + xp += 12; + } + + // Enable & initialize sprites + *SPRITES_ENABLE = $ff; + for(byte ss: 0..7) { + SPRITES_COLS[ss] = GREEN; + } +} + +// The raster loop +void loop() { + // The current index into the y-sinus + byte sin_idx = 0; + while(true) { + while(*RASTER!=$ff) {} + // Assign sinus positions + (*BORDERCOL)++; + byte y_idx = sin_idx; + for(byte sy: 0..PLEX_COUNT-1) { + PLEX_YPOS[sy] = YSIN[y_idx]; + y_idx += 10; + } + sin_idx +=1; + // Sort the sprites by y-position + (*BORDERCOL)++; + plexSort(); + // Show the first 8 sprites + (*BORDERCOL)++; + for( byte ss: 0..7) { + plexShowSprite(); + } + // Show the next 8 sprites + for( byte ss2: 8..PLEX_COUNT-1) { + *BORDERCOL = BLACK; + byte rasterY = plexShowNextYpos()-8; + while(*RASTER((((word)screen&$3fff)<<2)))|(((>((word)gfx))>>2)&$f); +} + +// Get the value to store into DD00 (CIA 2 port A) to choose a specific VIC bank +// Optimized for ASM from %00000011 ^ (byte)((word)gfx/$4000) +inline byte toDd00(byte* gfx) { + return %00000011 ^ (>((word)gfx))>>6; +} + +// Select a specific VIC graphics bank by setting the CIA 2 port A ($dd00) as needed +inline void vicSelectGfxBank(byte* gfx) { + *CIA2_PORT_A_DDR = %00000011; + *CIA2_PORT_A = toDd00(gfx); +} + +Importing multiplexer +PARSING src/test/java/dk/camelot64/kickc/test/kc/multiplexer.kc +// A flexible sprite multiplexer routine + +// TODO: Let the caller specify the number of sprites (PLEX_COUNT) +// TODO: Optimize plexSort() - currently nxt_idx and nxt_y are stored in the outer loop. + +import "c64" +import "sinus" + +// The number of sprites in the multiplexer +const byte PLEX_COUNT = 24; + +// The x-positions of the multiplexer sprites ($000-$1ff) +word[PLEX_COUNT] PLEX_XPOS; + +// The y-positions of the multiplexer sprites. +byte[PLEX_COUNT] PLEX_YPOS; + +// The sprite pointers for the multiplexed sprites +byte[PLEX_COUNT] PLEX_PTR; + +// The address of the sprite pointers on the current screen (screen+$3f8). +byte* PLEX_SCREEN_PTR = $400+$3f8; + +// Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. +byte[PLEX_COUNT] PLEX_SORTED_IDX; + +// Variables controlling the showing of sprites + +// The index in the PLEX tables of the next sprite to show +byte plex_show_idx=0; +// The index the next sprite to use for showing (sprites are used round-robin) +byte plex_sprite_idx=0; +// The MSB bit of the next sprite to use for showing +byte plex_sprite_msb=1; + +// Initialize the multiplexer data structures +void plexInit(byte* screen) { + plexSetScreen(screen); + for(byte i: 0..PLEX_COUNT-1) { + PLEX_SORTED_IDX[i] = i; + } +} + +// Set the address of the current screen used for setting sprite pointers (at screen+$3f8) +inline void plexSetScreen(byte* screen) { + PLEX_SCREEN_PTR = screen+$3f8; +} + +// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS +// Assumes that the positions are nearly sorted already (as each sprite just moves a bit) +// Uses an insertion sort: +// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly. +// 2a. If the next element after the marker is larger that the current element +// the marker can be moved forwards (as the sorting is correct). +// 2b. If the next element after the marker is smaller than the current element: +// elements before the marker are shifted right one at a time until encountering one smaller than the current one. +// It is then inserted at the spot. Now the marker can move forward. +void plexSort() { + for(byte m: 0..PLEX_COUNT-2) { + byte nxt_idx = PLEX_SORTED_IDX[m+1]; + byte nxt_y = PLEX_YPOS[nxt_idx]; + if(nxt_yPLEX_XPOS[xpos_idx]!=0) { + *SPRITES_XMSB |= plex_sprite_msb; + } else { + *SPRITES_XMSB &= ($ff^plex_sprite_msb); + } + plex_sprite_idx = (plex_sprite_idx+1)&7; + plex_show_idx++; + plex_sprite_msb <<=1; + if(plex_sprite_msb==0) { + plex_sprite_msb = 1; + } +} + +// Get the y-position of the next sprite to show +inline byte plexShowNextYpos() { + return PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]]; +} +Importing c64 +Importing sinus +PARSING src/test/java/dk/camelot64/kickc/test/kc/sinus.kc +// Sinus Generator functions using only multiplication, addition and bit shifting +// Uses a single division for converting the wavelength to a reciprocal. +// Generates sinus using the series sin(x) = x - x^/3! + x^-5! - x^7/7! ... +// Uses the approximation sin(x) = x - x^/6 + x^/128 +// Optimization possibility: Use symmetries when generating sinustables. wavelength%2==0 -> mirror symmetry over PI, wavelength%4==0 -> mirror symmetry over PI/2. + +import "division.kc" +import "multiply.kc" + +// PI*2 in u[4.28] format +const dword PI2_u4f28 = $6487ed51; +// PI in u[4.28] format +const dword PI_u4f28 = $3243f6a9; +// PI/2 in u[4.28] format +const dword PI_HALF_u4f28 = $1921FB54; + +// PI*2 in u[4.12] format +const word PI2_u4f12 = $6488; +// PI in u[4.12] format +const word PI_u4f12 = $3244; +// PI/2 in u[4.12] format +const word PI_HALF_u4f12 = $1922; + +// Generate signed (large) word sinus table - on the full -$7fff - $7fff range +// sintab - the table to generate into +// wavelength - the number of sinus points in a total sinus wavelength (the size of the table) +void sin16s_gen(signed word* sintab, word wavelength) { + // u[4.28] step = PI*2/wavelength + dword step = div32u16u(PI2_u4f28, wavelength); // u[4.28] + // Iterate over the table + dword x = 0; // u[4.28] + for( word i=0; i>1; // ampl is always positive so shifting left does not alter the sign + // u[4.28] step = PI*2/wavelength + dword step = div32u16u(PI2_u4f28, wavelength); // u[4.28] + // Iterate over the table + dword x = 0; // u[4.28] + for( word i=0; imul16s(sin16s(x), ampl); // The signed sin() has values [-7fff;7fff] = [-1/2 ; 1/2], so ampl*sin has the right amplitude + sintab = sintab + 2; + x = x + step; + } +} + +// Generate signed byte sinus table - on the full -$7f - $7f range +// sintab - the table to generate into +// wavelength - the number of sinus points in a total sinus wavelength (the size of the table) +void sin8s_gen(signed byte* sintab, word wavelength) { + // u[4.28] step = PI*2/wavelength + word step = div16u(PI2_u4f12, wavelength); // u[4.12] + // Iterate over the table + word x = 0; // u[4.12] + for( word i=0; i= PI_u4f28 ) { + x = x - PI_u4f28; + isUpper = 1; + } + if(x >= PI_HALF_u4f28 ) { + x = PI_u4f28 - x; + } + // sinx = x - x^3/6 + x5/128; + word x1 = >x<<3; // u[1.15] + word x2 = mulu16_sel(x1, x1, 0); // u[2.14] x^2 + word x3 = mulu16_sel(x2, x1, 1); // u[2.14] x^3 + word x3_6 = mulu16_sel(x3, $10000/6, 1); // u[1.15] x^3/6; + word usinx = x1 - x3_6; // u[1.15] x - x^3/6 + word x4 = mulu16_sel(x3, x1, 0); // u[3.13] x^4 + word x5 = mulu16_sel(x4, x1, 0); // u[4.12] x^5 + word x5_128 = x5>>4; // // u[1.15] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3); + usinx = usinx + x5_128; // u[1.15] (first bit is always zero) + signed word sinx = (signed word)usinx; // s[0.15] + if(isUpper!=0) { + sinx = -(signed word)usinx; // s[0.15]; + } + return sinx; +} + +// Calculate signed byte sinus sin(x) +// x: unsigned word input u[4.12] in the interval $0000 - PI2_u4f12 +// result: signed byte sin(x) s[0.7] - using the full range -$7f - $7f +signed byte sin8s(word x) { + // Move x1 into the range 0-PI/2 using sinus mirror symmetries + byte isUpper = 0; + if(x >= PI_u4f12 ) { + x = x - PI_u4f12; + isUpper = 1; + } + if(x >= PI_HALF_u4f12 ) { + x = PI_u4f12 - x; + } + // sinx = x - x^3/6 + x5/128; + byte x1 = >x<<3; // u[1.7] + byte x2 = mulu8_sel(x1, x1, 0); // u[2.6] x^2 + byte x3 = mulu8_sel(x2, x1, 1); // u[2.6] x^3 + const byte DIV_6 = $2b; // u[0.7] - $2a.aa rounded to $2b + byte x3_6 = mulu8_sel(x3, DIV_6, 1); // u[1.7] x^3/6; + byte usinx = x1 - x3_6; // u[1.7] x - x^3/6 + byte x4 = mulu8_sel(x3, x1, 0); // u[3.5] x^4 + byte x5 = mulu8_sel(x4, x1, 0); // u[4.4] x^5 + byte x5_128 = x5>>4; // // u[1.7] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3); + usinx = usinx + x5_128; // u[1.7] (first bit is always zero) + if(usinx>=128) { usinx--; } // rounding may occasionally result in $80 - lower into range ($00-$7f) + signed byte sinx = (signed byte)usinx; // s[0.7] + if(isUpper!=0) { + sinx = -(signed byte)usinx; // s[0.7]; + } + return sinx; +} + +// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. +// The select parameter indicates how many of the highest bits of the 32-bit result to skip +word mulu16_sel(word v1, word v2, byte select) { + return >mul16u(v1, v2)<mul8u(v1, v2)<=divisor) { + quotient++; + rem = rem - divisor; + } + } + rem8u = rem; + return quotient; +} + +// Remainder after unsigned 16-bit division +word rem16u = 0; + +// Performs division on two 16 bit unsigned words and an initial remainder +// Returns the quotient dividend/divisor. +// The final remainder will be set into the global variable rem16u +// Implemented using simple binary division +word divr16u(word dividend, word divisor, word rem) { + word quotient = 0; + for( byte i : 0..15) { + rem = rem << 1; + if( (>dividend & $80) != 0 ) { + rem = rem | 1; + } + dividend = dividend << 1; + quotient = quotient << 1; + if(rem>=divisor) { + quotient++; + rem = rem - divisor; + } + } + rem16u = rem; + return quotient; +} + +// Performs division on two 16 bit unsigned words +// Returns the quotient dividend/divisor. +// The remainder will be set into the global variable rem16u +// Implemented using simple binary division +word div16u(word dividend, word divisor) { + return divr16u(dividend, divisor, 0); +} + +// Divide unsigned 32-bit dword dividend with a 16-bit word divisor +// The 16-bit word remainder can be found in rem16u after the division +dword div32u16u(dword dividend, word divisor) { + word quotient_hi = divr16u(>dividend, divisor, 0); + word quotient_lo = divr16u(>1; + mb = mb<<1; + } + return res; +} + +// Multiply of two signed bytes to a signed word +// Fixes offsets introduced by using unsigned multiplication +signed word mul8s(signed byte a, signed byte b) { + word m = mul8u((byte)a, (byte) b); + if(a<0) { + >m = (>m)-(byte)b; + } + if(b<0) { + >m = (>m)-(byte)a; + } + return (signed word)m; +} + +// Multiply a signed byte and an unsigned byte (into a signed word) +// Fixes offsets introduced by using unsigned multiplication +signed word mul8su(signed byte a, byte b) { + word m = mul8u((byte)a, (byte) b); + if(a<0) { + >m = (>m)-(byte)b; + } + return (signed word)m; +} + +// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word +dword mul16u(word a, word b) { + dword res = 0; + dword mb = b; + while(a!=0) { + if( (a&1) != 0) { + res = res + mb; + } + a = a>>1; + mb = mb<<1; + } + return res; +} + +// Multiply of two signed words to a signed double word +// Fixes offsets introduced by using unsigned multiplication +signed dword mul16s(signed word a, signed word b) { + dword m = mul16u((word)a, (word) b); + if(a<0) { + >m = (>m)-(word)b; + } + if(b<0) { + >m = (>m)-(word)a; + } + return (signed dword)m; +} + +Adding pre/post-modifier (word) sin16s_gen::i ← ++ (word) sin16s_gen::i +Adding pre/post-modifier (word) sin16s_gen2::i ← ++ (word) sin16s_gen2::i +Adding pre/post-modifier (signed byte*) sin8s_gen::sintab ← ++ (signed byte*) sin8s_gen::sintab +Adding pre/post-modifier (word) sin8s_gen::i ← ++ (word) sin8s_gen::i +Adding pre/post-modifier (byte) sin8s::usinx ← -- (byte) sin8s::usinx +Adding pre/post-modifier (byte) plexSort::s ← -- (byte) plexSort::s +Adding pre/post-modifier (byte) plexSort::s ← ++ (byte) plexSort::s +Adding pre/post-modifier (byte) plex_show_idx ← ++ (byte) plex_show_idx +Added resource src/test/java/dk/camelot64/kickc/test/kc/balloon.png +Adding pre/post-modifier *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) +Adding pre/post-modifier *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) +Adding pre/post-modifier *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) +Adding pre/post-modifier *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) +SYMBOLS +(word/signed word/dword/signed dword~) $0 +(label) @1 +(label) @10 +(label) @11 +(label) @12 +(label) @13 +(label) @14 +(label) @15 +(label) @16 +(label) @17 +(label) @18 +(label) @19 +(label) @2 +(label) @20 +(label) @21 +(label) @22 +(label) @23 +(label) @24 +(label) @25 +(label) @26 +(label) @27 +(label) @28 +(label) @29 +(label) @3 +(label) @30 +(label) @31 +(label) @4 +(label) @5 +(label) @6 +(label) @7 +(label) @8 +(label) @9 +(label) @begin +(label) @end +(byte*) BGCOL +(byte*) BGCOL1 +(byte*) BGCOL2 +(byte*) BGCOL3 +(byte*) BGCOL4 +(byte) BLACK +(byte) BLUE +(byte*) BORDERCOL +(byte) BROWN +(byte*) CHARGEN +(byte*) CIA1_PORT_A +(byte*) CIA1_PORT_A_DDR +(byte*) CIA1_PORT_B +(byte*) CIA1_PORT_B_DDR +(byte*) CIA2_PORT_A +(byte*) CIA2_PORT_A_DDR +(byte*) CIA2_PORT_B +(byte*) CIA2_PORT_B_DDR +(byte*) COLS +(byte) CYAN +(byte*) D011 +(byte*) D016 +(byte*) D018 +(byte) DARK_GREY +(byte) GREEN +(byte) GREY +(byte) LIGHT_BLUE +(byte) LIGHT_GREEN +(byte) LIGHT_GREY +(byte) ORANGE +(word) PI2_u4f12 +(dword) PI2_u4f28 +(byte) PINK +(word) PI_HALF_u4f12 +(dword) PI_HALF_u4f28 +(word) PI_u4f12 +(dword) PI_u4f28 +(byte) PLEX_COUNT +(byte[PLEX_COUNT]) PLEX_PTR +(byte*) PLEX_SCREEN_PTR +(byte[PLEX_COUNT]) PLEX_SORTED_IDX +(word[PLEX_COUNT]) PLEX_XPOS +(byte[PLEX_COUNT]) PLEX_YPOS +(byte*) PROCPORT +(byte) PROCPORT_BASIC_KERNEL_IO +(byte*) PROCPORT_DDR +(byte) PROCPORT_DDR_MEMORY_MASK +(byte) PROCPORT_KERNEL_IO +(byte) PROCPORT_RAM_ALL +(byte) PROCPORT_RAM_CHARROM +(byte) PROCPORT_RAM_IO +(byte) PURPLE +(byte*) RASTER +(byte) RED +(byte*) SCREEN +(byte*) SPRITE +(byte*) SPRITES_COLS +(byte*) SPRITES_ENABLE +(byte*) SPRITES_EXPAND_X +(byte*) SPRITES_EXPAND_Y +(byte*) SPRITES_MC +(byte*) SPRITES_MC1 +(byte*) SPRITES_MC2 +(byte*) SPRITES_PRIORITY +(byte*) SPRITES_XMSB +(byte*) SPRITES_XPOS +(byte*) SPRITES_YPOS +(byte) VIC_BMM +(byte*) VIC_CONTROL +(byte*) VIC_CONTROL2 +(byte) VIC_CSEL +(byte) VIC_DEN +(byte) VIC_ECM +(byte) VIC_MCM +(byte*) VIC_MEMORY +(byte) VIC_RSEL +(byte) VIC_RST8 +(byte) WHITE +(byte) YELLOW +(byte*) YSIN +(word) YSIN_SIZE +(signed word()) div16s((signed word) div16s::dividend , (signed word) div16s::divisor) +(signed word~) div16s::$0 +(label) div16s::@1 +(label) div16s::@return +(signed word) div16s::dividend +(signed word) div16s::divisor +(signed word) div16s::return +(word()) div16u((word) div16u::dividend , (word) div16u::divisor) +(word~) div16u::$0 +(label) div16u::@1 +(label) div16u::@return +(word) div16u::dividend +(word) div16u::divisor +(word) div16u::return +(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) +(word~) div32u16u::$0 +(word~) div32u16u::$1 +(word~) div32u16u::$2 +(word~) div32u16u::$3 +(label) div32u16u::@1 +(label) div32u16u::@return +(dword) div32u16u::dividend +(word) div32u16u::divisor +(dword) div32u16u::quotient +(word) div32u16u::quotient_hi +(word) div32u16u::quotient_lo +(dword) div32u16u::return +(signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor) +(bool~) div8s::$0 +(byte~) div8s::$1 +(bool~) div8s::$10 +(signed byte~) div8s::$11 +(signed byte~) div8s::$12 +(signed byte~) div8s::$13 +(signed byte~) div8s::$14 +(signed byte~) div8s::$15 +(signed byte~) div8s::$16 +(signed byte~) div8s::$2 +(byte~) div8s::$3 +(bool~) div8s::$4 +(byte~) div8s::$5 +(signed byte~) div8s::$6 +(byte~) div8s::$7 +(byte/word/dword~) div8s::$8 +(byte~) div8s::$9 +(label) div8s::@1 +(label) div8s::@10 +(label) div8s::@11 +(label) div8s::@12 +(label) div8s::@13 +(label) div8s::@14 +(label) div8s::@2 +(label) div8s::@3 +(label) div8s::@4 +(label) div8s::@5 +(label) div8s::@6 +(label) div8s::@7 +(label) div8s::@8 +(label) div8s::@9 +(label) div8s::@return +(signed byte) div8s::dividend +(byte) div8s::dividendu +(signed byte) div8s::divisor +(byte) div8s::divisoru +(byte) div8s::neg +(byte) div8s::resultu +(signed byte) div8s::return +(byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor) +(byte~) div8u::$0 +(label) div8u::@1 +(label) div8u::@return +(byte) div8u::dividend +(byte) div8u::divisor +(byte) div8u::return +(signed word()) divr16s((signed word) divr16s::dividend , (signed word) divr16s::divisor , (signed word) divr16s::rem) +(bool~) divr16s::$0 +(bool~) divr16s::$1 +(word~) divr16s::$10 +(signed word~) divr16s::$11 +(word~) divr16s::$12 +(byte/word/dword~) divr16s::$13 +(word~) divr16s::$14 +(bool~) divr16s::$15 +(signed word~) divr16s::$16 +(signed word~) divr16s::$17 +(signed word~) divr16s::$18 +(signed word~) divr16s::$19 +(bool~) divr16s::$2 +(signed word~) divr16s::$20 +(signed word~) divr16s::$21 +(word~) divr16s::$3 +(word~) divr16s::$4 +(signed word~) divr16s::$5 +(word~) divr16s::$6 +(signed word~) divr16s::$7 +(word~) divr16s::$8 +(bool~) divr16s::$9 +(label) divr16s::@1 +(label) divr16s::@10 +(label) divr16s::@11 +(label) divr16s::@12 +(label) divr16s::@13 +(label) divr16s::@14 +(label) divr16s::@2 +(label) divr16s::@3 +(label) divr16s::@4 +(label) divr16s::@5 +(label) divr16s::@6 +(label) divr16s::@7 +(label) divr16s::@8 +(label) divr16s::@9 +(label) divr16s::@return +(signed word) divr16s::dividend +(word) divr16s::dividendu +(signed word) divr16s::divisor +(word) divr16s::divisoru +(byte) divr16s::neg +(signed word) divr16s::rem +(word) divr16s::remu +(word) divr16s::resultu +(signed word) divr16s::return +(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) +(word~) divr16u::$0 +(byte~) divr16u::$1 +(word~) divr16u::$10 +(bool~) divr16u::$11 +(byte~) divr16u::$2 +(bool~) divr16u::$3 +(bool~) divr16u::$4 +(word/dword~) divr16u::$5 +(word~) divr16u::$6 +(word~) divr16u::$7 +(bool~) divr16u::$8 +(bool~) divr16u::$9 +(label) divr16u::@1 +(label) divr16u::@2 +(label) divr16u::@3 +(label) divr16u::@4 +(label) divr16u::@5 +(label) divr16u::@6 +(label) divr16u::@7 +(label) divr16u::@return +(word) divr16u::dividend +(word) divr16u::divisor +(byte) divr16u::i +(word) divr16u::quotient +(word) divr16u::rem +(word) divr16u::return +(byte()) divr8u((byte) divr8u::dividend , (byte) divr8u::divisor , (byte) divr8u::rem) +(byte~) divr8u::$0 +(byte~) divr8u::$1 +(bool~) divr8u::$10 +(bool~) divr8u::$2 +(bool~) divr8u::$3 +(byte/word/dword~) divr8u::$4 +(byte~) divr8u::$5 +(byte~) divr8u::$6 +(bool~) divr8u::$7 +(bool~) divr8u::$8 +(byte~) divr8u::$9 +(label) divr8u::@1 +(label) divr8u::@2 +(label) divr8u::@3 +(label) divr8u::@4 +(label) divr8u::@5 +(label) divr8u::@6 +(label) divr8u::@7 +(label) divr8u::@return +(byte) divr8u::dividend +(byte) divr8u::divisor +(byte) divr8u::i +(byte) divr8u::quotient +(byte) divr8u::rem +(byte) divr8u::return +(void()) init() +(byte~) init::$0 +(byte/word/dword~) init::$1 +(void~) init::$2 +(byte/signed word/word/dword/signed dword~) init::$3 +(byte*~) init::$4 +(byte~) init::$5 +(byte~) init::$6 +(bool~) init::$7 +(bool~) init::$8 +(label) init::@1 +(label) init::@2 +(label) init::@3 +(label) init::@4 +(label) init::@return +(byte) init::ss +(byte) init::sx +(word) init::xp +(void()) loop() +(bool~) loop::$0 +(byte/signed word/word/dword/signed dword~) loop::$1 +(void~) loop::$10 +(bool~) loop::$11 +(bool~) loop::$2 +(void~) loop::$3 +(void~) loop::$4 +(bool~) loop::$5 +(byte/signed word/word/dword/signed dword~) loop::$6 +(byte~) loop::$7 +(byte/signed word/word/dword/signed dword~) loop::$8 +(bool~) loop::$9 +(label) loop::@1 +(label) loop::@10 +(label) loop::@11 +(label) loop::@12 +(label) loop::@13 +(label) loop::@14 +(label) loop::@15 +(label) loop::@16 +(label) loop::@17 +(label) loop::@18 +(label) loop::@19 +(label) loop::@2 +(label) loop::@20 +(label) loop::@21 +(label) loop::@22 +(label) loop::@23 +(label) loop::@24 +(label) loop::@3 +(label) loop::@4 +(label) loop::@5 +(label) loop::@6 +(label) loop::@7 +(label) loop::@8 +(label) loop::@9 +(label) loop::@return +(byte) loop::rasterY +(byte) loop::sin_idx +(byte) loop::ss +(byte) loop::ss2 +(byte) loop::sy +(byte) loop::y_idx +(void()) main() +(void~) main::$0 +(void~) main::$1 +(label) main::@return +(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) +(word~) mul16s::$0 +(word~) mul16s::$1 +(bool~) mul16s::$10 +(word~) mul16s::$11 +(word~) mul16s::$12 +(word~) mul16s::$13 +(word~) mul16s::$14 +(signed dword~) mul16s::$15 +(dword~) mul16s::$2 +(bool~) mul16s::$3 +(bool~) mul16s::$4 +(word~) mul16s::$5 +(word~) mul16s::$6 +(word~) mul16s::$7 +(word~) mul16s::$8 +(bool~) mul16s::$9 +(label) mul16s::@1 +(label) mul16s::@2 +(label) mul16s::@3 +(label) mul16s::@4 +(label) mul16s::@5 +(label) mul16s::@return +(signed word) mul16s::a +(signed word) mul16s::b +(dword) mul16s::m +(signed dword) mul16s::return +(dword()) mul16u((word) mul16u::a , (word) mul16u::b) +(bool~) mul16u::$0 +(byte/word~) mul16u::$1 +(bool~) mul16u::$2 +(bool~) mul16u::$3 +(dword~) mul16u::$4 +(word~) mul16u::$5 +(dword~) mul16u::$6 +(label) mul16u::@1 +(label) mul16u::@2 +(label) mul16u::@3 +(label) mul16u::@4 +(label) mul16u::@5 +(label) mul16u::@6 +(label) mul16u::@7 +(label) mul16u::@8 +(label) mul16u::@9 +(label) mul16u::@return +(word) mul16u::a +(word) mul16u::b +(dword) mul16u::mb +(dword) mul16u::res +(dword) mul16u::return +(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b) +(byte~) mul8s::$0 +(byte~) mul8s::$1 +(bool~) mul8s::$10 +(byte~) mul8s::$11 +(byte~) mul8s::$12 +(byte~) mul8s::$13 +(byte~) mul8s::$14 +(signed word~) mul8s::$15 +(word~) mul8s::$2 +(bool~) mul8s::$3 +(bool~) mul8s::$4 +(byte~) mul8s::$5 +(byte~) mul8s::$6 +(byte~) mul8s::$7 +(byte~) mul8s::$8 +(bool~) mul8s::$9 +(label) mul8s::@1 +(label) mul8s::@2 +(label) mul8s::@3 +(label) mul8s::@4 +(label) mul8s::@5 +(label) mul8s::@return +(signed byte) mul8s::a +(signed byte) mul8s::b +(word) mul8s::m +(signed word) mul8s::return +(signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b) +(byte~) mul8su::$0 +(byte~) mul8su::$1 +(word~) mul8su::$2 +(bool~) mul8su::$3 +(bool~) mul8su::$4 +(byte~) mul8su::$5 +(byte~) mul8su::$6 +(byte~) mul8su::$7 +(byte~) mul8su::$8 +(signed word~) mul8su::$9 +(label) mul8su::@1 +(label) mul8su::@2 +(label) mul8su::@3 +(label) mul8su::@return +(signed byte) mul8su::a +(byte) mul8su::b +(word) mul8su::m +(signed word) mul8su::return +(word()) mul8u((byte) mul8u::a , (byte) mul8u::b) +(bool~) mul8u::$0 +(byte~) mul8u::$1 +(bool~) mul8u::$2 +(bool~) mul8u::$3 +(word~) mul8u::$4 +(byte~) mul8u::$5 +(word~) mul8u::$6 +(label) mul8u::@1 +(label) mul8u::@2 +(label) mul8u::@3 +(label) mul8u::@4 +(label) mul8u::@5 +(label) mul8u::@6 +(label) mul8u::@7 +(label) mul8u::@8 +(label) mul8u::@9 +(label) mul8u::@return +(byte) mul8u::a +(byte) mul8u::b +(word) mul8u::mb +(word) mul8u::res +(word) mul8u::return +(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) +(dword~) mulu16_sel::$0 +(dword~) mulu16_sel::$1 +(word~) mulu16_sel::$2 +(label) mulu16_sel::@1 +(label) mulu16_sel::@return +(word) mulu16_sel::return +(byte) mulu16_sel::select +(word) mulu16_sel::v1 +(word) mulu16_sel::v2 +(byte()) mulu8_sel((byte) mulu8_sel::v1 , (byte) mulu8_sel::v2 , (byte) mulu8_sel::select) +(word~) mulu8_sel::$0 +(word~) mulu8_sel::$1 +(byte~) mulu8_sel::$2 +(label) mulu8_sel::@1 +(label) mulu8_sel::@return +(byte) mulu8_sel::return +(byte) mulu8_sel::select +(byte) mulu8_sel::v1 +(byte) mulu8_sel::v2 +(void()) plexInit((byte*) plexInit::screen) +(void~) plexInit::$0 +(byte/signed word/word/dword/signed dword~) plexInit::$1 +(bool~) plexInit::$2 +(label) plexInit::@1 +(label) plexInit::@2 +(label) plexInit::@return +(byte) plexInit::i +(byte*) plexInit::screen +inline (void()) plexSetScreen((byte*) plexSetScreen::screen) +(byte*~) plexSetScreen::$0 +(label) plexSetScreen::@return +(byte*) plexSetScreen::screen +inline (byte()) plexShowNextYpos() +(label) plexShowNextYpos::@1 +(label) plexShowNextYpos::@return +(byte) plexShowNextYpos::return +(void()) plexShowSprite() +(byte~) plexShowSprite::$0 +(byte~) plexShowSprite::$1 +(byte~) plexShowSprite::$2 +(byte~) plexShowSprite::$3 +(bool~) plexShowSprite::$4 +(byte/word/dword~) plexShowSprite::$5 +(byte/signed word/word/dword/signed dword~) plexShowSprite::$6 +(byte/word/dword~) plexShowSprite::$7 +(bool~) plexShowSprite::$8 +(bool~) plexShowSprite::$9 +(label) plexShowSprite::@1 +(label) plexShowSprite::@2 +(label) plexShowSprite::@3 +(label) plexShowSprite::@4 +(label) plexShowSprite::@5 +(label) plexShowSprite::@6 +(label) plexShowSprite::@return +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::xpos_idx +(void()) plexSort() +(byte/signed word/word/dword/signed dword~) plexSort::$0 +(byte/signed word/word/dword/signed dword~) plexSort::$1 +(bool~) plexSort::$2 +(bool~) plexSort::$3 +(byte/signed word/word/dword/signed dword~) plexSort::$4 +(bool~) plexSort::$5 +(bool~) plexSort::$6 +(bool~) plexSort::$7 +(bool~) plexSort::$8 +(label) plexSort::@1 +(label) plexSort::@2 +(label) plexSort::@3 +(label) plexSort::@4 +(label) plexSort::@5 +(label) plexSort::@6 +(label) plexSort::@return +(byte) plexSort::m +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_y +(byte) plexSort::s +(byte) plex_show_idx +(byte) plex_sprite_idx +(byte) plex_sprite_msb +(signed word) rem16s +(word) rem16u +(signed byte) rem8s +(byte) rem8u +(signed word()) sin16s((dword) sin16s::x) +(bool~) sin16s::$0 +(bool~) sin16s::$1 +(word/signed word/dword/signed dword~) sin16s::$10 +(word~) sin16s::$11 +(word~) sin16s::$12 +(word~) sin16s::$13 +(word~) sin16s::$14 +(word~) sin16s::$15 +(word~) sin16s::$16 +(signed word~) sin16s::$17 +(bool~) sin16s::$18 +(bool~) sin16s::$19 +(dword~) sin16s::$2 +(signed word~) sin16s::$20 +(signed word~) sin16s::$21 +(bool~) sin16s::$3 +(bool~) sin16s::$4 +(dword~) sin16s::$5 +(dword~) sin16s::$6 +(word~) sin16s::$7 +(word~) sin16s::$8 +(word~) sin16s::$9 +(label) sin16s::@1 +(label) sin16s::@2 +(label) sin16s::@3 +(label) sin16s::@4 +(label) sin16s::@5 +(label) sin16s::@6 +(label) sin16s::@7 +(label) sin16s::@return +(byte) sin16s::isUpper +(signed word) sin16s::return +(signed word) sin16s::sinx +(word) sin16s::usinx +(dword) sin16s::x +(word) sin16s::x1 +(word) sin16s::x2 +(word) sin16s::x3 +(word) sin16s::x3_6 +(word) sin16s::x4 +(word) sin16s::x5 +(word) sin16s::x5_128 +(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) +(dword~) sin16s_gen::$0 +(signed word~) sin16s_gen::$1 +(signed word*~) sin16s_gen::$2 +(dword~) sin16s_gen::$3 +(bool~) sin16s_gen::$4 +(label) sin16s_gen::@1 +(label) sin16s_gen::@2 +(label) sin16s_gen::@return +(word) sin16s_gen::i +(signed word*) sin16s_gen::sintab +(dword) sin16s_gen::step +(word) sin16s_gen::wavelength +(dword) sin16s_gen::x +(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) +(signed word~) sin16s_gen2::$0 +(signed word~) sin16s_gen2::$1 +(dword~) sin16s_gen2::$10 +(bool~) sin16s_gen2::$11 +(signed word~) sin16s_gen2::$2 +(dword~) sin16s_gen2::$3 +(signed word~) sin16s_gen2::$4 +(signed dword~) sin16s_gen2::$5 +(word~) sin16s_gen2::$6 +(signed word~) sin16s_gen2::$7 +(signed word~) sin16s_gen2::$8 +(signed word*~) sin16s_gen2::$9 +(label) sin16s_gen2::@1 +(label) sin16s_gen2::@2 +(label) sin16s_gen2::@return +(signed word) sin16s_gen2::ampl +(word) sin16s_gen2::i +(signed word) sin16s_gen2::max +(signed word) sin16s_gen2::min +(signed word) sin16s_gen2::offs +(signed word*) sin16s_gen2::sintab +(dword) sin16s_gen2::step +(word) sin16s_gen2::wavelength +(dword) sin16s_gen2::x +(signed byte()) sin8s((word) sin8s::x) +(bool~) sin8s::$0 +(bool~) sin8s::$1 +(byte~) sin8s::$10 +(byte~) sin8s::$11 +(byte~) sin8s::$12 +(byte~) sin8s::$13 +(byte~) sin8s::$14 +(byte~) sin8s::$15 +(bool~) sin8s::$16 +(bool~) sin8s::$17 +(signed byte~) sin8s::$18 +(bool~) sin8s::$19 +(word~) sin8s::$2 +(bool~) sin8s::$20 +(signed byte~) sin8s::$21 +(signed byte~) sin8s::$22 +(bool~) sin8s::$3 +(bool~) sin8s::$4 +(word~) sin8s::$5 +(word~) sin8s::$6 +(byte~) sin8s::$7 +(byte~) sin8s::$8 +(byte~) sin8s::$9 +(label) sin8s::@1 +(label) sin8s::@2 +(label) sin8s::@3 +(label) sin8s::@4 +(label) sin8s::@5 +(label) sin8s::@6 +(label) sin8s::@7 +(label) sin8s::@8 +(label) sin8s::@9 +(label) sin8s::@return +(byte) sin8s::DIV_6 +(byte) sin8s::isUpper +(signed byte) sin8s::return +(signed byte) sin8s::sinx +(byte) sin8s::usinx +(word) sin8s::x +(byte) sin8s::x1 +(byte) sin8s::x2 +(byte) sin8s::x3 +(byte) sin8s::x3_6 +(byte) sin8s::x4 +(byte) sin8s::x5 +(byte) sin8s::x5_128 +(void()) sin8s_gen((signed byte*) sin8s_gen::sintab , (word) sin8s_gen::wavelength) +(word~) sin8s_gen::$0 +(signed byte~) sin8s_gen::$1 +(word~) sin8s_gen::$2 +(bool~) sin8s_gen::$3 +(label) sin8s_gen::@1 +(label) sin8s_gen::@2 +(label) sin8s_gen::@return +(word) sin8s_gen::i +(signed byte*) sin8s_gen::sintab +(word) sin8s_gen::step +(word) sin8s_gen::wavelength +(word) sin8s_gen::x +inline (byte()) toD018((byte*) toD018::screen , (byte*) toD018::gfx) +(word~) toD018::$0 +(word~) toD018::$1 +(word~) toD018::$2 +(byte~) toD018::$3 +(word~) toD018::$4 +(byte~) toD018::$5 +(byte~) toD018::$6 +(byte~) toD018::$7 +(byte~) toD018::$8 +(label) toD018::@1 +(label) toD018::@return +(byte*) toD018::gfx +(byte) toD018::return +(byte*) toD018::screen +inline (byte()) toDd00((byte*) toDd00::gfx) +(word~) toDd00::$0 +(byte~) toDd00::$1 +(byte~) toDd00::$2 +(byte/word/dword~) toDd00::$3 +(label) toDd00::@1 +(label) toDd00::@return +(byte*) toDd00::gfx +(byte) toDd00::return +inline (void()) vicSelectGfxBank((byte*) vicSelectGfxBank::gfx) +(byte~) vicSelectGfxBank::$0 +(label) vicSelectGfxBank::@return +(byte*) vicSelectGfxBank::gfx + +Fixing lo/hi-lvalue with new tmpVar mul8s::$16 mul8s::$16 ← mul8s::$8 +Fixing lo/hi-lvalue with new tmpVar mul8s::$17 mul8s::$17 ← mul8s::$14 +Fixing lo/hi-lvalue with new tmpVar mul8su::$10 mul8su::$10 ← mul8su::$8 +Fixing lo/hi-lvalue with new tmpVar mul16s::$16 mul16s::$16 ← mul16s::$8 +Fixing lo/hi-lvalue with new tmpVar mul16s::$17 mul16s::$17 ← mul16s::$14 +Promoting byte/signed byte/word/signed word/dword/signed dword to byte* in PROCPORT_DDR ← ((byte*)) 0 +Promoting byte/signed byte/word/signed word/dword/signed dword to byte* in PROCPORT ← ((byte*)) 1 +Promoting word/dword/signed dword to byte* in CHARGEN ← ((byte*)) 53248 +Promoting word/dword/signed dword to byte* in SPRITES_XPOS ← ((byte*)) 53248 +Promoting word/dword/signed dword to byte* in SPRITES_YPOS ← ((byte*)) 53249 +Promoting word/dword/signed dword to byte* in SPRITES_XMSB ← ((byte*)) 53264 +Promoting word/dword/signed dword to byte* in RASTER ← ((byte*)) 53266 +Promoting word/dword/signed dword to byte* in SPRITES_ENABLE ← ((byte*)) 53269 +Promoting word/dword/signed dword to byte* in SPRITES_EXPAND_Y ← ((byte*)) 53271 +Promoting word/dword/signed dword to byte* in SPRITES_PRIORITY ← ((byte*)) 53275 +Promoting word/dword/signed dword to byte* in SPRITES_MC ← ((byte*)) 53276 +Promoting word/dword/signed dword to byte* in SPRITES_EXPAND_X ← ((byte*)) 53277 +Promoting word/dword/signed dword to byte* in BORDERCOL ← ((byte*)) 53280 +Promoting word/dword/signed dword to byte* in BGCOL ← ((byte*)) 53281 +Promoting word/dword/signed dword to byte* in BGCOL1 ← ((byte*)) 53281 +Promoting word/dword/signed dword to byte* in BGCOL2 ← ((byte*)) 53282 +Promoting word/dword/signed dword to byte* in BGCOL3 ← ((byte*)) 53283 +Promoting word/dword/signed dword to byte* in BGCOL4 ← ((byte*)) 53284 +Promoting word/dword/signed dword to byte* in SPRITES_MC1 ← ((byte*)) 53285 +Promoting word/dword/signed dword to byte* in SPRITES_MC2 ← ((byte*)) 53286 +Promoting word/dword/signed dword to byte* in SPRITES_COLS ← ((byte*)) 53287 +Promoting word/dword/signed dword to byte* in VIC_CONTROL ← ((byte*)) 53265 +Promoting word/dword/signed dword to byte* in D011 ← ((byte*)) 53265 +Promoting word/dword/signed dword to byte* in VIC_CONTROL2 ← ((byte*)) 53270 +Promoting word/dword/signed dword to byte* in D016 ← ((byte*)) 53270 +Promoting word/dword/signed dword to byte* in D018 ← ((byte*)) 53272 +Promoting word/dword/signed dword to byte* in VIC_MEMORY ← ((byte*)) 53272 +Promoting word/dword/signed dword to byte* in COLS ← ((byte*)) 55296 +Promoting word/dword/signed dword to byte* in CIA1_PORT_A ← ((byte*)) 56320 +Promoting word/dword/signed dword to byte* in CIA1_PORT_B ← ((byte*)) 56321 +Promoting word/dword/signed dword to byte* in CIA1_PORT_A_DDR ← ((byte*)) 56322 +Promoting word/dword/signed dword to byte* in CIA1_PORT_B_DDR ← ((byte*)) 56323 +Promoting word/dword/signed dword to byte* in CIA2_PORT_A ← ((byte*)) 56576 +Promoting word/dword/signed dword to byte* in CIA2_PORT_B ← ((byte*)) 56577 +Promoting word/dword/signed dword to byte* in CIA2_PORT_A_DDR ← ((byte*)) 56578 +Promoting word/dword/signed dword to byte* in CIA2_PORT_B_DDR ← ((byte*)) 56579 +Promoting byte to word in mul8u::mb ← ((word)) mul8u::b +Promoting word to dword in mul16u::mb ← ((dword)) mul16u::b +Promoting word/signed word/dword/signed dword to byte* in PLEX_SCREEN_PTR ← ((byte*)) $0 +Promoting word/signed word/dword/signed dword to byte* in SPRITE ← ((byte*)) 8192 +Promoting word/signed word/dword/signed dword to byte* in SCREEN ← ((byte*)) 1024 +Promoting word/signed word/dword/signed dword to byte* in YSIN ← ((byte*)) 8448 +INITIAL CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) PROCPORT_DDR ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) PROCPORT_DDR_MEMORY_MASK ← (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte*) PROCPORT ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) PROCPORT_RAM_ALL ← (byte/signed byte/word/signed word/dword/signed dword) 48 + (byte) PROCPORT_RAM_IO ← (byte/signed byte/word/signed word/dword/signed dword) 53 + (byte) PROCPORT_RAM_CHARROM ← (byte/signed byte/word/signed word/dword/signed dword) 49 + (byte) PROCPORT_KERNEL_IO ← (byte/signed byte/word/signed word/dword/signed dword) 54 + (byte) PROCPORT_BASIC_KERNEL_IO ← (byte/signed byte/word/signed word/dword/signed dword) 55 + (byte*) CHARGEN ← ((byte*)) (word/dword/signed dword) 53248 + (byte*) SPRITES_XPOS ← ((byte*)) (word/dword/signed dword) 53248 + (byte*) SPRITES_YPOS ← ((byte*)) (word/dword/signed dword) 53249 + (byte*) SPRITES_XMSB ← ((byte*)) (word/dword/signed dword) 53264 + (byte*) RASTER ← ((byte*)) (word/dword/signed dword) 53266 + (byte*) SPRITES_ENABLE ← ((byte*)) (word/dword/signed dword) 53269 + (byte*) SPRITES_EXPAND_Y ← ((byte*)) (word/dword/signed dword) 53271 + (byte*) SPRITES_PRIORITY ← ((byte*)) (word/dword/signed dword) 53275 + (byte*) SPRITES_MC ← ((byte*)) (word/dword/signed dword) 53276 + (byte*) SPRITES_EXPAND_X ← ((byte*)) (word/dword/signed dword) 53277 + (byte*) BORDERCOL ← ((byte*)) (word/dword/signed dword) 53280 + (byte*) BGCOL ← ((byte*)) (word/dword/signed dword) 53281 + (byte*) BGCOL1 ← ((byte*)) (word/dword/signed dword) 53281 + (byte*) BGCOL2 ← ((byte*)) (word/dword/signed dword) 53282 + (byte*) BGCOL3 ← ((byte*)) (word/dword/signed dword) 53283 + (byte*) BGCOL4 ← ((byte*)) (word/dword/signed dword) 53284 + (byte*) SPRITES_MC1 ← ((byte*)) (word/dword/signed dword) 53285 + (byte*) SPRITES_MC2 ← ((byte*)) (word/dword/signed dword) 53286 + (byte*) SPRITES_COLS ← ((byte*)) (word/dword/signed dword) 53287 + (byte*) VIC_CONTROL ← ((byte*)) (word/dword/signed dword) 53265 + (byte*) D011 ← ((byte*)) (word/dword/signed dword) 53265 + (byte) VIC_RST8 ← (byte/word/signed word/dword/signed dword) 128 + (byte) VIC_ECM ← (byte/signed byte/word/signed word/dword/signed dword) 64 + (byte) VIC_BMM ← (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte) VIC_DEN ← (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) VIC_RSEL ← (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte*) VIC_CONTROL2 ← ((byte*)) (word/dword/signed dword) 53270 + (byte*) D016 ← ((byte*)) (word/dword/signed dword) 53270 + (byte) VIC_MCM ← (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) VIC_CSEL ← (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte*) D018 ← ((byte*)) (word/dword/signed dword) 53272 + (byte*) VIC_MEMORY ← ((byte*)) (word/dword/signed dword) 53272 + (byte*) COLS ← ((byte*)) (word/dword/signed dword) 55296 + (byte*) CIA1_PORT_A ← ((byte*)) (word/dword/signed dword) 56320 + (byte*) CIA1_PORT_B ← ((byte*)) (word/dword/signed dword) 56321 + (byte*) CIA1_PORT_A_DDR ← ((byte*)) (word/dword/signed dword) 56322 + (byte*) CIA1_PORT_B_DDR ← ((byte*)) (word/dword/signed dword) 56323 + (byte*) CIA2_PORT_A ← ((byte*)) (word/dword/signed dword) 56576 + (byte*) CIA2_PORT_B ← ((byte*)) (word/dword/signed dword) 56577 + (byte*) CIA2_PORT_A_DDR ← ((byte*)) (word/dword/signed dword) 56578 + (byte*) CIA2_PORT_B_DDR ← ((byte*)) (word/dword/signed dword) 56579 + (byte) BLACK ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) WHITE ← (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) CYAN ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) PURPLE ← (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 6 + (byte) YELLOW ← (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) ORANGE ← (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) BROWN ← (byte/signed byte/word/signed word/dword/signed dword) 9 + (byte) PINK ← (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) DARK_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 11 + (byte) GREY ← (byte/signed byte/word/signed word/dword/signed dword) 12 + (byte) LIGHT_GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 13 + (byte) LIGHT_BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 14 + (byte) LIGHT_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 15 + to:@1 +toD018: scope:[toD018] from + (word~) toD018::$0 ← ((word)) (byte*) toD018::screen + (word~) toD018::$1 ← (word~) toD018::$0 & (word/signed word/dword/signed dword) 16383 + (word~) toD018::$2 ← (word~) toD018::$1 << (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte~) toD018::$3 ← > (word~) toD018::$2 + (word~) toD018::$4 ← ((word)) (byte*) toD018::gfx + (byte~) toD018::$5 ← > (word~) toD018::$4 + (byte~) toD018::$6 ← (byte~) toD018::$5 >> (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte~) toD018::$7 ← (byte~) toD018::$6 & (byte/signed byte/word/signed word/dword/signed dword) 15 + (byte~) toD018::$8 ← (byte~) toD018::$3 | (byte~) toD018::$7 + (byte) toD018::return ← (byte~) toD018::$8 + to:toD018::@return +toD018::@return: scope:[toD018] from toD018 toD018::@1 + (byte) toD018::return ← (byte) toD018::return + return (byte) toD018::return + to:@return +toD018::@1: scope:[toD018] from + to:toD018::@return +@1: scope:[] from @begin + to:@2 +toDd00: scope:[toDd00] from + (word~) toDd00::$0 ← ((word)) (byte*) toDd00::gfx + (byte~) toDd00::$1 ← > (word~) toDd00::$0 + (byte~) toDd00::$2 ← (byte~) toDd00::$1 >> (byte/signed byte/word/signed word/dword/signed dword) 6 + (byte/word/dword~) toDd00::$3 ← (byte/signed byte/word/signed word/dword/signed dword) 3 ^ (byte~) toDd00::$2 + (byte) toDd00::return ← (byte/word/dword~) toDd00::$3 + to:toDd00::@return +toDd00::@return: scope:[toDd00] from toDd00 toDd00::@1 + (byte) toDd00::return ← (byte) toDd00::return + return (byte) toDd00::return + to:@return +toDd00::@1: scope:[toDd00] from + to:toDd00::@return +@2: scope:[] from @1 + to:@3 +vicSelectGfxBank: scope:[vicSelectGfxBank] from + *((byte*) CIA2_PORT_A_DDR) ← (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx + *((byte*) CIA2_PORT_A) ← (byte~) vicSelectGfxBank::$0 + to:vicSelectGfxBank::@return +vicSelectGfxBank::@return: scope:[vicSelectGfxBank] from vicSelectGfxBank + return + to:@return +@3: scope:[] from @2 + (byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@4 +div8u: scope:[div8u] from + (byte~) div8u::$0 ← call divr8u (byte) div8u::dividend (byte) div8u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::return ← (byte~) div8u::$0 + to:div8u::@return +div8u::@return: scope:[div8u] from div8u div8u::@1 + (byte) div8u::return ← (byte) div8u::return + return (byte) div8u::return + to:@return +div8u::@1: scope:[div8u] from + to:div8u::@return +@4: scope:[] from @3 + to:@5 +divr8u: scope:[divr8u] from + (byte) divr8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) divr8u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:divr8u::@1 +divr8u::@1: scope:[divr8u] from divr8u divr8u::@3 + (byte~) divr8u::$0 ← (byte) divr8u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte~) divr8u::$0 + (byte~) divr8u::$1 ← (byte) divr8u::dividend & (byte/word/signed word/dword/signed dword) 128 + (bool~) divr8u::$2 ← (byte~) divr8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) divr8u::$3 ← ! (bool~) divr8u::$2 + if((bool~) divr8u::$3) goto divr8u::@2 + to:divr8u::@4 +divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 + (byte~) divr8u::$5 ← (byte) divr8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::dividend ← (byte~) divr8u::$5 + (byte~) divr8u::$6 ← (byte) divr8u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::quotient ← (byte~) divr8u::$6 + (bool~) divr8u::$7 ← (byte) divr8u::rem >= (byte) divr8u::divisor + (bool~) divr8u::$8 ← ! (bool~) divr8u::$7 + if((bool~) divr8u::$8) goto divr8u::@3 + to:divr8u::@5 +divr8u::@4: scope:[divr8u] from divr8u::@1 + (byte/word/dword~) divr8u::$4 ← (byte) divr8u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr8u::rem ← (byte/word/dword~) divr8u::$4 + to:divr8u::@2 +divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 + (byte) divr8u::i ← (byte) divr8u::i + rangenext(0,7) + (bool~) divr8u::$10 ← (byte) divr8u::i != rangelast(0,7) + if((bool~) divr8u::$10) goto divr8u::@1 + to:divr8u::@6 +divr8u::@5: scope:[divr8u] from divr8u::@2 + (byte) divr8u::quotient ← ++ (byte) divr8u::quotient + (byte~) divr8u::$9 ← (byte) divr8u::rem - (byte) divr8u::divisor + (byte) divr8u::rem ← (byte~) divr8u::$9 + to:divr8u::@3 +divr8u::@6: scope:[divr8u] from divr8u::@3 + (byte) rem8u ← (byte) divr8u::rem + (byte) divr8u::return ← (byte) divr8u::quotient + to:divr8u::@return +divr8u::@return: scope:[divr8u] from divr8u::@6 divr8u::@7 + (byte) divr8u::return ← (byte) divr8u::return + return (byte) divr8u::return + to:@return +divr8u::@7: scope:[divr8u] from + to:divr8u::@return +@5: scope:[] from @4 + (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@6 +divr16u: scope:[divr16u] from + (word) divr16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) divr16u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:divr16u::@1 +divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 + (word~) divr16u::$0 ← (word) divr16u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word~) divr16u::$0 + (byte~) divr16u::$1 ← > (word) divr16u::dividend + (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 + (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) divr16u::$4 ← ! (bool~) divr16u::$3 + if((bool~) divr16u::$4) goto divr16u::@2 + to:divr16u::@4 +divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 + (word~) divr16u::$6 ← (word) divr16u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::dividend ← (word~) divr16u::$6 + (word~) divr16u::$7 ← (word) divr16u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::quotient ← (word~) divr16u::$7 + (bool~) divr16u::$8 ← (word) divr16u::rem >= (word) divr16u::divisor + (bool~) divr16u::$9 ← ! (bool~) divr16u::$8 + if((bool~) divr16u::$9) goto divr16u::@3 + to:divr16u::@5 +divr16u::@4: scope:[divr16u] from divr16u::@1 + (word/dword~) divr16u::$5 ← (word) divr16u::rem | (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) divr16u::rem ← (word/dword~) divr16u::$5 + to:divr16u::@2 +divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 + (byte) divr16u::i ← (byte) divr16u::i + rangenext(0,15) + (bool~) divr16u::$11 ← (byte) divr16u::i != rangelast(0,15) + if((bool~) divr16u::$11) goto divr16u::@1 + to:divr16u::@6 +divr16u::@5: scope:[divr16u] from divr16u::@2 + (word) divr16u::quotient ← ++ (word) divr16u::quotient + (word~) divr16u::$10 ← (word) divr16u::rem - (word) divr16u::divisor + (word) divr16u::rem ← (word~) divr16u::$10 + to:divr16u::@3 +divr16u::@6: scope:[divr16u] from divr16u::@3 + (word) rem16u ← (word) divr16u::rem + (word) divr16u::return ← (word) divr16u::quotient + to:divr16u::@return +divr16u::@return: scope:[divr16u] from divr16u::@6 divr16u::@7 + (word) divr16u::return ← (word) divr16u::return + return (word) divr16u::return + to:@return +divr16u::@7: scope:[divr16u] from + to:divr16u::@return +@6: scope:[] from @5 + to:@7 +div16u: scope:[div16u] from + (word~) div16u::$0 ← call divr16u (word) div16u::dividend (word) div16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div16u::return ← (word~) div16u::$0 + to:div16u::@return +div16u::@return: scope:[div16u] from div16u div16u::@1 + (word) div16u::return ← (word) div16u::return + return (word) div16u::return + to:@return +div16u::@1: scope:[div16u] from + to:div16u::@return +@7: scope:[] from @6 + to:@8 +div32u16u: scope:[div32u16u] from + (word~) div32u16u::$0 ← > (dword) div32u16u::dividend + (word~) div32u16u::$1 ← call divr16u (word~) div32u16u::$0 (word) div32u16u::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) div32u16u::quotient_hi ← (word~) div32u16u::$1 + (word~) div32u16u::$2 ← < (dword) div32u16u::dividend + (word~) div32u16u::$3 ← call divr16u (word~) div32u16u::$2 (word) div32u16u::divisor (word) rem16u + (word) div32u16u::quotient_lo ← (word~) div32u16u::$3 + (dword) div32u16u::quotient ← { (word) div32u16u::quotient_hi, (word) div32u16u::quotient_lo } + (dword) div32u16u::return ← (dword) div32u16u::quotient + to:div32u16u::@return +div32u16u::@return: scope:[div32u16u] from div32u16u div32u16u::@1 + (dword) div32u16u::return ← (dword) div32u16u::return + return (dword) div32u16u::return + to:@return +div32u16u::@1: scope:[div32u16u] from + to:div32u16u::@return +@8: scope:[] from @7 + (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@9 +div8s: scope:[div8s] from + (byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) div8s::$0 ← (signed byte) div8s::dividend < (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) div8s::$0) goto div8s::@1 + to:div8s::@7 +div8s::@1: scope:[div8s] from div8s div8s::@8 + (signed byte~) div8s::$2 ← - (signed byte) div8s::dividend + (byte~) div8s::$3 ← ((byte)) (signed byte~) div8s::$2 + (byte) div8s::dividendu ← (byte~) div8s::$3 + (byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:div8s::@2 +div8s::@7: scope:[div8s] from div8s + (byte~) div8s::$1 ← ((byte)) (signed byte) div8s::dividend + (byte) div8s::dividendu ← (byte~) div8s::$1 + to:div8s::@2 +div8s::@2: scope:[div8s] from div8s::@1 div8s::@7 + (byte) div8s::divisoru ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) div8s::$4 ← (signed byte) div8s::divisor < (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) div8s::$4) goto div8s::@3 + to:div8s::@9 +div8s::@8: scope:[div8s] from + to:div8s::@1 +div8s::@3: scope:[div8s] from div8s::@10 div8s::@2 + (signed byte~) div8s::$6 ← - (signed byte) div8s::divisor + (byte~) div8s::$7 ← ((byte)) (signed byte~) div8s::$6 + (byte) div8s::divisoru ← (byte~) div8s::$7 + (byte/word/dword~) div8s::$8 ← (byte) div8s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8s::neg ← (byte/word/dword~) div8s::$8 + to:div8s::@4 +div8s::@9: scope:[div8s] from div8s::@2 + (byte~) div8s::$5 ← ((byte)) (signed byte) div8s::divisor + (byte) div8s::divisoru ← (byte~) div8s::$5 + to:div8s::@4 +div8s::@4: scope:[div8s] from div8s::@3 div8s::@9 + (byte~) div8s::$9 ← call div8u (byte) div8s::dividendu (byte) div8s::divisoru + (byte) div8s::resultu ← (byte~) div8s::$9 + (bool~) div8s::$10 ← (byte) div8s::neg == (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) div8s::$10) goto div8s::@5 + to:div8s::@11 +div8s::@10: scope:[div8s] from + to:div8s::@3 +div8s::@5: scope:[div8s] from div8s::@13 div8s::@4 + (signed byte~) div8s::$15 ← ((signed byte)) (byte) rem8u + (signed byte) rem8s ← (signed byte~) div8s::$15 + (signed byte~) div8s::$16 ← ((signed byte)) (byte) div8s::resultu + (signed byte) div8s::return ← (signed byte~) div8s::$16 + to:div8s::@return +div8s::@11: scope:[div8s] from div8s::@4 + (signed byte~) div8s::$11 ← ((signed byte)) (byte) rem8u + (signed byte~) div8s::$12 ← - (signed byte~) div8s::$11 + (signed byte) rem8s ← (signed byte~) div8s::$12 + (signed byte~) div8s::$13 ← ((signed byte)) (byte) div8s::resultu + (signed byte~) div8s::$14 ← - (signed byte~) div8s::$13 + (signed byte) div8s::return ← (signed byte~) div8s::$14 + to:div8s::@return +div8s::@return: scope:[div8s] from div8s::@11 div8s::@5 div8s::@6 + (signed byte) div8s::return ← (signed byte) div8s::return + return (signed byte) div8s::return + to:@return +div8s::@12: scope:[div8s] from + to:div8s::@6 +div8s::@6: scope:[div8s] from div8s::@12 div8s::@14 + to:div8s::@return +div8s::@13: scope:[div8s] from + to:div8s::@5 +div8s::@14: scope:[div8s] from + to:div8s::@6 +@9: scope:[] from @8 + (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@10 +divr16s: scope:[divr16s] from + (byte) divr16s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) divr16s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) divr16s::remu ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) divr16s::$0 ← (signed word) divr16s::dividend < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) divr16s::$1 ← (signed word) divr16s::rem < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) divr16s::$2 ← (bool~) divr16s::$0 || (bool~) divr16s::$1 + if((bool~) divr16s::$2) goto divr16s::@1 + to:divr16s::@7 +divr16s::@1: scope:[divr16s] from divr16s divr16s::@8 + (signed word~) divr16s::$5 ← - (signed word) divr16s::dividend + (word~) divr16s::$6 ← ((word)) (signed word~) divr16s::$5 + (word) divr16s::dividendu ← (word~) divr16s::$6 + (signed word~) divr16s::$7 ← - (signed word) divr16s::rem + (word~) divr16s::$8 ← ((word)) (signed word~) divr16s::$7 + (word) divr16s::remu ← (word~) divr16s::$8 + (byte) divr16s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:divr16s::@2 +divr16s::@7: scope:[divr16s] from divr16s + (word~) divr16s::$3 ← ((word)) (signed word) divr16s::dividend + (word) divr16s::dividendu ← (word~) divr16s::$3 + (word~) divr16s::$4 ← ((word)) (signed word) divr16s::rem + (word) divr16s::remu ← (word~) divr16s::$4 + to:divr16s::@2 +divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@7 + (word) divr16s::divisoru ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) divr16s::$9 ← (signed word) divr16s::divisor < (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) divr16s::$9) goto divr16s::@3 + to:divr16s::@9 +divr16s::@8: scope:[divr16s] from + to:divr16s::@1 +divr16s::@3: scope:[divr16s] from divr16s::@10 divr16s::@2 + (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor + (word~) divr16s::$12 ← ((word)) (signed word~) divr16s::$11 + (word) divr16s::divisoru ← (word~) divr16s::$12 + (byte/word/dword~) divr16s::$13 ← (byte) divr16s::neg ^ (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) divr16s::neg ← (byte/word/dword~) divr16s::$13 + to:divr16s::@4 +divr16s::@9: scope:[divr16s] from divr16s::@2 + (word~) divr16s::$10 ← ((word)) (signed word) divr16s::divisor + (word) divr16s::divisoru ← (word~) divr16s::$10 + to:divr16s::@4 +divr16s::@4: scope:[divr16s] from divr16s::@3 divr16s::@9 + (word~) divr16s::$14 ← call divr16u (word) divr16s::dividendu (word) divr16s::divisoru (word) divr16s::remu + (word) divr16s::resultu ← (word~) divr16s::$14 + (bool~) divr16s::$15 ← (byte) divr16s::neg == (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) divr16s::$15) goto divr16s::@5 + to:divr16s::@11 +divr16s::@10: scope:[divr16s] from + to:divr16s::@3 +divr16s::@5: scope:[divr16s] from divr16s::@13 divr16s::@4 + (signed word~) divr16s::$20 ← ((signed word)) (word) rem16u + (signed word) rem16s ← (signed word~) divr16s::$20 + (signed word~) divr16s::$21 ← ((signed word)) (word) divr16s::resultu + (signed word) divr16s::return ← (signed word~) divr16s::$21 + to:divr16s::@return +divr16s::@11: scope:[divr16s] from divr16s::@4 + (signed word~) divr16s::$16 ← ((signed word)) (word) rem16u + (signed word~) divr16s::$17 ← - (signed word~) divr16s::$16 + (signed word) rem16s ← (signed word~) divr16s::$17 + (signed word~) divr16s::$18 ← ((signed word)) (word) divr16s::resultu + (signed word~) divr16s::$19 ← - (signed word~) divr16s::$18 + (signed word) divr16s::return ← (signed word~) divr16s::$19 + to:divr16s::@return +divr16s::@return: scope:[divr16s] from divr16s::@11 divr16s::@5 divr16s::@6 + (signed word) divr16s::return ← (signed word) divr16s::return + return (signed word) divr16s::return + to:@return +divr16s::@12: scope:[divr16s] from + to:divr16s::@6 +divr16s::@6: scope:[divr16s] from divr16s::@12 divr16s::@14 + to:divr16s::@return +divr16s::@13: scope:[divr16s] from + to:divr16s::@5 +divr16s::@14: scope:[divr16s] from + to:divr16s::@6 +@10: scope:[] from @9 + to:@11 +div16s: scope:[div16s] from + (signed word~) div16s::$0 ← call divr16s (signed word) div16s::dividend (signed word) div16s::divisor (byte/signed byte/word/signed word/dword/signed dword) 0 + (signed word) div16s::return ← (signed word~) div16s::$0 + to:div16s::@return +div16s::@return: scope:[div16s] from div16s div16s::@1 + (signed word) div16s::return ← (signed word) div16s::return + return (signed word) div16s::return + to:@return +div16s::@1: scope:[div16s] from + to:div16s::@return +@11: scope:[] from @10 + to:@12 +mul8u: scope:[mul8u] from + (word) mul8u::res ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) mul8u::mb ← ((word)) (byte) mul8u::b + to:mul8u::@1 +mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 + (bool~) mul8u::$0 ← (byte) mul8u::a != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) mul8u::$0) goto mul8u::@2 + to:mul8u::@5 +mul8u::@2: scope:[mul8u] from mul8u::@1 mul8u::@6 + (byte~) mul8u::$1 ← (byte) mul8u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) mul8u::$3 ← ! (bool~) mul8u::$2 + if((bool~) mul8u::$3) goto mul8u::@4 + to:mul8u::@7 +mul8u::@5: scope:[mul8u] from mul8u::@1 + to:mul8u::@3 +mul8u::@3: scope:[mul8u] from mul8u::@5 mul8u::@8 + (word) mul8u::return ← (word) mul8u::res + to:mul8u::@return +mul8u::@6: scope:[mul8u] from + to:mul8u::@2 +mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7 + (byte~) mul8u::$5 ← (byte) mul8u::a >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) mul8u::a ← (byte~) mul8u::$5 + (word~) mul8u::$6 ← (word) mul8u::mb << (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) mul8u::mb ← (word~) mul8u::$6 + to:mul8u::@1 +mul8u::@7: scope:[mul8u] from mul8u::@2 + (word~) mul8u::$4 ← (word) mul8u::res + (word) mul8u::mb + (word) mul8u::res ← (word~) mul8u::$4 + to:mul8u::@4 +mul8u::@8: scope:[mul8u] from + to:mul8u::@3 +mul8u::@return: scope:[mul8u] from mul8u::@3 mul8u::@9 + (word) mul8u::return ← (word) mul8u::return + return (word) mul8u::return + to:@return +mul8u::@9: scope:[mul8u] from + to:mul8u::@return +@12: scope:[] from @11 + to:@13 +mul8s: scope:[mul8s] from + (byte~) mul8s::$0 ← ((byte)) (signed byte) mul8s::a + (byte~) mul8s::$1 ← ((byte)) (signed byte) mul8s::b + (word~) mul8s::$2 ← call mul8u (byte~) mul8s::$0 (byte~) mul8s::$1 + (word) mul8s::m ← (word~) mul8s::$2 + (bool~) mul8s::$3 ← (signed byte) mul8s::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) mul8s::$4 ← ! (bool~) mul8s::$3 + if((bool~) mul8s::$4) goto mul8s::@1 + to:mul8s::@3 +mul8s::@1: scope:[mul8s] from mul8s mul8s::@3 + (bool~) mul8s::$9 ← (signed byte) mul8s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) mul8s::$10 ← ! (bool~) mul8s::$9 + if((bool~) mul8s::$10) goto mul8s::@2 + to:mul8s::@4 +mul8s::@3: scope:[mul8s] from mul8s + (byte~) mul8s::$5 ← > (word) mul8s::m + (byte~) mul8s::$6 ← > (word) mul8s::m + (byte~) mul8s::$7 ← ((byte)) (signed byte) mul8s::b + (byte~) mul8s::$8 ← (byte~) mul8s::$6 - (byte~) mul8s::$7 + (byte~) mul8s::$16 ← (byte~) mul8s::$8 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$16 + to:mul8s::@1 +mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4 + (signed word~) mul8s::$15 ← ((signed word)) (word) mul8s::m + (signed word) mul8s::return ← (signed word~) mul8s::$15 + to:mul8s::@return +mul8s::@4: scope:[mul8s] from mul8s::@1 + (byte~) mul8s::$11 ← > (word) mul8s::m + (byte~) mul8s::$12 ← > (word) mul8s::m + (byte~) mul8s::$13 ← ((byte)) (signed byte) mul8s::a + (byte~) mul8s::$14 ← (byte~) mul8s::$12 - (byte~) mul8s::$13 + (byte~) mul8s::$17 ← (byte~) mul8s::$14 + (word) mul8s::m ← (word) mul8s::m hi= (byte~) mul8s::$17 + to:mul8s::@2 +mul8s::@return: scope:[mul8s] from mul8s::@2 mul8s::@5 + (signed word) mul8s::return ← (signed word) mul8s::return + return (signed word) mul8s::return + to:@return +mul8s::@5: scope:[mul8s] from + to:mul8s::@return +@13: scope:[] from @12 + to:@14 +mul8su: scope:[mul8su] from + (byte~) mul8su::$0 ← ((byte)) (signed byte) mul8su::a + (byte~) mul8su::$1 ← ((byte)) (byte) mul8su::b + (word~) mul8su::$2 ← call mul8u (byte~) mul8su::$0 (byte~) mul8su::$1 + (word) mul8su::m ← (word~) mul8su::$2 + (bool~) mul8su::$3 ← (signed byte) mul8su::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) mul8su::$4 ← ! (bool~) mul8su::$3 + if((bool~) mul8su::$4) goto mul8su::@1 + to:mul8su::@2 +mul8su::@1: scope:[mul8su] from mul8su mul8su::@2 + (signed word~) mul8su::$9 ← ((signed word)) (word) mul8su::m + (signed word) mul8su::return ← (signed word~) mul8su::$9 + to:mul8su::@return +mul8su::@2: scope:[mul8su] from mul8su + (byte~) mul8su::$5 ← > (word) mul8su::m + (byte~) mul8su::$6 ← > (word) mul8su::m + (byte~) mul8su::$7 ← ((byte)) (byte) mul8su::b + (byte~) mul8su::$8 ← (byte~) mul8su::$6 - (byte~) mul8su::$7 + (byte~) mul8su::$10 ← (byte~) mul8su::$8 + (word) mul8su::m ← (word) mul8su::m hi= (byte~) mul8su::$10 + to:mul8su::@1 +mul8su::@return: scope:[mul8su] from mul8su::@1 mul8su::@3 + (signed word) mul8su::return ← (signed word) mul8su::return + return (signed word) mul8su::return + to:@return +mul8su::@3: scope:[mul8su] from + to:mul8su::@return +@14: scope:[] from @13 + to:@15 +mul16u: scope:[mul16u] from + (dword) mul16u::res ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (dword) mul16u::mb ← ((dword)) (word) mul16u::b + to:mul16u::@1 +mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 + (bool~) mul16u::$0 ← (word) mul16u::a != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) mul16u::$0) goto mul16u::@2 + to:mul16u::@5 +mul16u::@2: scope:[mul16u] from mul16u::@1 mul16u::@6 + (byte/word~) mul16u::$1 ← (word) mul16u::a & (byte/signed byte/word/signed word/dword/signed dword) 1 + (bool~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) mul16u::$3 ← ! (bool~) mul16u::$2 + if((bool~) mul16u::$3) goto mul16u::@4 + to:mul16u::@7 +mul16u::@5: scope:[mul16u] from mul16u::@1 + to:mul16u::@3 +mul16u::@3: scope:[mul16u] from mul16u::@5 mul16u::@8 + (dword) mul16u::return ← (dword) mul16u::res + to:mul16u::@return +mul16u::@6: scope:[mul16u] from + to:mul16u::@2 +mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7 + (word~) mul16u::$5 ← (word) mul16u::a >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) mul16u::a ← (word~) mul16u::$5 + (dword~) mul16u::$6 ← (dword) mul16u::mb << (byte/signed byte/word/signed word/dword/signed dword) 1 + (dword) mul16u::mb ← (dword~) mul16u::$6 + to:mul16u::@1 +mul16u::@7: scope:[mul16u] from mul16u::@2 + (dword~) mul16u::$4 ← (dword) mul16u::res + (dword) mul16u::mb + (dword) mul16u::res ← (dword~) mul16u::$4 + to:mul16u::@4 +mul16u::@8: scope:[mul16u] from + to:mul16u::@3 +mul16u::@return: scope:[mul16u] from mul16u::@3 mul16u::@9 + (dword) mul16u::return ← (dword) mul16u::return + return (dword) mul16u::return + to:@return +mul16u::@9: scope:[mul16u] from + to:mul16u::@return +@15: scope:[] from @14 + to:@16 +mul16s: scope:[mul16s] from + (word~) mul16s::$0 ← ((word)) (signed word) mul16s::a + (word~) mul16s::$1 ← ((word)) (signed word) mul16s::b + (dword~) mul16s::$2 ← call mul16u (word~) mul16s::$0 (word~) mul16s::$1 + (dword) mul16s::m ← (dword~) mul16s::$2 + (bool~) mul16s::$3 ← (signed word) mul16s::a < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) mul16s::$4 ← ! (bool~) mul16s::$3 + if((bool~) mul16s::$4) goto mul16s::@1 + to:mul16s::@3 +mul16s::@1: scope:[mul16s] from mul16s mul16s::@3 + (bool~) mul16s::$9 ← (signed word) mul16s::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) mul16s::$10 ← ! (bool~) mul16s::$9 + if((bool~) mul16s::$10) goto mul16s::@2 + to:mul16s::@4 +mul16s::@3: scope:[mul16s] from mul16s + (word~) mul16s::$5 ← > (dword) mul16s::m + (word~) mul16s::$6 ← > (dword) mul16s::m + (word~) mul16s::$7 ← ((word)) (signed word) mul16s::b + (word~) mul16s::$8 ← (word~) mul16s::$6 - (word~) mul16s::$7 + (word~) mul16s::$16 ← (word~) mul16s::$8 + (dword) mul16s::m ← (dword) mul16s::m hi= (word~) mul16s::$16 + to:mul16s::@1 +mul16s::@2: scope:[mul16s] from mul16s::@1 mul16s::@4 + (signed dword~) mul16s::$15 ← ((signed dword)) (dword) mul16s::m + (signed dword) mul16s::return ← (signed dword~) mul16s::$15 + to:mul16s::@return +mul16s::@4: scope:[mul16s] from mul16s::@1 + (word~) mul16s::$11 ← > (dword) mul16s::m + (word~) mul16s::$12 ← > (dword) mul16s::m + (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a + (word~) mul16s::$14 ← (word~) mul16s::$12 - (word~) mul16s::$13 + (word~) mul16s::$17 ← (word~) mul16s::$14 + (dword) mul16s::m ← (dword) mul16s::m hi= (word~) mul16s::$17 + to:mul16s::@2 +mul16s::@return: scope:[mul16s] from mul16s::@2 mul16s::@5 + (signed dword) mul16s::return ← (signed dword) mul16s::return + return (signed dword) mul16s::return + to:@return +mul16s::@5: scope:[mul16s] from + to:mul16s::@return +@16: scope:[] from @15 + (dword) PI2_u4f28 ← (dword/signed dword) 1686629713 + (dword) PI_u4f28 ← (dword/signed dword) 843314857 + (dword) PI_HALF_u4f28 ← (dword/signed dword) 421657428 + (word) PI2_u4f12 ← (word/signed word/dword/signed dword) 25736 + (word) PI_u4f12 ← (word/signed word/dword/signed dword) 12868 + (word) PI_HALF_u4f12 ← (word/signed word/dword/signed dword) 6434 + to:@17 +sin16s_gen: scope:[sin16s_gen] from + (dword~) sin16s_gen::$0 ← call div32u16u (dword) PI2_u4f28 (word) sin16s_gen::wavelength + (dword) sin16s_gen::step ← (dword~) sin16s_gen::$0 + (dword) sin16s_gen::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) sin16s_gen::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:sin16s_gen::@1 +sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen sin16s_gen::@1 + (signed word~) sin16s_gen::$1 ← call sin16s (dword) sin16s_gen::x + *((signed word*) sin16s_gen::sintab) ← (signed word~) sin16s_gen::$1 + (signed word*~) sin16s_gen::$2 ← (signed word*) sin16s_gen::sintab + (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed word*) sin16s_gen::sintab ← (signed word*~) sin16s_gen::$2 + (dword~) sin16s_gen::$3 ← (dword) sin16s_gen::x + (dword) sin16s_gen::step + (dword) sin16s_gen::x ← (dword~) sin16s_gen::$3 + (word) sin16s_gen::i ← ++ (word) sin16s_gen::i + (bool~) sin16s_gen::$4 ← (word) sin16s_gen::i < (word) sin16s_gen::wavelength + if((bool~) sin16s_gen::$4) goto sin16s_gen::@1 + to:sin16s_gen::@2 +sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 + to:sin16s_gen::@return +sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@2 + return + to:@return +@17: scope:[] from @16 + to:@18 +sin16s_gen2: scope:[sin16s_gen2] from + (signed word~) sin16s_gen2::$0 ← (signed word) sin16s_gen2::max - (signed word) sin16s_gen2::min + (signed word) sin16s_gen2::ampl ← (signed word~) sin16s_gen2::$0 + (signed word~) sin16s_gen2::$1 ← (signed word) sin16s_gen2::ampl >> (byte/signed byte/word/signed word/dword/signed dword) 1 + (signed word~) sin16s_gen2::$2 ← (signed word) sin16s_gen2::min + (signed word~) sin16s_gen2::$1 + (signed word) sin16s_gen2::offs ← (signed word~) sin16s_gen2::$2 + (dword~) sin16s_gen2::$3 ← call div32u16u (dword) PI2_u4f28 (word) sin16s_gen2::wavelength + (dword) sin16s_gen2::step ← (dword~) sin16s_gen2::$3 + (dword) sin16s_gen2::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) sin16s_gen2::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:sin16s_gen2::@1 +sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2 sin16s_gen2::@1 + (signed word~) sin16s_gen2::$4 ← call sin16s (dword) sin16s_gen2::x + (signed dword~) sin16s_gen2::$5 ← call mul16s (signed word~) sin16s_gen2::$4 (signed word) sin16s_gen2::ampl + (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5 + (signed word~) sin16s_gen2::$7 ← ((signed word)) (word~) sin16s_gen2::$6 + (signed word~) sin16s_gen2::$8 ← (signed word) sin16s_gen2::offs + (signed word~) sin16s_gen2::$7 + *((signed word*) sin16s_gen2::sintab) ← (signed word~) sin16s_gen2::$8 + (signed word*~) sin16s_gen2::$9 ← (signed word*) sin16s_gen2::sintab + (byte/signed byte/word/signed word/dword/signed dword) 2 + (signed word*) sin16s_gen2::sintab ← (signed word*~) sin16s_gen2::$9 + (dword~) sin16s_gen2::$10 ← (dword) sin16s_gen2::x + (dword) sin16s_gen2::step + (dword) sin16s_gen2::x ← (dword~) sin16s_gen2::$10 + (word) sin16s_gen2::i ← ++ (word) sin16s_gen2::i + (bool~) sin16s_gen2::$11 ← (word) sin16s_gen2::i < (word) sin16s_gen2::wavelength + if((bool~) sin16s_gen2::$11) goto sin16s_gen2::@1 + to:sin16s_gen2::@2 +sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 + to:sin16s_gen2::@return +sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@2 + return + to:@return +@18: scope:[] from @17 + to:@19 +sin8s_gen: scope:[sin8s_gen] from + (word~) sin8s_gen::$0 ← call div16u (word) PI2_u4f12 (word) sin8s_gen::wavelength + (word) sin8s_gen::step ← (word~) sin8s_gen::$0 + (word) sin8s_gen::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) sin8s_gen::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:sin8s_gen::@1 +sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen sin8s_gen::@1 + (signed byte~) sin8s_gen::$1 ← call sin8s (word) sin8s_gen::x + *((signed byte*) sin8s_gen::sintab) ← (signed byte~) sin8s_gen::$1 + (signed byte*) sin8s_gen::sintab ← ++ (signed byte*) sin8s_gen::sintab + (word~) sin8s_gen::$2 ← (word) sin8s_gen::x + (word) sin8s_gen::step + (word) sin8s_gen::x ← (word~) sin8s_gen::$2 + (word) sin8s_gen::i ← ++ (word) sin8s_gen::i + (bool~) sin8s_gen::$3 ← (word) sin8s_gen::i < (word) sin8s_gen::wavelength + if((bool~) sin8s_gen::$3) goto sin8s_gen::@1 + to:sin8s_gen::@2 +sin8s_gen::@2: scope:[sin8s_gen] from sin8s_gen::@1 + to:sin8s_gen::@return +sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@2 + return + to:@return +@19: scope:[] from @18 + to:@20 +sin16s: scope:[sin16s] from + (byte) sin16s::isUpper ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) sin16s::$0 ← (dword) sin16s::x >= (dword) PI_u4f28 + (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 + if((bool~) sin16s::$1) goto sin16s::@1 + to:sin16s::@4 +sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 + (bool~) sin16s::$3 ← (dword) sin16s::x >= (dword) PI_HALF_u4f28 + (bool~) sin16s::$4 ← ! (bool~) sin16s::$3 + if((bool~) sin16s::$4) goto sin16s::@2 + to:sin16s::@5 +sin16s::@4: scope:[sin16s] from sin16s + (dword~) sin16s::$2 ← (dword) sin16s::x - (dword) PI_u4f28 + (dword) sin16s::x ← (dword~) sin16s::$2 + (byte) sin16s::isUpper ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:sin16s::@1 +sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 + (dword~) sin16s::$6 ← (dword) sin16s::x << (byte/signed byte/word/signed word/dword/signed dword) 3 + (word~) sin16s::$7 ← > (dword~) sin16s::$6 + (word) sin16s::x1 ← (word~) sin16s::$7 + (word~) sin16s::$8 ← call mulu16_sel (word) sin16s::x1 (word) sin16s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) sin16s::x2 ← (word~) sin16s::$8 + (word~) sin16s::$9 ← call mulu16_sel (word) sin16s::x2 (word) sin16s::x1 (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) sin16s::x3 ← (word~) sin16s::$9 + (word/signed word/dword/signed dword~) sin16s::$10 ← (dword/signed dword) 65536 / (byte/signed byte/word/signed word/dword/signed dword) 6 + (word~) sin16s::$11 ← call mulu16_sel (word) sin16s::x3 (word/signed word/dword/signed dword~) sin16s::$10 (byte/signed byte/word/signed word/dword/signed dword) 1 + (word) sin16s::x3_6 ← (word~) sin16s::$11 + (word~) sin16s::$12 ← (word) sin16s::x1 - (word) sin16s::x3_6 + (word) sin16s::usinx ← (word~) sin16s::$12 + (word~) sin16s::$13 ← call mulu16_sel (word) sin16s::x3 (word) sin16s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) sin16s::x4 ← (word~) sin16s::$13 + (word~) sin16s::$14 ← call mulu16_sel (word) sin16s::x4 (word) sin16s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (word) sin16s::x5 ← (word~) sin16s::$14 + (word~) sin16s::$15 ← (word) sin16s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 + (word) sin16s::x5_128 ← (word~) sin16s::$15 + (word~) sin16s::$16 ← (word) sin16s::usinx + (word) sin16s::x5_128 + (word) sin16s::usinx ← (word~) sin16s::$16 + (signed word~) sin16s::$17 ← ((signed word)) (word) sin16s::usinx + (signed word) sin16s::sinx ← (signed word~) sin16s::$17 + (bool~) sin16s::$18 ← (byte) sin16s::isUpper != (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) sin16s::$19 ← ! (bool~) sin16s::$18 + if((bool~) sin16s::$19) goto sin16s::@3 + to:sin16s::@6 +sin16s::@5: scope:[sin16s] from sin16s::@1 + (dword~) sin16s::$5 ← (dword) PI_u4f28 - (dword) sin16s::x + (dword) sin16s::x ← (dword~) sin16s::$5 + to:sin16s::@2 +sin16s::@3: scope:[sin16s] from sin16s::@2 sin16s::@6 + (signed word) sin16s::return ← (signed word) sin16s::sinx + to:sin16s::@return +sin16s::@6: scope:[sin16s] from sin16s::@2 + (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx + (signed word~) sin16s::$21 ← - (signed word~) sin16s::$20 + (signed word) sin16s::sinx ← (signed word~) sin16s::$21 + to:sin16s::@3 +sin16s::@return: scope:[sin16s] from sin16s::@3 sin16s::@7 + (signed word) sin16s::return ← (signed word) sin16s::return + return (signed word) sin16s::return + to:@return +sin16s::@7: scope:[sin16s] from + to:sin16s::@return +@20: scope:[] from @19 + to:@21 +sin8s: scope:[sin8s] from + (byte) sin8s::isUpper ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) sin8s::$0 ← (word) sin8s::x >= (word) PI_u4f12 + (bool~) sin8s::$1 ← ! (bool~) sin8s::$0 + if((bool~) sin8s::$1) goto sin8s::@1 + to:sin8s::@5 +sin8s::@1: scope:[sin8s] from sin8s sin8s::@5 + (bool~) sin8s::$3 ← (word) sin8s::x >= (word) PI_HALF_u4f12 + (bool~) sin8s::$4 ← ! (bool~) sin8s::$3 + if((bool~) sin8s::$4) goto sin8s::@2 + to:sin8s::@6 +sin8s::@5: scope:[sin8s] from sin8s + (word~) sin8s::$2 ← (word) sin8s::x - (word) PI_u4f12 + (word) sin8s::x ← (word~) sin8s::$2 + (byte) sin8s::isUpper ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:sin8s::@1 +sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 + (word~) sin8s::$6 ← (word) sin8s::x << (byte/signed byte/word/signed word/dword/signed dword) 3 + (byte~) sin8s::$7 ← > (word~) sin8s::$6 + (byte) sin8s::x1 ← (byte~) sin8s::$7 + (byte~) sin8s::$8 ← call mulu8_sel (byte) sin8s::x1 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) sin8s::x2 ← (byte~) sin8s::$8 + (byte~) sin8s::$9 ← call mulu8_sel (byte) sin8s::x2 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) sin8s::x3 ← (byte~) sin8s::$9 + (byte) sin8s::DIV_6 ← (byte/signed byte/word/signed word/dword/signed dword) 43 + (byte~) sin8s::$10 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::DIV_6 (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) sin8s::x3_6 ← (byte~) sin8s::$10 + (byte~) sin8s::$11 ← (byte) sin8s::x1 - (byte) sin8s::x3_6 + (byte) sin8s::usinx ← (byte~) sin8s::$11 + (byte~) sin8s::$12 ← call mulu8_sel (byte) sin8s::x3 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) sin8s::x4 ← (byte~) sin8s::$12 + (byte~) sin8s::$13 ← call mulu8_sel (byte) sin8s::x4 (byte) sin8s::x1 (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) sin8s::x5 ← (byte~) sin8s::$13 + (byte~) sin8s::$14 ← (byte) sin8s::x5 >> (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) sin8s::x5_128 ← (byte~) sin8s::$14 + (byte~) sin8s::$15 ← (byte) sin8s::usinx + (byte) sin8s::x5_128 + (byte) sin8s::usinx ← (byte~) sin8s::$15 + (bool~) sin8s::$16 ← (byte) sin8s::usinx >= (byte/word/signed word/dword/signed dword) 128 + (bool~) sin8s::$17 ← ! (bool~) sin8s::$16 + if((bool~) sin8s::$17) goto sin8s::@3 + to:sin8s::@7 +sin8s::@6: scope:[sin8s] from sin8s::@1 + (word~) sin8s::$5 ← (word) PI_u4f12 - (word) sin8s::x + (word) sin8s::x ← (word~) sin8s::$5 + to:sin8s::@2 +sin8s::@3: scope:[sin8s] from sin8s::@2 sin8s::@7 + (signed byte~) sin8s::$18 ← ((signed byte)) (byte) sin8s::usinx + (signed byte) sin8s::sinx ← (signed byte~) sin8s::$18 + (bool~) sin8s::$19 ← (byte) sin8s::isUpper != (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) sin8s::$20 ← ! (bool~) sin8s::$19 + if((bool~) sin8s::$20) goto sin8s::@4 + to:sin8s::@8 +sin8s::@7: scope:[sin8s] from sin8s::@2 + (byte) sin8s::usinx ← -- (byte) sin8s::usinx + to:sin8s::@3 +sin8s::@4: scope:[sin8s] from sin8s::@3 sin8s::@8 + (signed byte) sin8s::return ← (signed byte) sin8s::sinx + to:sin8s::@return +sin8s::@8: scope:[sin8s] from sin8s::@3 + (signed byte~) sin8s::$21 ← ((signed byte)) (byte) sin8s::usinx + (signed byte~) sin8s::$22 ← - (signed byte~) sin8s::$21 + (signed byte) sin8s::sinx ← (signed byte~) sin8s::$22 + to:sin8s::@4 +sin8s::@return: scope:[sin8s] from sin8s::@4 sin8s::@9 + (signed byte) sin8s::return ← (signed byte) sin8s::return + return (signed byte) sin8s::return + to:@return +sin8s::@9: scope:[sin8s] from + to:sin8s::@return +@21: scope:[] from @20 + to:@22 +mulu16_sel: scope:[mulu16_sel] from + (dword~) mulu16_sel::$0 ← call mul16u (word) mulu16_sel::v1 (word) mulu16_sel::v2 + (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select + (word~) mulu16_sel::$2 ← > (dword~) mulu16_sel::$1 + (word) mulu16_sel::return ← (word~) mulu16_sel::$2 + to:mulu16_sel::@return +mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel mulu16_sel::@1 + (word) mulu16_sel::return ← (word) mulu16_sel::return + return (word) mulu16_sel::return + to:@return +mulu16_sel::@1: scope:[mulu16_sel] from + to:mulu16_sel::@return +@22: scope:[] from @21 + to:@23 +mulu8_sel: scope:[mulu8_sel] from + (word~) mulu8_sel::$0 ← call mul8u (byte) mulu8_sel::v1 (byte) mulu8_sel::v2 + (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select + (byte~) mulu8_sel::$2 ← > (word~) mulu8_sel::$1 + (byte) mulu8_sel::return ← (byte~) mulu8_sel::$2 + to:mulu8_sel::@return +mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel mulu8_sel::@1 + (byte) mulu8_sel::return ← (byte) mulu8_sel::return + return (byte) mulu8_sel::return + to:@return +mulu8_sel::@1: scope:[mulu8_sel] from + to:mulu8_sel::@return +@23: scope:[] from @22 + (byte) PLEX_COUNT ← (byte/signed byte/word/signed word/dword/signed dword) 24 + (word[PLEX_COUNT]) PLEX_XPOS ← { fill( PLEX_COUNT, 0) } + (byte[PLEX_COUNT]) PLEX_YPOS ← { fill( PLEX_COUNT, 0) } + (byte[PLEX_COUNT]) PLEX_PTR ← { fill( PLEX_COUNT, 0) } + (word/signed word/dword/signed dword~) $0 ← (word/signed word/dword/signed dword) 1024 + (word/signed word/dword/signed dword) 1016 + (byte*) PLEX_SCREEN_PTR ← ((byte*)) (word/signed word/dword/signed dword~) $0 + (byte[PLEX_COUNT]) PLEX_SORTED_IDX ← { fill( PLEX_COUNT, 0) } + (byte) plex_show_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_msb ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:@24 +plexInit: scope:[plexInit] from + (void~) plexInit::$0 ← call plexSetScreen (byte*) plexInit::screen + (byte/signed word/word/dword/signed dword~) plexInit::$1 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexInit::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plexInit::@1 +plexInit::@1: scope:[plexInit] from plexInit plexInit::@1 + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexInit::i) ← (byte) plexInit::i + (byte) plexInit::i ← (byte) plexInit::i + rangenext(0,plexInit::$1) + (bool~) plexInit::$2 ← (byte) plexInit::i != rangelast(0,plexInit::$1) + if((bool~) plexInit::$2) goto plexInit::@1 + to:plexInit::@2 +plexInit::@2: scope:[plexInit] from plexInit::@1 + to:plexInit::@return +plexInit::@return: scope:[plexInit] from plexInit::@2 + return + to:@return +@24: scope:[] from @23 + to:@25 +plexSetScreen: scope:[plexSetScreen] from + (byte*~) plexSetScreen::$0 ← (byte*) plexSetScreen::screen + (word/signed word/dword/signed dword) 1016 + (byte*) PLEX_SCREEN_PTR ← (byte*~) plexSetScreen::$0 + to:plexSetScreen::@return +plexSetScreen::@return: scope:[plexSetScreen] from plexSetScreen + return + to:@return +@25: scope:[] from @24 + to:@26 +plexSort: scope:[plexSort] from + (byte/signed word/word/dword/signed dword~) plexSort::$0 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) plexSort::m ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plexSort::@1 +plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 + (byte/signed word/word/dword/signed dword~) plexSort::$1 ← (byte) plexSort::m + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::nxt_idx ← *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte/signed word/word/dword/signed dword~) plexSort::$1) + (byte) plexSort::nxt_y ← *((byte[PLEX_COUNT]) PLEX_YPOS + (byte) plexSort::nxt_idx) + (bool~) plexSort::$2 ← (byte) plexSort::nxt_y < *((byte[PLEX_COUNT]) PLEX_YPOS + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::m)) + (bool~) plexSort::$3 ← ! (bool~) plexSort::$2 + if((bool~) plexSort::$3) goto plexSort::@2 + to:plexSort::@4 +plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 + (byte) plexSort::m ← (byte) plexSort::m + rangenext(0,plexSort::$0) + (bool~) plexSort::$8 ← (byte) plexSort::m != rangelast(0,plexSort::$0) + if((bool~) plexSort::$8) goto plexSort::@1 + to:plexSort::@6 +plexSort::@4: scope:[plexSort] from plexSort::@1 + (byte) plexSort::s ← (byte) plexSort::m + to:plexSort::@3 +plexSort::@3: scope:[plexSort] from plexSort::@3 plexSort::@4 + (byte/signed word/word/dword/signed dword~) plexSort::$4 ← (byte) plexSort::s + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte/signed word/word/dword/signed dword~) plexSort::$4) ← *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::s) + (byte) plexSort::s ← -- (byte) plexSort::s + (bool~) plexSort::$5 ← (byte) plexSort::s != (byte/word/signed word/dword/signed dword) 255 + (bool~) plexSort::$6 ← (byte) plexSort::nxt_y < *((byte[PLEX_COUNT]) PLEX_YPOS + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::s)) + (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 + if((bool~) plexSort::$7) goto plexSort::@3 + to:plexSort::@5 +plexSort::@5: scope:[plexSort] from plexSort::@3 + (byte) plexSort::s ← ++ (byte) plexSort::s + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plexSort::s) ← (byte) plexSort::nxt_idx + to:plexSort::@2 +plexSort::@6: scope:[plexSort] from plexSort::@2 + (byte) plex_show_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_msb ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:plexSort::@return +plexSort::@return: scope:[plexSort] from plexSort::@6 + return + to:@return +@26: scope:[] from @25 + to:@27 +plexShowSprite: scope:[plexShowSprite] from + (byte~) plexShowSprite::$0 ← (byte) plex_sprite_idx << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexShowSprite::plex_sprite_idx2 ← (byte~) plexShowSprite::$0 + *((byte*) SPRITES_YPOS + (byte) plexShowSprite::plex_sprite_idx2) ← *((byte[PLEX_COUNT]) PLEX_YPOS + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plex_show_idx)) + *((byte*) PLEX_SCREEN_PTR + (byte) plex_sprite_idx) ← *((byte[PLEX_COUNT]) PLEX_PTR + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plex_show_idx)) + (byte~) plexShowSprite::$1 ← *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plex_show_idx) << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexShowSprite::xpos_idx ← (byte~) plexShowSprite::$1 + (byte~) plexShowSprite::$2 ← < *((word[PLEX_COUNT]) PLEX_XPOS + (byte) plexShowSprite::xpos_idx) + *((byte*) SPRITES_XPOS + (byte) plexShowSprite::plex_sprite_idx2) ← (byte~) plexShowSprite::$2 + (byte~) plexShowSprite::$3 ← > *((word[PLEX_COUNT]) PLEX_XPOS + (byte) plexShowSprite::xpos_idx) + (bool~) plexShowSprite::$4 ← (byte~) plexShowSprite::$3 != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) plexShowSprite::$4) goto plexShowSprite::@1 + to:plexShowSprite::@4 +plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::@5 + *((byte*) SPRITES_XMSB) ← *((byte*) SPRITES_XMSB) | (byte) plex_sprite_msb + to:plexShowSprite::@2 +plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite + (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb + *((byte*) SPRITES_XMSB) ← *((byte*) SPRITES_XMSB) & (byte/word/dword~) plexShowSprite::$5 + to:plexShowSprite::@2 +plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@4 + (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 ← (byte) plex_sprite_idx + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/word/dword~) plexShowSprite::$7 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) plex_sprite_idx ← (byte/word/dword~) plexShowSprite::$7 + (byte) plex_show_idx ← ++ (byte) plex_show_idx + (byte) plex_sprite_msb ← (byte) plex_sprite_msb << (byte/signed byte/word/signed word/dword/signed dword) 1 + (bool~) plexShowSprite::$8 ← (byte) plex_sprite_msb == (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) plexShowSprite::$9 ← ! (bool~) plexShowSprite::$8 + if((bool~) plexShowSprite::$9) goto plexShowSprite::@3 + to:plexShowSprite::@6 +plexShowSprite::@5: scope:[plexShowSprite] from + to:plexShowSprite::@1 +plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@6 + to:plexShowSprite::@return +plexShowSprite::@6: scope:[plexShowSprite] from plexShowSprite::@2 + (byte) plex_sprite_msb ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:plexShowSprite::@3 +plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@3 + return + to:@return +@27: scope:[] from @26 + to:@28 +plexShowNextYpos: scope:[plexShowNextYpos] from + (byte) plexShowNextYpos::return ← *((byte[PLEX_COUNT]) PLEX_YPOS + *((byte[PLEX_COUNT]) PLEX_SORTED_IDX + (byte) plex_show_idx)) + to:plexShowNextYpos::@return +plexShowNextYpos::@return: scope:[plexShowNextYpos] from plexShowNextYpos plexShowNextYpos::@1 + (byte) plexShowNextYpos::return ← (byte) plexShowNextYpos::return + return (byte) plexShowNextYpos::return + to:@return +plexShowNextYpos::@1: scope:[plexShowNextYpos] from + to:plexShowNextYpos::@return +@28: scope:[] from @27 + (byte*) SPRITE ← ((byte*)) (word/signed word/dword/signed dword) 8192 + (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 + (byte*) YSIN ← ((byte*)) (word/signed word/dword/signed dword) 8448 + (word) YSIN_SIZE ← (word/signed word/dword/signed dword) 256 + kickasm(location (byte*) YSIN) {{ .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + }} + kickasm(location (byte*) SPRITE) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + }} + to:@29 +main: scope:[main] from + asm { sei } + (void~) main::$0 ← call init + (void~) main::$1 ← call loop + to:main::@return +main::@return: scope:[main] from main + return + to:@return +@29: scope:[] from @28 + to:@30 +init: scope:[init] from + (byte~) init::$0 ← (byte) VIC_DEN | (byte) VIC_RSEL + (byte/word/dword~) init::$1 ← (byte~) init::$0 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011) ← (byte/word/dword~) init::$1 + (void~) init::$2 ← call plexInit (byte*) SCREEN + (word) init::xp ← (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte/signed word/word/dword/signed dword~) init::$3 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) init::sx ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:init::@1 +init::@1: scope:[init] from init init::@1 + (byte*~) init::$4 ← (byte*) SPRITE / (byte/signed byte/word/signed word/dword/signed dword) 64 + (byte~) init::$5 ← ((byte)) (byte*~) init::$4 + *((byte[PLEX_COUNT]) PLEX_PTR + (byte) init::sx) ← (byte~) init::$5 + (byte~) init::$6 ← (byte) init::sx << (byte/signed byte/word/signed word/dword/signed dword) 1 + *((word[PLEX_COUNT]) PLEX_XPOS + (byte~) init::$6) ← (word) init::xp + (word) init::xp ← (word) init::xp + (byte/signed byte/word/signed word/dword/signed dword) 12 + (byte) init::sx ← (byte) init::sx + rangenext(0,init::$3) + (bool~) init::$7 ← (byte) init::sx != rangelast(0,init::$3) + if((bool~) init::$7) goto init::@1 + to:init::@3 +init::@3: scope:[init] from init::@1 + *((byte*) SPRITES_ENABLE) ← (byte/word/signed word/dword/signed dword) 255 + (byte) init::ss ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:init::@2 +init::@2: scope:[init] from init::@2 init::@3 + *((byte*) SPRITES_COLS + (byte) init::ss) ← (byte) GREEN + (byte) init::ss ← (byte) init::ss + rangenext(0,7) + (bool~) init::$8 ← (byte) init::ss != rangelast(0,7) + if((bool~) init::$8) goto init::@2 + to:init::@4 +init::@4: scope:[init] from init::@2 + to:init::@return +init::@return: scope:[init] from init::@4 + return + to:@return +@30: scope:[] from @29 + to:@31 +loop: scope:[loop] from + (byte) loop::sin_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:loop::@1 +loop::@1: scope:[loop] from loop loop::@23 + if(true) goto loop::@2 + to:loop::@13 +loop::@2: scope:[loop] from loop::@1 loop::@14 + to:loop::@4 +loop::@13: scope:[loop] from loop::@1 + to:loop::@3 +loop::@3: scope:[loop] from loop::@13 loop::@24 + to:loop::@return +loop::@14: scope:[loop] from + to:loop::@2 +loop::@4: scope:[loop] from loop::@2 loop::@5 + (bool~) loop::$0 ← *((byte*) RASTER) != (byte/word/signed word/dword/signed dword) 255 + if((bool~) loop::$0) goto loop::@5 + to:loop::@15 +loop::@5: scope:[loop] from loop::@16 loop::@4 + to:loop::@4 +loop::@15: scope:[loop] from loop::@4 + to:loop::@6 +loop::@6: scope:[loop] from loop::@15 loop::@17 + *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) + (byte) loop::y_idx ← (byte) loop::sin_idx + (byte/signed word/word/dword/signed dword~) loop::$1 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) loop::sy ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:loop::@7 +loop::@16: scope:[loop] from + to:loop::@5 +loop::@17: scope:[loop] from + to:loop::@6 +loop::@7: scope:[loop] from loop::@6 loop::@7 + *((byte[PLEX_COUNT]) PLEX_YPOS + (byte) loop::sy) ← *((byte*) YSIN + (byte) loop::y_idx) + (byte) loop::y_idx ← (byte) loop::y_idx + (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) loop::sy ← (byte) loop::sy + rangenext(0,loop::$1) + (bool~) loop::$2 ← (byte) loop::sy != rangelast(0,loop::$1) + if((bool~) loop::$2) goto loop::@7 + to:loop::@18 +loop::@18: scope:[loop] from loop::@7 + (byte) loop::sin_idx ← (byte) loop::sin_idx + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) + (void~) loop::$3 ← call plexSort + *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) + (byte) loop::ss ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:loop::@8 +loop::@8: scope:[loop] from loop::@18 loop::@8 + (void~) loop::$4 ← call plexShowSprite + (byte) loop::ss ← (byte) loop::ss + rangenext(0,7) + (bool~) loop::$5 ← (byte) loop::ss != rangelast(0,7) + if((bool~) loop::$5) goto loop::@8 + to:loop::@19 +loop::@19: scope:[loop] from loop::@8 + (byte/signed word/word/dword/signed dword~) loop::$6 ← (byte) PLEX_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) loop::ss2 ← (byte/signed byte/word/signed word/dword/signed dword) 8 + to:loop::@9 +loop::@9: scope:[loop] from loop::@12 loop::@19 + *((byte*) BORDERCOL) ← (byte) BLACK + (byte~) loop::$7 ← call plexShowNextYpos + (byte/signed word/word/dword/signed dword~) loop::$8 ← (byte~) loop::$7 - (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) loop::rasterY ← (byte/signed word/word/dword/signed dword~) loop::$8 + to:loop::@10 +loop::@10: scope:[loop] from loop::@11 loop::@9 + (bool~) loop::$9 ← *((byte*) RASTER) < (byte) loop::rasterY + if((bool~) loop::$9) goto loop::@11 + to:loop::@20 +loop::@11: scope:[loop] from loop::@10 loop::@21 + to:loop::@10 +loop::@20: scope:[loop] from loop::@10 + to:loop::@12 +loop::@12: scope:[loop] from loop::@20 loop::@22 + *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL) + (void~) loop::$10 ← call plexShowSprite + (byte) loop::ss2 ← (byte) loop::ss2 + rangenext(8,loop::$6) + (bool~) loop::$11 ← (byte) loop::ss2 != rangelast(8,loop::$6) + if((bool~) loop::$11) goto loop::@9 + to:loop::@23 +loop::@21: scope:[loop] from + to:loop::@11 +loop::@22: scope:[loop] from + to:loop::@12 +loop::@23: scope:[loop] from loop::@12 + *((byte*) BORDERCOL) ← (byte) BLACK + to:loop::@1 +loop::@24: scope:[loop] from + to:loop::@3 +loop::@return: scope:[loop] from loop::@3 + return + to:@return +@31: scope:[] from @30 + call main + to:@end +@end: scope:[] from @31 + +Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Inlined call call plexSetScreen (byte*) plexInit::screen +Inlined call (byte~) loop::$7 ← call plexShowNextYpos +Removing unused procedure toD018 +Removing unused procedure toDd00 +Removing unused procedure vicSelectGfxBank +Removing unused procedure div8s +Removing unused procedure div16s +Removing unused procedure mul8s +Removing unused procedure mul8su +Removing unused procedure sin16s_gen +Removing unused procedure sin16s_gen2 +Removing unused procedure sin8s_gen +Removing unused procedure plexSetScreen +Removing unused procedure plexShowNextYpos +Removing unused procedure div8u +Removing unused procedure div16u +Removing unused procedure div32u16u +Removing unused procedure divr16s +Removing unused procedure mul16s +Removing unused procedure sin16s +Removing unused procedure sin8s +Removing unused procedure divr8u +Removing unused procedure divr16u +Removing unused procedure mulu16_sel +Removing unused procedure mulu8_sel +Removing unused procedure mul8u +Removing unused procedure mul16u +Eliminating unused variable (byte*) PROCPORT_DDR and assignment [0] (byte*) PROCPORT_DDR ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (byte) PROCPORT_DDR_MEMORY_MASK and assignment [1] (byte) PROCPORT_DDR_MEMORY_MASK ← (byte/signed byte/word/signed word/dword/signed dword) 7 +Eliminating unused variable (byte*) PROCPORT and assignment [2] (byte*) PROCPORT ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1 +Eliminating unused variable (byte) PROCPORT_RAM_ALL and assignment [3] (byte) PROCPORT_RAM_ALL ← (byte/signed byte/word/signed word/dword/signed dword) 48 +Eliminating unused variable (byte) PROCPORT_RAM_IO and assignment [4] (byte) PROCPORT_RAM_IO ← (byte/signed byte/word/signed word/dword/signed dword) 53 +Eliminating unused variable (byte) PROCPORT_RAM_CHARROM and assignment [5] (byte) PROCPORT_RAM_CHARROM ← (byte/signed byte/word/signed word/dword/signed dword) 49 +Eliminating unused variable (byte) PROCPORT_KERNEL_IO and assignment [6] (byte) PROCPORT_KERNEL_IO ← (byte/signed byte/word/signed word/dword/signed dword) 54 +Eliminating unused variable (byte) PROCPORT_BASIC_KERNEL_IO and assignment [7] (byte) PROCPORT_BASIC_KERNEL_IO ← (byte/signed byte/word/signed word/dword/signed dword) 55 +Eliminating unused variable (byte*) CHARGEN and assignment [8] (byte*) CHARGEN ← ((byte*)) (word/dword/signed dword) 53248 +Eliminating unused variable (byte*) SPRITES_EXPAND_Y and assignment [14] (byte*) SPRITES_EXPAND_Y ← ((byte*)) (word/dword/signed dword) 53271 +Eliminating unused variable (byte*) SPRITES_PRIORITY and assignment [15] (byte*) SPRITES_PRIORITY ← ((byte*)) (word/dword/signed dword) 53275 +Eliminating unused variable (byte*) SPRITES_MC and assignment [16] (byte*) SPRITES_MC ← ((byte*)) (word/dword/signed dword) 53276 +Eliminating unused variable (byte*) SPRITES_EXPAND_X and assignment [17] (byte*) SPRITES_EXPAND_X ← ((byte*)) (word/dword/signed dword) 53277 +Eliminating unused variable (byte*) BGCOL and assignment [19] (byte*) BGCOL ← ((byte*)) (word/dword/signed dword) 53281 +Eliminating unused variable (byte*) BGCOL1 and assignment [20] (byte*) BGCOL1 ← ((byte*)) (word/dword/signed dword) 53281 +Eliminating unused variable (byte*) BGCOL2 and assignment [21] (byte*) BGCOL2 ← ((byte*)) (word/dword/signed dword) 53282 +Eliminating unused variable (byte*) BGCOL3 and assignment [22] (byte*) BGCOL3 ← ((byte*)) (word/dword/signed dword) 53283 +Eliminating unused variable (byte*) BGCOL4 and assignment [23] (byte*) BGCOL4 ← ((byte*)) (word/dword/signed dword) 53284 +Eliminating unused variable (byte*) SPRITES_MC1 and assignment [24] (byte*) SPRITES_MC1 ← ((byte*)) (word/dword/signed dword) 53285 +Eliminating unused variable (byte*) SPRITES_MC2 and assignment [25] (byte*) SPRITES_MC2 ← ((byte*)) (word/dword/signed dword) 53286 +Eliminating unused variable (byte*) VIC_CONTROL and assignment [27] (byte*) VIC_CONTROL ← ((byte*)) (word/dword/signed dword) 53265 +Eliminating unused variable (byte) VIC_RST8 and assignment [29] (byte) VIC_RST8 ← (byte/word/signed word/dword/signed dword) 128 +Eliminating unused variable (byte) VIC_ECM and assignment [30] (byte) VIC_ECM ← (byte/signed byte/word/signed word/dword/signed dword) 64 +Eliminating unused variable (byte) VIC_BMM and assignment [31] (byte) VIC_BMM ← (byte/signed byte/word/signed word/dword/signed dword) 32 +Eliminating unused variable (byte*) VIC_CONTROL2 and assignment [34] (byte*) VIC_CONTROL2 ← ((byte*)) (word/dword/signed dword) 53270 +Eliminating unused variable (byte*) D016 and assignment [35] (byte*) D016 ← ((byte*)) (word/dword/signed dword) 53270 +Eliminating unused variable (byte) VIC_MCM and assignment [36] (byte) VIC_MCM ← (byte/signed byte/word/signed word/dword/signed dword) 16 +Eliminating unused variable (byte) VIC_CSEL and assignment [37] (byte) VIC_CSEL ← (byte/signed byte/word/signed word/dword/signed dword) 8 +Eliminating unused variable (byte*) D018 and assignment [38] (byte*) D018 ← ((byte*)) (word/dword/signed dword) 53272 +Eliminating unused variable (byte*) VIC_MEMORY and assignment [39] (byte*) VIC_MEMORY ← ((byte*)) (word/dword/signed dword) 53272 +Eliminating unused variable (byte*) COLS and assignment [40] (byte*) COLS ← ((byte*)) (word/dword/signed dword) 55296 +Eliminating unused variable (byte*) CIA1_PORT_A and assignment [41] (byte*) CIA1_PORT_A ← ((byte*)) (word/dword/signed dword) 56320 +Eliminating unused variable (byte*) CIA1_PORT_B and assignment [42] (byte*) CIA1_PORT_B ← ((byte*)) (word/dword/signed dword) 56321 +Eliminating unused variable (byte*) CIA1_PORT_A_DDR and assignment [43] (byte*) CIA1_PORT_A_DDR ← ((byte*)) (word/dword/signed dword) 56322 +Eliminating unused variable (byte*) CIA1_PORT_B_DDR and assignment [44] (byte*) CIA1_PORT_B_DDR ← ((byte*)) (word/dword/signed dword) 56323 +Eliminating unused variable (byte*) CIA2_PORT_A and assignment [45] (byte*) CIA2_PORT_A ← ((byte*)) (word/dword/signed dword) 56576 +Eliminating unused variable (byte*) CIA2_PORT_B and assignment [46] (byte*) CIA2_PORT_B ← ((byte*)) (word/dword/signed dword) 56577 +Eliminating unused variable (byte*) CIA2_PORT_A_DDR and assignment [47] (byte*) CIA2_PORT_A_DDR ← ((byte*)) (word/dword/signed dword) 56578 +Eliminating unused variable (byte*) CIA2_PORT_B_DDR and assignment [48] (byte*) CIA2_PORT_B_DDR ← ((byte*)) (word/dword/signed dword) 56579 +Eliminating unused variable (byte) WHITE and assignment [50] (byte) WHITE ← (byte/signed byte/word/signed word/dword/signed dword) 1 +Eliminating unused variable (byte) RED and assignment [51] (byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2 +Eliminating unused variable (byte) CYAN and assignment [52] (byte) CYAN ← (byte/signed byte/word/signed word/dword/signed dword) 3 +Eliminating unused variable (byte) PURPLE and assignment [53] (byte) PURPLE ← (byte/signed byte/word/signed word/dword/signed dword) 4 +Eliminating unused variable (byte) BLUE and assignment [55] (byte) BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 6 +Eliminating unused variable (byte) YELLOW and assignment [56] (byte) YELLOW ← (byte/signed byte/word/signed word/dword/signed dword) 7 +Eliminating unused variable (byte) ORANGE and assignment [57] (byte) ORANGE ← (byte/signed byte/word/signed word/dword/signed dword) 8 +Eliminating unused variable (byte) BROWN and assignment [58] (byte) BROWN ← (byte/signed byte/word/signed word/dword/signed dword) 9 +Eliminating unused variable (byte) PINK and assignment [59] (byte) PINK ← (byte/signed byte/word/signed word/dword/signed dword) 10 +Eliminating unused variable (byte) DARK_GREY and assignment [60] (byte) DARK_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 11 +Eliminating unused variable (byte) GREY and assignment [61] (byte) GREY ← (byte/signed byte/word/signed word/dword/signed dword) 12 +Eliminating unused variable (byte) LIGHT_GREEN and assignment [62] (byte) LIGHT_GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 13 +Eliminating unused variable (byte) LIGHT_BLUE and assignment [63] (byte) LIGHT_BLUE ← (byte/signed byte/word/signed word/dword/signed dword) 14 +Eliminating unused variable (byte) LIGHT_GREY and assignment [64] (byte) LIGHT_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 15 +Eliminating unused variable (byte) rem8u and assignment [65] (byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (word) rem16u and assignment [66] (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (signed byte) rem8s and assignment [67] (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (signed word) rem16s and assignment [68] (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (dword) PI2_u4f28 and assignment [69] (dword) PI2_u4f28 ← (dword/signed dword) 1686629713 +Eliminating unused variable (dword) PI_u4f28 and assignment [70] (dword) PI_u4f28 ← (dword/signed dword) 843314857 +Eliminating unused variable (dword) PI_HALF_u4f28 and assignment [71] (dword) PI_HALF_u4f28 ← (dword/signed dword) 421657428 +Eliminating unused variable (word) PI2_u4f12 and assignment [72] (word) PI2_u4f12 ← (word/signed word/dword/signed dword) 25736 +Eliminating unused variable (word) PI_u4f12 and assignment [73] (word) PI_u4f12 ← (word/signed word/dword/signed dword) 12868 +Eliminating unused variable (word) PI_HALF_u4f12 and assignment [74] (word) PI_HALF_u4f12 ← (word/signed word/dword/signed dword) 6434 +Eliminating unused variable (word) YSIN_SIZE and assignment [147] (word) YSIN_SIZE ← (word/signed word/dword/signed dword) 256 +Eliminating unused variable - keeping the call (void~) main::$0 +Eliminating unused variable - keeping the call (void~) main::$1 +Eliminating unused variable - keeping the call (void~) init::$2 +Eliminating unused variable - keeping the call (void~) loop::$3 +Eliminating unused variable - keeping the call (void~) loop::$4 +Eliminating unused variable - keeping the call (void~) loop::$10 +Removing empty block @1 +Removing empty block @2 +Removing empty block @3 +Removing empty block @4 +Removing empty block @5 +Removing empty block @6 +Removing empty block @7 +Removing empty block @8 +Removing empty block @9 +Removing empty block @10 +Removing empty block @11 +Removing empty block @12 +Removing empty block @13 +Removing empty block @14 +Removing empty block @15 +Removing empty block @16 +Removing empty block @17 +Removing empty block @18 +Removing empty block @19 +Removing empty block @20 +Removing empty block @21 +Removing empty block @22 +Removing empty block plexInit::plexSetScreen1_@return +Removing empty block plexInit::@2 +Removing empty block @24 +Removing empty block @25 +Removing empty block @26 +Removing empty block plexShowSprite::@5 +Removing empty block @27 +Removing empty block @29 +Removing empty block init::@4 +Removing empty block @30 +Removing empty block loop::@13 +Removing empty block loop::@3 +Removing empty block loop::@14 +Removing empty block loop::@15 +Removing empty block loop::@16 +Removing empty block loop::@17 +Removing empty block loop::plexShowNextYpos1_@1 +Removing empty block loop::@20 +Removing empty block loop::@21 +Removing empty block loop::@22 +Removing empty block loop::@24 +PROCEDURE MODIFY VARIABLE ANALYSIS +plexInit modifies PLEX_SCREEN_PTR +plexSort modifies plex_show_idx +plexSort modifies plex_sprite_idx +plexSort modifies plex_sprite_msb +plexShowSprite modifies plex_sprite_idx +plexShowSprite modifies plex_show_idx +plexShowSprite modifies plex_sprite_msb +main modifies PLEX_SCREEN_PTR +main modifies plex_show_idx +main modifies plex_sprite_idx +main modifies plex_sprite_msb +init modifies PLEX_SCREEN_PTR +loop modifies plex_show_idx +loop modifies plex_sprite_idx +loop modifies plex_sprite_msb + +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... + +CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN +@begin: scope:[] from + (byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248 + (byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249 + (byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264 + (byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266 + (byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269 + (byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280 + (byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287 + (byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265 + (byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16 + (byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5 + to:@23 +@23: scope:[] from @begin + (byte) PLEX_COUNT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 24 + (word[PLEX_COUNT#0]) PLEX_XPOS#0 ← { fill( PLEX_COUNT#0, 0) } + (byte[PLEX_COUNT#0]) PLEX_YPOS#0 ← { fill( PLEX_COUNT#0, 0) } + (byte[PLEX_COUNT#0]) PLEX_PTR#0 ← { fill( PLEX_COUNT#0, 0) } + (word/signed word/dword/signed dword~) $0 ← (word/signed word/dword/signed dword) 1024 + (word/signed word/dword/signed dword) 1016 + (byte*) PLEX_SCREEN_PTR#0 ← ((byte*)) (word/signed word/dword/signed dword~) $0 + (byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 ← { fill( PLEX_COUNT#0, 0) } + (byte) plex_show_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_msb#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:@28 +plexInit: scope:[plexInit] from init + (byte*) plexInit::screen#1 ← phi( init/(byte*) plexInit::screen#0 ) + (byte*) plexInit::plexSetScreen1_screen#0 ← (byte*) plexInit::screen#1 + to:plexInit::plexSetScreen1 +plexInit::plexSetScreen1: scope:[plexInit] from plexInit + (byte*) plexInit::plexSetScreen1_screen#1 ← phi( plexInit/(byte*) plexInit::plexSetScreen1_screen#0 ) + (byte*) plexInit::plexSetScreen1_$0#0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (word/signed word/dword/signed dword) 1016 + (byte*) PLEX_SCREEN_PTR#1 ← (byte*) plexInit::plexSetScreen1_$0#0 + to:plexInit::@3 +plexInit::@3: scope:[plexInit] from plexInit::plexSetScreen1 + (byte*) PLEX_SCREEN_PTR#23 ← phi( plexInit::plexSetScreen1/(byte*) PLEX_SCREEN_PTR#1 ) + (byte/signed word/word/dword/signed dword~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexInit::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plexInit::@1 +plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@3 + (byte*) PLEX_SCREEN_PTR#15 ← phi( plexInit::@1/(byte*) PLEX_SCREEN_PTR#15 plexInit::@3/(byte*) PLEX_SCREEN_PTR#23 ) + (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::@3/(byte) plexInit::i#0 ) + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 + (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,plexInit::$1) + (bool~) plexInit::$2 ← (byte) plexInit::i#1 != rangelast(0,plexInit::$1) + if((bool~) plexInit::$2) goto plexInit::@1 + to:plexInit::@return +plexInit::@return: scope:[plexInit] from plexInit::@1 + (byte*) PLEX_SCREEN_PTR#8 ← phi( plexInit::@1/(byte*) PLEX_SCREEN_PTR#15 ) + (byte*) PLEX_SCREEN_PTR#2 ← (byte*) PLEX_SCREEN_PTR#8 + return + to:@return +plexSort: scope:[plexSort] from loop::@18 + (byte/signed word/word/dword/signed dword~) plexSort::$0 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) plexSort::m#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:plexSort::@1 +plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 + (byte) plexSort::m#2 ← phi( plexSort/(byte) plexSort::m#0 plexSort::@2/(byte) plexSort::m#1 ) + (byte/signed word/word/dword/signed dword~) plexSort::$1 ← (byte) plexSort::m#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::nxt_idx#0 ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte/signed word/word/dword/signed dword~) plexSort::$1) + (byte) plexSort::nxt_y#0 ← *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) + (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2)) + (bool~) plexSort::$3 ← ! (bool~) plexSort::$2 + if((bool~) plexSort::$3) goto plexSort::@2 + to:plexSort::@4 +plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 + (byte) plexSort::m#3 ← phi( plexSort::@1/(byte) plexSort::m#2 plexSort::@5/(byte) plexSort::m#5 ) + (byte) plexSort::m#1 ← (byte) plexSort::m#3 + rangenext(0,plexSort::$0) + (bool~) plexSort::$8 ← (byte) plexSort::m#1 != rangelast(0,plexSort::$0) + if((bool~) plexSort::$8) goto plexSort::@1 + to:plexSort::@6 +plexSort::@4: scope:[plexSort] from plexSort::@1 + (byte) plexSort::nxt_idx#3 ← phi( plexSort::@1/(byte) plexSort::nxt_idx#0 ) + (byte) plexSort::nxt_y#2 ← phi( plexSort::@1/(byte) plexSort::nxt_y#0 ) + (byte) plexSort::m#4 ← phi( plexSort::@1/(byte) plexSort::m#2 ) + (byte) plexSort::s#0 ← (byte) plexSort::m#4 + to:plexSort::@3 +plexSort::@3: scope:[plexSort] from plexSort::@3 plexSort::@4 + (byte) plexSort::m#6 ← phi( plexSort::@3/(byte) plexSort::m#6 plexSort::@4/(byte) plexSort::m#4 ) + (byte) plexSort::nxt_idx#2 ← phi( plexSort::@3/(byte) plexSort::nxt_idx#2 plexSort::@4/(byte) plexSort::nxt_idx#3 ) + (byte) plexSort::nxt_y#1 ← phi( plexSort::@3/(byte) plexSort::nxt_y#1 plexSort::@4/(byte) plexSort::nxt_y#2 ) + (byte) plexSort::s#3 ← phi( plexSort::@3/(byte) plexSort::s#1 plexSort::@4/(byte) plexSort::s#0 ) + (byte/signed word/word/dword/signed dword~) plexSort::$4 ← (byte) plexSort::s#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte/signed word/word/dword/signed dword~) plexSort::$4) ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) + (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 + (bool~) plexSort::$5 ← (byte) plexSort::s#1 != (byte/word/signed word/dword/signed dword) 255 + (bool~) plexSort::$6 ← (byte) plexSort::nxt_y#1 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1)) + (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 + if((bool~) plexSort::$7) goto plexSort::@3 + to:plexSort::@5 +plexSort::@5: scope:[plexSort] from plexSort::@3 + (byte) plexSort::m#5 ← phi( plexSort::@3/(byte) plexSort::m#6 ) + (byte) plexSort::nxt_idx#1 ← phi( plexSort::@3/(byte) plexSort::nxt_idx#2 ) + (byte) plexSort::s#4 ← phi( plexSort::@3/(byte) plexSort::s#1 ) + (byte) plexSort::s#2 ← ++ (byte) plexSort::s#4 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#1 + to:plexSort::@2 +plexSort::@6: scope:[plexSort] from plexSort::@2 + (byte) plex_show_idx#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_idx#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) plex_sprite_msb#1 ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:plexSort::@return +plexSort::@return: scope:[plexSort] from plexSort::@6 + (byte) plex_sprite_msb#13 ← phi( plexSort::@6/(byte) plex_sprite_msb#1 ) + (byte) plex_sprite_idx#12 ← phi( plexSort::@6/(byte) plex_sprite_idx#1 ) + (byte) plex_show_idx#12 ← phi( plexSort::@6/(byte) plex_show_idx#1 ) + (byte) plex_show_idx#2 ← (byte) plex_show_idx#12 + (byte) plex_sprite_idx#2 ← (byte) plex_sprite_idx#12 + (byte) plex_sprite_msb#2 ← (byte) plex_sprite_msb#13 + return + to:@return +plexShowSprite: scope:[plexShowSprite] from loop::@12 loop::@8 + (byte) plex_sprite_msb#25 ← phi( loop::@12/(byte) plex_sprite_msb#30 loop::@8/(byte) plex_sprite_msb#29 ) + (byte*) PLEX_SCREEN_PTR#9 ← phi( loop::@12/(byte*) PLEX_SCREEN_PTR#16 loop::@8/(byte*) PLEX_SCREEN_PTR#17 ) + (byte) plex_show_idx#13 ← phi( loop::@12/(byte) plex_show_idx#24 loop::@8/(byte) plex_show_idx#25 ) + (byte) plex_sprite_idx#13 ← phi( loop::@12/(byte) plex_sprite_idx#23 loop::@8/(byte) plex_sprite_idx#24 ) + (byte~) plexShowSprite::$0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte~) plexShowSprite::$0 + *((byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) + *((byte*) PLEX_SCREEN_PTR#9 + (byte) plex_sprite_idx#13) ← *((byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) + (byte~) plexShowSprite::$1 ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexShowSprite::xpos_idx#0 ← (byte~) plexShowSprite::$1 + (byte~) plexShowSprite::$2 ← < *((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) + *((byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 + (byte~) plexShowSprite::$3 ← > *((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) + (bool~) plexShowSprite::$4 ← (byte~) plexShowSprite::$3 != (byte/signed byte/word/signed word/dword/signed dword) 0 + if((bool~) plexShowSprite::$4) goto plexShowSprite::@1 + to:plexShowSprite::@4 +plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite + (byte) plex_show_idx#26 ← phi( plexShowSprite/(byte) plex_show_idx#13 ) + (byte) plex_sprite_idx#25 ← phi( plexShowSprite/(byte) plex_sprite_idx#13 ) + (byte) plex_sprite_msb#14 ← phi( plexShowSprite/(byte) plex_sprite_msb#25 ) + *((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 + to:plexShowSprite::@2 +plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite + (byte) plex_show_idx#27 ← phi( plexShowSprite/(byte) plex_show_idx#13 ) + (byte) plex_sprite_idx#26 ← phi( plexShowSprite/(byte) plex_sprite_idx#13 ) + (byte) plex_sprite_msb#15 ← phi( plexShowSprite/(byte) plex_sprite_msb#25 ) + (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#15 + *((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 + to:plexShowSprite::@2 +plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@4 + (byte) plex_sprite_msb#16 ← phi( plexShowSprite::@1/(byte) plex_sprite_msb#14 plexShowSprite::@4/(byte) plex_sprite_msb#15 ) + (byte) plex_show_idx#14 ← phi( plexShowSprite::@1/(byte) plex_show_idx#26 plexShowSprite::@4/(byte) plex_show_idx#27 ) + (byte) plex_sprite_idx#14 ← phi( plexShowSprite::@1/(byte) plex_sprite_idx#25 plexShowSprite::@4/(byte) plex_sprite_idx#26 ) + (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 ← (byte) plex_sprite_idx#14 + (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte/word/dword~) plexShowSprite::$7 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 + (byte) plex_sprite_idx#3 ← (byte/word/dword~) plexShowSprite::$7 + (byte) plex_show_idx#3 ← ++ (byte) plex_show_idx#14 + (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#16 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (bool~) plexShowSprite::$8 ← (byte) plex_sprite_msb#3 == (byte/signed byte/word/signed word/dword/signed dword) 0 + (bool~) plexShowSprite::$9 ← ! (bool~) plexShowSprite::$8 + if((bool~) plexShowSprite::$9) goto plexShowSprite::@3 + to:plexShowSprite::@6 +plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@2 + (byte) plex_sprite_msb#26 ← phi( plexShowSprite::@2/(byte) plex_sprite_msb#3 ) + (byte) plex_show_idx#28 ← phi( plexShowSprite::@2/(byte) plex_show_idx#3 ) + (byte) plex_sprite_idx#27 ← phi( plexShowSprite::@2/(byte) plex_sprite_idx#3 ) + to:plexShowSprite::@return +plexShowSprite::@6: scope:[plexShowSprite] from plexShowSprite::@2 + (byte) plex_show_idx#29 ← phi( plexShowSprite::@2/(byte) plex_show_idx#3 ) + (byte) plex_sprite_idx#28 ← phi( plexShowSprite::@2/(byte) plex_sprite_idx#3 ) + (byte) plex_sprite_msb#4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 + to:plexShowSprite::@return +plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@3 plexShowSprite::@6 + (byte) plex_sprite_msb#17 ← phi( plexShowSprite::@3/(byte) plex_sprite_msb#26 plexShowSprite::@6/(byte) plex_sprite_msb#4 ) + (byte) plex_show_idx#15 ← phi( plexShowSprite::@3/(byte) plex_show_idx#28 plexShowSprite::@6/(byte) plex_show_idx#29 ) + (byte) plex_sprite_idx#15 ← phi( plexShowSprite::@3/(byte) plex_sprite_idx#27 plexShowSprite::@6/(byte) plex_sprite_idx#28 ) + (byte) plex_sprite_idx#4 ← (byte) plex_sprite_idx#15 + (byte) plex_show_idx#4 ← (byte) plex_show_idx#15 + (byte) plex_sprite_msb#5 ← (byte) plex_sprite_msb#17 + return + to:@return +@28: scope:[] from @23 + (byte) plex_sprite_msb#38 ← phi( @23/(byte) plex_sprite_msb#0 ) + (byte) plex_sprite_idx#38 ← phi( @23/(byte) plex_sprite_idx#0 ) + (byte) plex_show_idx#41 ← phi( @23/(byte) plex_show_idx#0 ) + (byte*) PLEX_SCREEN_PTR#28 ← phi( @23/(byte*) PLEX_SCREEN_PTR#0 ) + (byte*) SPRITE#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192 + (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 + (byte*) YSIN#0 ← ((byte*)) (word/signed word/dword/signed dword) 8448 + kickasm(location (byte*) YSIN#0) {{ .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + }} + kickasm(location (byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + }} + to:@31 +main: scope:[main] from @31 + (byte*) YSIN#11 ← phi( @31/(byte*) YSIN#13 ) + (byte*) SPRITE#4 ← phi( @31/(byte*) SPRITE#5 ) + (byte) plex_sprite_msb#33 ← phi( @31/(byte) plex_sprite_msb#32 ) + (byte) plex_sprite_idx#33 ← phi( @31/(byte) plex_sprite_idx#32 ) + (byte) plex_show_idx#35 ← phi( @31/(byte) plex_show_idx#34 ) + (byte*) SCREEN#2 ← phi( @31/(byte*) SCREEN#3 ) + (byte*) PLEX_SCREEN_PTR#18 ← phi( @31/(byte*) PLEX_SCREEN_PTR#22 ) + asm { sei } + call init + to:main::@1 +main::@1: scope:[main] from main + (byte*) YSIN#9 ← phi( main/(byte*) YSIN#11 ) + (byte) plex_sprite_msb#27 ← phi( main/(byte) plex_sprite_msb#33 ) + (byte) plex_sprite_idx#29 ← phi( main/(byte) plex_sprite_idx#33 ) + (byte) plex_show_idx#30 ← phi( main/(byte) plex_show_idx#35 ) + (byte*) PLEX_SCREEN_PTR#10 ← phi( main/(byte*) PLEX_SCREEN_PTR#6 ) + (byte*) PLEX_SCREEN_PTR#3 ← (byte*) PLEX_SCREEN_PTR#10 + call loop + to:main::@2 +main::@2: scope:[main] from main::@1 + (byte*) PLEX_SCREEN_PTR#19 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#3 ) + (byte) plex_sprite_msb#18 ← phi( main::@1/(byte) plex_sprite_msb#11 ) + (byte) plex_sprite_idx#16 ← phi( main::@1/(byte) plex_sprite_idx#10 ) + (byte) plex_show_idx#16 ← phi( main::@1/(byte) plex_show_idx#10 ) + (byte) plex_show_idx#5 ← (byte) plex_show_idx#16 + (byte) plex_sprite_idx#5 ← (byte) plex_sprite_idx#16 + (byte) plex_sprite_msb#6 ← (byte) plex_sprite_msb#18 + to:main::@return +main::@return: scope:[main] from main::@2 + (byte) plex_sprite_msb#19 ← phi( main::@2/(byte) plex_sprite_msb#6 ) + (byte) plex_sprite_idx#17 ← phi( main::@2/(byte) plex_sprite_idx#5 ) + (byte) plex_show_idx#17 ← phi( main::@2/(byte) plex_show_idx#5 ) + (byte*) PLEX_SCREEN_PTR#11 ← phi( main::@2/(byte*) PLEX_SCREEN_PTR#19 ) + (byte*) PLEX_SCREEN_PTR#4 ← (byte*) PLEX_SCREEN_PTR#11 + (byte) plex_show_idx#6 ← (byte) plex_show_idx#17 + (byte) plex_sprite_idx#6 ← (byte) plex_sprite_idx#17 + (byte) plex_sprite_msb#7 ← (byte) plex_sprite_msb#19 + return + to:@return +init: scope:[init] from main + (byte*) SPRITE#3 ← phi( main/(byte*) SPRITE#4 ) + (byte*) PLEX_SCREEN_PTR#20 ← phi( main/(byte*) PLEX_SCREEN_PTR#18 ) + (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 ) + (byte~) init::$0 ← (byte) VIC_DEN#0 | (byte) VIC_RSEL#0 + (byte/word/dword~) init::$1 ← (byte~) init::$0 | (byte/signed byte/word/signed word/dword/signed dword) 3 + *((byte*) D011#0) ← (byte/word/dword~) init::$1 + (byte*) plexInit::screen#0 ← (byte*) SCREEN#1 + call plexInit + to:init::@5 +init::@5: scope:[init] from init + (byte*) SPRITE#2 ← phi( init/(byte*) SPRITE#3 ) + (byte*) PLEX_SCREEN_PTR#12 ← phi( init/(byte*) PLEX_SCREEN_PTR#2 ) + (byte*) PLEX_SCREEN_PTR#5 ← (byte*) PLEX_SCREEN_PTR#12 + (word) init::xp#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32 + (byte/signed word/word/dword/signed dword~) init::$3 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) init::sx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:init::@1 +init::@1: scope:[init] from init::@1 init::@5 + (byte*) PLEX_SCREEN_PTR#29 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#29 init::@5/(byte*) PLEX_SCREEN_PTR#5 ) + (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init::@5/(word) init::xp#0 ) + (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init::@5/(byte) init::sx#0 ) + (byte*) SPRITE#1 ← phi( init::@1/(byte*) SPRITE#1 init::@5/(byte*) SPRITE#2 ) + (byte*~) init::$4 ← (byte*) SPRITE#1 / (byte/signed byte/word/signed word/dword/signed dword) 64 + (byte~) init::$5 ← ((byte)) (byte*~) init::$4 + *((byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← (byte~) init::$5 + (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 + *((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 + (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 + (byte) init::sx#1 ← (byte) init::sx#2 + rangenext(0,init::$3) + (bool~) init::$7 ← (byte) init::sx#1 != rangelast(0,init::$3) + if((bool~) init::$7) goto init::@1 + to:init::@3 +init::@3: scope:[init] from init::@1 + (byte*) PLEX_SCREEN_PTR#24 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#29 ) + *((byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 + (byte) init::ss#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:init::@2 +init::@2: scope:[init] from init::@2 init::@3 + (byte*) PLEX_SCREEN_PTR#21 ← phi( init::@2/(byte*) PLEX_SCREEN_PTR#21 init::@3/(byte*) PLEX_SCREEN_PTR#24 ) + (byte) init::ss#2 ← phi( init::@2/(byte) init::ss#1 init::@3/(byte) init::ss#0 ) + *((byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (byte) GREEN#0 + (byte) init::ss#1 ← (byte) init::ss#2 + rangenext(0,7) + (bool~) init::$8 ← (byte) init::ss#1 != rangelast(0,7) + if((bool~) init::$8) goto init::@2 + to:init::@return +init::@return: scope:[init] from init::@2 + (byte*) PLEX_SCREEN_PTR#13 ← phi( init::@2/(byte*) PLEX_SCREEN_PTR#21 ) + (byte*) PLEX_SCREEN_PTR#6 ← (byte*) PLEX_SCREEN_PTR#13 + return + to:@return +loop: scope:[loop] from main::@1 + (byte*) PLEX_SCREEN_PTR#44 ← phi( main::@1/(byte*) PLEX_SCREEN_PTR#3 ) + (byte*) YSIN#7 ← phi( main::@1/(byte*) YSIN#9 ) + (byte) plex_sprite_msb#34 ← phi( main::@1/(byte) plex_sprite_msb#27 ) + (byte) plex_sprite_idx#34 ← phi( main::@1/(byte) plex_sprite_idx#29 ) + (byte) plex_show_idx#36 ← phi( main::@1/(byte) plex_show_idx#30 ) + (byte) loop::sin_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:loop::@1 +loop::@1: scope:[loop] from loop loop::@23 + (byte*) PLEX_SCREEN_PTR#43 ← phi( loop/(byte*) PLEX_SCREEN_PTR#44 loop::@23/(byte*) PLEX_SCREEN_PTR#45 ) + (byte*) YSIN#6 ← phi( loop/(byte*) YSIN#7 loop::@23/(byte*) YSIN#8 ) + (byte) loop::sin_idx#8 ← phi( loop/(byte) loop::sin_idx#0 loop::@23/(byte) loop::sin_idx#9 ) + (byte) plex_sprite_msb#31 ← phi( loop/(byte) plex_sprite_msb#34 loop::@23/(byte) plex_sprite_msb#35 ) + (byte) plex_sprite_idx#31 ← phi( loop/(byte) plex_sprite_idx#34 loop::@23/(byte) plex_sprite_idx#35 ) + (byte) plex_show_idx#33 ← phi( loop/(byte) plex_show_idx#36 loop::@23/(byte) plex_show_idx#37 ) + if(true) goto loop::@2 + to:loop::@return +loop::@2: scope:[loop] from loop::@1 + (byte*) PLEX_SCREEN_PTR#39 ← phi( loop::@1/(byte*) PLEX_SCREEN_PTR#43 ) + (byte) plex_sprite_msb#44 ← phi( loop::@1/(byte) plex_sprite_msb#31 ) + (byte) plex_sprite_idx#44 ← phi( loop::@1/(byte) plex_sprite_idx#31 ) + (byte) plex_show_idx#47 ← phi( loop::@1/(byte) plex_show_idx#33 ) + (byte*) YSIN#4 ← phi( loop::@1/(byte*) YSIN#6 ) + (byte) loop::sin_idx#6 ← phi( loop::@1/(byte) loop::sin_idx#8 ) + to:loop::@4 +loop::@4: scope:[loop] from loop::@2 loop::@5 + (byte*) PLEX_SCREEN_PTR#37 ← phi( loop::@2/(byte*) PLEX_SCREEN_PTR#39 loop::@5/(byte*) PLEX_SCREEN_PTR#40 ) + (byte) plex_sprite_msb#42 ← phi( loop::@2/(byte) plex_sprite_msb#44 loop::@5/(byte) plex_sprite_msb#45 ) + (byte) plex_sprite_idx#42 ← phi( loop::@2/(byte) plex_sprite_idx#44 loop::@5/(byte) plex_sprite_idx#45 ) + (byte) plex_show_idx#45 ← phi( loop::@2/(byte) plex_show_idx#47 loop::@5/(byte) plex_show_idx#48 ) + (byte*) YSIN#3 ← phi( loop::@2/(byte*) YSIN#4 loop::@5/(byte*) YSIN#5 ) + (byte) loop::sin_idx#4 ← phi( loop::@2/(byte) loop::sin_idx#6 loop::@5/(byte) loop::sin_idx#7 ) + (bool~) loop::$0 ← *((byte*) RASTER#0) != (byte/word/signed word/dword/signed dword) 255 + if((bool~) loop::$0) goto loop::@5 + to:loop::@6 +loop::@5: scope:[loop] from loop::@4 + (byte*) PLEX_SCREEN_PTR#40 ← phi( loop::@4/(byte*) PLEX_SCREEN_PTR#37 ) + (byte) plex_sprite_msb#45 ← phi( loop::@4/(byte) plex_sprite_msb#42 ) + (byte) plex_sprite_idx#45 ← phi( loop::@4/(byte) plex_sprite_idx#42 ) + (byte) plex_show_idx#48 ← phi( loop::@4/(byte) plex_show_idx#45 ) + (byte*) YSIN#5 ← phi( loop::@4/(byte*) YSIN#3 ) + (byte) loop::sin_idx#7 ← phi( loop::@4/(byte) loop::sin_idx#4 ) + to:loop::@4 +loop::@6: scope:[loop] from loop::@4 + (byte*) PLEX_SCREEN_PTR#35 ← phi( loop::@4/(byte*) PLEX_SCREEN_PTR#37 ) + (byte) plex_sprite_msb#39 ← phi( loop::@4/(byte) plex_sprite_msb#42 ) + (byte) plex_sprite_idx#39 ← phi( loop::@4/(byte) plex_sprite_idx#42 ) + (byte) plex_show_idx#42 ← phi( loop::@4/(byte) plex_show_idx#45 ) + (byte*) YSIN#2 ← phi( loop::@4/(byte*) YSIN#3 ) + (byte) loop::sin_idx#2 ← phi( loop::@4/(byte) loop::sin_idx#4 ) + *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0) + (byte) loop::y_idx#0 ← (byte) loop::sin_idx#2 + (byte/signed word/word/dword/signed dword~) loop::$1 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) loop::sy#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:loop::@7 +loop::@7: scope:[loop] from loop::@6 loop::@7 + (byte*) PLEX_SCREEN_PTR#33 ← phi( loop::@6/(byte*) PLEX_SCREEN_PTR#35 loop::@7/(byte*) PLEX_SCREEN_PTR#33 ) + (byte) plex_sprite_msb#36 ← phi( loop::@6/(byte) plex_sprite_msb#39 loop::@7/(byte) plex_sprite_msb#36 ) + (byte) plex_sprite_idx#36 ← phi( loop::@6/(byte) plex_sprite_idx#39 loop::@7/(byte) plex_sprite_idx#36 ) + (byte) plex_show_idx#38 ← phi( loop::@6/(byte) plex_show_idx#42 loop::@7/(byte) plex_show_idx#38 ) + (byte) loop::sin_idx#5 ← phi( loop::@6/(byte) loop::sin_idx#2 loop::@7/(byte) loop::sin_idx#5 ) + (byte) loop::sy#2 ← phi( loop::@6/(byte) loop::sy#0 loop::@7/(byte) loop::sy#1 ) + (byte) loop::y_idx#2 ← phi( loop::@6/(byte) loop::y_idx#0 loop::@7/(byte) loop::y_idx#1 ) + (byte*) YSIN#1 ← phi( loop::@6/(byte*) YSIN#2 loop::@7/(byte*) YSIN#1 ) + *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((byte*) YSIN#1 + (byte) loop::y_idx#2) + (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 + (byte) loop::sy#1 ← (byte) loop::sy#2 + rangenext(0,loop::$1) + (bool~) loop::$2 ← (byte) loop::sy#1 != rangelast(0,loop::$1) + if((bool~) loop::$2) goto loop::@7 + to:loop::@18 +loop::@18: scope:[loop] from loop::@7 + (byte*) YSIN#24 ← phi( loop::@7/(byte*) YSIN#1 ) + (byte*) PLEX_SCREEN_PTR#30 ← phi( loop::@7/(byte*) PLEX_SCREEN_PTR#33 ) + (byte) plex_sprite_msb#28 ← phi( loop::@7/(byte) plex_sprite_msb#36 ) + (byte) plex_sprite_idx#30 ← phi( loop::@7/(byte) plex_sprite_idx#36 ) + (byte) plex_show_idx#31 ← phi( loop::@7/(byte) plex_show_idx#38 ) + (byte) loop::sin_idx#3 ← phi( loop::@7/(byte) loop::sin_idx#5 ) + (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 + *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0) + call plexSort + to:loop::@26 +loop::@26: scope:[loop] from loop::@18 + (byte*) YSIN#23 ← phi( loop::@18/(byte*) YSIN#24 ) + (byte) loop::sin_idx#21 ← phi( loop::@18/(byte) loop::sin_idx#1 ) + (byte*) PLEX_SCREEN_PTR#25 ← phi( loop::@18/(byte*) PLEX_SCREEN_PTR#30 ) + (byte) plex_sprite_msb#20 ← phi( loop::@18/(byte) plex_sprite_msb#2 ) + (byte) plex_sprite_idx#18 ← phi( loop::@18/(byte) plex_sprite_idx#2 ) + (byte) plex_show_idx#18 ← phi( loop::@18/(byte) plex_show_idx#2 ) + (byte) plex_show_idx#7 ← (byte) plex_show_idx#18 + (byte) plex_sprite_idx#7 ← (byte) plex_sprite_idx#18 + (byte) plex_sprite_msb#8 ← (byte) plex_sprite_msb#20 + *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0) + (byte) loop::ss#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:loop::@8 +loop::@8: scope:[loop] from loop::@26 loop::@27 + (byte*) YSIN#22 ← phi( loop::@26/(byte*) YSIN#23 loop::@27/(byte*) YSIN#21 ) + (byte) loop::sin_idx#20 ← phi( loop::@26/(byte) loop::sin_idx#21 loop::@27/(byte) loop::sin_idx#19 ) + (byte) loop::ss#3 ← phi( loop::@26/(byte) loop::ss#0 loop::@27/(byte) loop::ss#1 ) + (byte) plex_sprite_msb#29 ← phi( loop::@26/(byte) plex_sprite_msb#8 loop::@27/(byte) plex_sprite_msb#9 ) + (byte*) PLEX_SCREEN_PTR#17 ← phi( loop::@26/(byte*) PLEX_SCREEN_PTR#25 loop::@27/(byte*) PLEX_SCREEN_PTR#26 ) + (byte) plex_show_idx#25 ← phi( loop::@26/(byte) plex_show_idx#7 loop::@27/(byte) plex_show_idx#8 ) + (byte) plex_sprite_idx#24 ← phi( loop::@26/(byte) plex_sprite_idx#7 loop::@27/(byte) plex_sprite_idx#8 ) + call plexShowSprite + to:loop::@27 +loop::@27: scope:[loop] from loop::@8 + (byte*) YSIN#21 ← phi( loop::@8/(byte*) YSIN#22 ) + (byte) loop::sin_idx#19 ← phi( loop::@8/(byte) loop::sin_idx#20 ) + (byte*) PLEX_SCREEN_PTR#26 ← phi( loop::@8/(byte*) PLEX_SCREEN_PTR#17 ) + (byte) loop::ss#2 ← phi( loop::@8/(byte) loop::ss#3 ) + (byte) plex_sprite_msb#21 ← phi( loop::@8/(byte) plex_sprite_msb#5 ) + (byte) plex_show_idx#19 ← phi( loop::@8/(byte) plex_show_idx#4 ) + (byte) plex_sprite_idx#19 ← phi( loop::@8/(byte) plex_sprite_idx#4 ) + (byte) plex_sprite_idx#8 ← (byte) plex_sprite_idx#19 + (byte) plex_show_idx#8 ← (byte) plex_show_idx#19 + (byte) plex_sprite_msb#9 ← (byte) plex_sprite_msb#21 + (byte) loop::ss#1 ← (byte) loop::ss#2 + rangenext(0,7) + (bool~) loop::$5 ← (byte) loop::ss#1 != rangelast(0,7) + if((bool~) loop::$5) goto loop::@8 + to:loop::@19 +loop::@19: scope:[loop] from loop::@27 + (byte*) YSIN#20 ← phi( loop::@27/(byte*) YSIN#21 ) + (byte) loop::sin_idx#18 ← phi( loop::@27/(byte) loop::sin_idx#19 ) + (byte) plex_sprite_msb#48 ← phi( loop::@27/(byte) plex_sprite_msb#9 ) + (byte*) PLEX_SCREEN_PTR#41 ← phi( loop::@27/(byte*) PLEX_SCREEN_PTR#26 ) + (byte) plex_sprite_idx#48 ← phi( loop::@27/(byte) plex_sprite_idx#8 ) + (byte) plex_show_idx#39 ← phi( loop::@27/(byte) plex_show_idx#8 ) + (byte/signed word/word/dword/signed dword~) loop::$6 ← (byte) PLEX_COUNT#0 - (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) loop::ss2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8 + to:loop::@9 +loop::@9: scope:[loop] from loop::@19 loop::@28 + (byte*) YSIN#19 ← phi( loop::@19/(byte*) YSIN#20 loop::@28/(byte*) YSIN#10 ) + (byte) loop::sin_idx#17 ← phi( loop::@19/(byte) loop::sin_idx#18 loop::@28/(byte) loop::sin_idx#10 ) + (byte) loop::ss2#9 ← phi( loop::@19/(byte) loop::ss2#0 loop::@28/(byte) loop::ss2#1 ) + (byte) plex_sprite_msb#47 ← phi( loop::@19/(byte) plex_sprite_msb#48 loop::@28/(byte) plex_sprite_msb#10 ) + (byte*) PLEX_SCREEN_PTR#38 ← phi( loop::@19/(byte*) PLEX_SCREEN_PTR#41 loop::@28/(byte*) PLEX_SCREEN_PTR#42 ) + (byte) plex_sprite_idx#47 ← phi( loop::@19/(byte) plex_sprite_idx#48 loop::@28/(byte) plex_sprite_idx#9 ) + (byte) plex_show_idx#32 ← phi( loop::@19/(byte) plex_show_idx#39 loop::@28/(byte) plex_show_idx#9 ) + *((byte*) BORDERCOL#0) ← (byte) BLACK#0 + to:loop::plexShowNextYpos1 +loop::plexShowNextYpos1: scope:[loop] from loop::@9 + (byte*) YSIN#18 ← phi( loop::@9/(byte*) YSIN#19 ) + (byte) loop::sin_idx#16 ← phi( loop::@9/(byte) loop::sin_idx#17 ) + (byte) loop::ss2#8 ← phi( loop::@9/(byte) loop::ss2#9 ) + (byte) plex_sprite_msb#46 ← phi( loop::@9/(byte) plex_sprite_msb#47 ) + (byte*) PLEX_SCREEN_PTR#36 ← phi( loop::@9/(byte*) PLEX_SCREEN_PTR#38 ) + (byte) plex_sprite_idx#46 ← phi( loop::@9/(byte) plex_sprite_idx#47 ) + (byte) plex_show_idx#20 ← phi( loop::@9/(byte) plex_show_idx#32 ) + (byte) loop::plexShowNextYpos1_return#0 ← *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#20)) + to:loop::plexShowNextYpos1_@return +loop::plexShowNextYpos1_@return: scope:[loop] from loop::plexShowNextYpos1 + (byte*) YSIN#17 ← phi( loop::plexShowNextYpos1/(byte*) YSIN#18 ) + (byte) loop::sin_idx#15 ← phi( loop::plexShowNextYpos1/(byte) loop::sin_idx#16 ) + (byte) loop::ss2#7 ← phi( loop::plexShowNextYpos1/(byte) loop::ss2#8 ) + (byte) plex_sprite_msb#43 ← phi( loop::plexShowNextYpos1/(byte) plex_sprite_msb#46 ) + (byte*) PLEX_SCREEN_PTR#34 ← phi( loop::plexShowNextYpos1/(byte*) PLEX_SCREEN_PTR#36 ) + (byte) plex_show_idx#46 ← phi( loop::plexShowNextYpos1/(byte) plex_show_idx#20 ) + (byte) plex_sprite_idx#43 ← phi( loop::plexShowNextYpos1/(byte) plex_sprite_idx#46 ) + (byte) loop::plexShowNextYpos1_return#2 ← phi( loop::plexShowNextYpos1/(byte) loop::plexShowNextYpos1_return#0 ) + (byte) loop::plexShowNextYpos1_return#1 ← (byte) loop::plexShowNextYpos1_return#2 + to:loop::@25 +loop::@25: scope:[loop] from loop::plexShowNextYpos1_@return + (byte*) YSIN#16 ← phi( loop::plexShowNextYpos1_@return/(byte*) YSIN#17 ) + (byte) loop::sin_idx#14 ← phi( loop::plexShowNextYpos1_@return/(byte) loop::sin_idx#15 ) + (byte) loop::ss2#6 ← phi( loop::plexShowNextYpos1_@return/(byte) loop::ss2#7 ) + (byte) plex_sprite_msb#41 ← phi( loop::plexShowNextYpos1_@return/(byte) plex_sprite_msb#43 ) + (byte*) PLEX_SCREEN_PTR#32 ← phi( loop::plexShowNextYpos1_@return/(byte*) PLEX_SCREEN_PTR#34 ) + (byte) plex_show_idx#44 ← phi( loop::plexShowNextYpos1_@return/(byte) plex_show_idx#46 ) + (byte) plex_sprite_idx#41 ← phi( loop::plexShowNextYpos1_@return/(byte) plex_sprite_idx#43 ) + (byte) loop::plexShowNextYpos1_return#3 ← phi( loop::plexShowNextYpos1_@return/(byte) loop::plexShowNextYpos1_return#1 ) + (byte~) loop::$7 ← (byte) loop::plexShowNextYpos1_return#3 + (byte/signed word/word/dword/signed dword~) loop::$8 ← (byte~) loop::$7 - (byte/signed byte/word/signed word/dword/signed dword) 8 + (byte) loop::rasterY#0 ← (byte/signed word/word/dword/signed dword~) loop::$8 + to:loop::@10 +loop::@10: scope:[loop] from loop::@11 loop::@25 + (byte*) YSIN#14 ← phi( loop::@11/(byte*) YSIN#15 loop::@25/(byte*) YSIN#16 ) + (byte) loop::sin_idx#12 ← phi( loop::@11/(byte) loop::sin_idx#13 loop::@25/(byte) loop::sin_idx#14 ) + (byte) loop::ss2#4 ← phi( loop::@11/(byte) loop::ss2#5 loop::@25/(byte) loop::ss2#6 ) + (byte) plex_sprite_msb#37 ← phi( loop::@11/(byte) plex_sprite_msb#40 loop::@25/(byte) plex_sprite_msb#41 ) + (byte*) PLEX_SCREEN_PTR#27 ← phi( loop::@11/(byte*) PLEX_SCREEN_PTR#31 loop::@25/(byte*) PLEX_SCREEN_PTR#32 ) + (byte) plex_show_idx#40 ← phi( loop::@11/(byte) plex_show_idx#43 loop::@25/(byte) plex_show_idx#44 ) + (byte) plex_sprite_idx#37 ← phi( loop::@11/(byte) plex_sprite_idx#40 loop::@25/(byte) plex_sprite_idx#41 ) + (byte) loop::rasterY#1 ← phi( loop::@11/(byte) loop::rasterY#2 loop::@25/(byte) loop::rasterY#0 ) + (bool~) loop::$9 ← *((byte*) RASTER#0) < (byte) loop::rasterY#1 + if((bool~) loop::$9) goto loop::@11 + to:loop::@12 +loop::@11: scope:[loop] from loop::@10 + (byte*) YSIN#15 ← phi( loop::@10/(byte*) YSIN#14 ) + (byte) loop::sin_idx#13 ← phi( loop::@10/(byte) loop::sin_idx#12 ) + (byte) loop::ss2#5 ← phi( loop::@10/(byte) loop::ss2#4 ) + (byte) plex_sprite_msb#40 ← phi( loop::@10/(byte) plex_sprite_msb#37 ) + (byte*) PLEX_SCREEN_PTR#31 ← phi( loop::@10/(byte*) PLEX_SCREEN_PTR#27 ) + (byte) plex_show_idx#43 ← phi( loop::@10/(byte) plex_show_idx#40 ) + (byte) plex_sprite_idx#40 ← phi( loop::@10/(byte) plex_sprite_idx#37 ) + (byte) loop::rasterY#2 ← phi( loop::@10/(byte) loop::rasterY#1 ) + to:loop::@10 +loop::@12: scope:[loop] from loop::@10 + (byte*) YSIN#12 ← phi( loop::@10/(byte*) YSIN#14 ) + (byte) loop::sin_idx#11 ← phi( loop::@10/(byte) loop::sin_idx#12 ) + (byte) loop::ss2#3 ← phi( loop::@10/(byte) loop::ss2#4 ) + (byte) plex_sprite_msb#30 ← phi( loop::@10/(byte) plex_sprite_msb#37 ) + (byte*) PLEX_SCREEN_PTR#16 ← phi( loop::@10/(byte*) PLEX_SCREEN_PTR#27 ) + (byte) plex_show_idx#24 ← phi( loop::@10/(byte) plex_show_idx#40 ) + (byte) plex_sprite_idx#23 ← phi( loop::@10/(byte) plex_sprite_idx#37 ) + *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0) + call plexShowSprite + to:loop::@28 +loop::@28: scope:[loop] from loop::@12 + (byte*) PLEX_SCREEN_PTR#42 ← phi( loop::@12/(byte*) PLEX_SCREEN_PTR#16 ) + (byte*) YSIN#10 ← phi( loop::@12/(byte*) YSIN#12 ) + (byte) loop::sin_idx#10 ← phi( loop::@12/(byte) loop::sin_idx#11 ) + (byte) loop::ss2#2 ← phi( loop::@12/(byte) loop::ss2#3 ) + (byte) plex_sprite_msb#22 ← phi( loop::@12/(byte) plex_sprite_msb#5 ) + (byte) plex_show_idx#21 ← phi( loop::@12/(byte) plex_show_idx#4 ) + (byte) plex_sprite_idx#20 ← phi( loop::@12/(byte) plex_sprite_idx#4 ) + (byte) plex_sprite_idx#9 ← (byte) plex_sprite_idx#20 + (byte) plex_show_idx#9 ← (byte) plex_show_idx#21 + (byte) plex_sprite_msb#10 ← (byte) plex_sprite_msb#22 + (byte) loop::ss2#1 ← (byte) loop::ss2#2 + rangenext(8,loop::$6) + (bool~) loop::$11 ← (byte) loop::ss2#1 != rangelast(8,loop::$6) + if((bool~) loop::$11) goto loop::@9 + to:loop::@23 +loop::@23: scope:[loop] from loop::@28 + (byte*) PLEX_SCREEN_PTR#45 ← phi( loop::@28/(byte*) PLEX_SCREEN_PTR#42 ) + (byte*) YSIN#8 ← phi( loop::@28/(byte*) YSIN#10 ) + (byte) loop::sin_idx#9 ← phi( loop::@28/(byte) loop::sin_idx#10 ) + (byte) plex_sprite_msb#35 ← phi( loop::@28/(byte) plex_sprite_msb#10 ) + (byte) plex_sprite_idx#35 ← phi( loop::@28/(byte) plex_sprite_idx#9 ) + (byte) plex_show_idx#37 ← phi( loop::@28/(byte) plex_show_idx#9 ) + *((byte*) BORDERCOL#0) ← (byte) BLACK#0 + to:loop::@1 +loop::@return: scope:[loop] from loop::@1 + (byte) plex_sprite_msb#23 ← phi( loop::@1/(byte) plex_sprite_msb#31 ) + (byte) plex_sprite_idx#21 ← phi( loop::@1/(byte) plex_sprite_idx#31 ) + (byte) plex_show_idx#22 ← phi( loop::@1/(byte) plex_show_idx#33 ) + (byte) plex_show_idx#10 ← (byte) plex_show_idx#22 + (byte) plex_sprite_idx#10 ← (byte) plex_sprite_idx#21 + (byte) plex_sprite_msb#11 ← (byte) plex_sprite_msb#23 + return + to:@return +@31: scope:[] from @28 + (byte*) YSIN#13 ← phi( @28/(byte*) YSIN#0 ) + (byte*) SPRITE#5 ← phi( @28/(byte*) SPRITE#0 ) + (byte*) SCREEN#3 ← phi( @28/(byte*) SCREEN#0 ) + (byte) plex_sprite_msb#32 ← phi( @28/(byte) plex_sprite_msb#38 ) + (byte) plex_sprite_idx#32 ← phi( @28/(byte) plex_sprite_idx#38 ) + (byte) plex_show_idx#34 ← phi( @28/(byte) plex_show_idx#41 ) + (byte*) PLEX_SCREEN_PTR#22 ← phi( @28/(byte*) PLEX_SCREEN_PTR#28 ) + call main + to:@32 +@32: scope:[] from @31 + (byte) plex_sprite_msb#24 ← phi( @31/(byte) plex_sprite_msb#7 ) + (byte) plex_sprite_idx#22 ← phi( @31/(byte) plex_sprite_idx#6 ) + (byte) plex_show_idx#23 ← phi( @31/(byte) plex_show_idx#6 ) + (byte*) PLEX_SCREEN_PTR#14 ← phi( @31/(byte*) PLEX_SCREEN_PTR#4 ) + (byte*) PLEX_SCREEN_PTR#7 ← (byte*) PLEX_SCREEN_PTR#14 + (byte) plex_show_idx#11 ← (byte) plex_show_idx#23 + (byte) plex_sprite_idx#11 ← (byte) plex_sprite_idx#22 + (byte) plex_sprite_msb#12 ← (byte) plex_sprite_msb#24 + to:@end +@end: scope:[] from @32 + +SYMBOL TABLE SSA +(word/signed word/dword/signed dword~) $0 +(label) @23 +(label) @28 +(label) @31 +(label) @32 +(label) @begin +(label) @end +(byte) BLACK +(byte) BLACK#0 +(byte*) BORDERCOL +(byte*) BORDERCOL#0 +(byte*) D011 +(byte*) D011#0 +(byte) GREEN +(byte) GREEN#0 +(byte) PLEX_COUNT +(byte) PLEX_COUNT#0 +(byte[PLEX_COUNT#0]) PLEX_PTR +(byte[PLEX_COUNT#0]) PLEX_PTR#0 +(byte*) PLEX_SCREEN_PTR +(byte*) PLEX_SCREEN_PTR#0 +(byte*) PLEX_SCREEN_PTR#1 +(byte*) PLEX_SCREEN_PTR#10 +(byte*) PLEX_SCREEN_PTR#11 +(byte*) PLEX_SCREEN_PTR#12 +(byte*) PLEX_SCREEN_PTR#13 +(byte*) PLEX_SCREEN_PTR#14 +(byte*) PLEX_SCREEN_PTR#15 +(byte*) PLEX_SCREEN_PTR#16 +(byte*) PLEX_SCREEN_PTR#17 +(byte*) PLEX_SCREEN_PTR#18 +(byte*) PLEX_SCREEN_PTR#19 +(byte*) PLEX_SCREEN_PTR#2 +(byte*) PLEX_SCREEN_PTR#20 +(byte*) PLEX_SCREEN_PTR#21 +(byte*) PLEX_SCREEN_PTR#22 +(byte*) PLEX_SCREEN_PTR#23 +(byte*) PLEX_SCREEN_PTR#24 +(byte*) PLEX_SCREEN_PTR#25 +(byte*) PLEX_SCREEN_PTR#26 +(byte*) PLEX_SCREEN_PTR#27 +(byte*) PLEX_SCREEN_PTR#28 +(byte*) PLEX_SCREEN_PTR#29 +(byte*) PLEX_SCREEN_PTR#3 +(byte*) PLEX_SCREEN_PTR#30 +(byte*) PLEX_SCREEN_PTR#31 +(byte*) PLEX_SCREEN_PTR#32 +(byte*) PLEX_SCREEN_PTR#33 +(byte*) PLEX_SCREEN_PTR#34 +(byte*) PLEX_SCREEN_PTR#35 +(byte*) PLEX_SCREEN_PTR#36 +(byte*) PLEX_SCREEN_PTR#37 +(byte*) PLEX_SCREEN_PTR#38 +(byte*) PLEX_SCREEN_PTR#39 +(byte*) PLEX_SCREEN_PTR#4 +(byte*) PLEX_SCREEN_PTR#40 +(byte*) PLEX_SCREEN_PTR#41 +(byte*) PLEX_SCREEN_PTR#42 +(byte*) PLEX_SCREEN_PTR#43 +(byte*) PLEX_SCREEN_PTR#44 +(byte*) PLEX_SCREEN_PTR#45 +(byte*) PLEX_SCREEN_PTR#5 +(byte*) PLEX_SCREEN_PTR#6 +(byte*) PLEX_SCREEN_PTR#7 +(byte*) PLEX_SCREEN_PTR#8 +(byte*) PLEX_SCREEN_PTR#9 +(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX +(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 +(word[PLEX_COUNT#0]) PLEX_XPOS +(word[PLEX_COUNT#0]) PLEX_XPOS#0 +(byte[PLEX_COUNT#0]) PLEX_YPOS +(byte[PLEX_COUNT#0]) PLEX_YPOS#0 +(byte*) RASTER +(byte*) RASTER#0 +(byte*) SCREEN +(byte*) SCREEN#0 +(byte*) SCREEN#1 +(byte*) SCREEN#2 +(byte*) SCREEN#3 +(byte*) SPRITE +(byte*) SPRITE#0 +(byte*) SPRITE#1 +(byte*) SPRITE#2 +(byte*) SPRITE#3 +(byte*) SPRITE#4 +(byte*) SPRITE#5 +(byte*) SPRITES_COLS +(byte*) SPRITES_COLS#0 +(byte*) SPRITES_ENABLE +(byte*) SPRITES_ENABLE#0 +(byte*) SPRITES_XMSB +(byte*) SPRITES_XMSB#0 +(byte*) SPRITES_XPOS +(byte*) SPRITES_XPOS#0 +(byte*) SPRITES_YPOS +(byte*) SPRITES_YPOS#0 +(byte) VIC_DEN +(byte) VIC_DEN#0 +(byte) VIC_RSEL +(byte) VIC_RSEL#0 +(byte*) YSIN +(byte*) YSIN#0 +(byte*) YSIN#1 +(byte*) YSIN#10 +(byte*) YSIN#11 +(byte*) YSIN#12 +(byte*) YSIN#13 +(byte*) YSIN#14 +(byte*) YSIN#15 +(byte*) YSIN#16 +(byte*) YSIN#17 +(byte*) YSIN#18 +(byte*) YSIN#19 +(byte*) YSIN#2 +(byte*) YSIN#20 +(byte*) YSIN#21 +(byte*) YSIN#22 +(byte*) YSIN#23 +(byte*) YSIN#24 +(byte*) YSIN#3 +(byte*) YSIN#4 +(byte*) YSIN#5 +(byte*) YSIN#6 +(byte*) YSIN#7 +(byte*) YSIN#8 +(byte*) YSIN#9 +(void()) init() +(byte~) init::$0 +(byte/word/dword~) init::$1 +(byte/signed word/word/dword/signed dword~) init::$3 +(byte*~) init::$4 +(byte~) init::$5 +(byte~) init::$6 +(bool~) init::$7 +(bool~) init::$8 +(label) init::@1 +(label) init::@2 +(label) init::@3 +(label) init::@5 +(label) init::@return +(byte) init::ss +(byte) init::ss#0 +(byte) init::ss#1 +(byte) init::ss#2 +(byte) init::sx +(byte) init::sx#0 +(byte) init::sx#1 +(byte) init::sx#2 +(word) init::xp +(word) init::xp#0 +(word) init::xp#1 +(word) init::xp#2 +(void()) loop() +(bool~) loop::$0 +(byte/signed word/word/dword/signed dword~) loop::$1 +(bool~) loop::$11 +(bool~) loop::$2 +(bool~) loop::$5 +(byte/signed word/word/dword/signed dword~) loop::$6 +(byte~) loop::$7 +(byte/signed word/word/dword/signed dword~) loop::$8 +(bool~) loop::$9 +(label) loop::@1 +(label) loop::@10 +(label) loop::@11 +(label) loop::@12 +(label) loop::@18 +(label) loop::@19 +(label) loop::@2 +(label) loop::@23 +(label) loop::@25 +(label) loop::@26 +(label) loop::@27 +(label) loop::@28 +(label) loop::@4 +(label) loop::@5 +(label) loop::@6 +(label) loop::@7 +(label) loop::@8 +(label) loop::@9 +(label) loop::@return +(label) loop::plexShowNextYpos1 +(label) loop::plexShowNextYpos1_@return +(byte) loop::plexShowNextYpos1_return +(byte) loop::plexShowNextYpos1_return#0 +(byte) loop::plexShowNextYpos1_return#1 +(byte) loop::plexShowNextYpos1_return#2 +(byte) loop::plexShowNextYpos1_return#3 +(byte) loop::rasterY +(byte) loop::rasterY#0 +(byte) loop::rasterY#1 +(byte) loop::rasterY#2 +(byte) loop::sin_idx +(byte) loop::sin_idx#0 +(byte) loop::sin_idx#1 +(byte) loop::sin_idx#10 +(byte) loop::sin_idx#11 +(byte) loop::sin_idx#12 +(byte) loop::sin_idx#13 +(byte) loop::sin_idx#14 +(byte) loop::sin_idx#15 +(byte) loop::sin_idx#16 +(byte) loop::sin_idx#17 +(byte) loop::sin_idx#18 +(byte) loop::sin_idx#19 +(byte) loop::sin_idx#2 +(byte) loop::sin_idx#20 +(byte) loop::sin_idx#21 +(byte) loop::sin_idx#3 +(byte) loop::sin_idx#4 +(byte) loop::sin_idx#5 +(byte) loop::sin_idx#6 +(byte) loop::sin_idx#7 +(byte) loop::sin_idx#8 +(byte) loop::sin_idx#9 +(byte) loop::ss +(byte) loop::ss#0 +(byte) loop::ss#1 +(byte) loop::ss#2 +(byte) loop::ss#3 +(byte) loop::ss2 +(byte) loop::ss2#0 +(byte) loop::ss2#1 +(byte) loop::ss2#2 +(byte) loop::ss2#3 +(byte) loop::ss2#4 +(byte) loop::ss2#5 +(byte) loop::ss2#6 +(byte) loop::ss2#7 +(byte) loop::ss2#8 +(byte) loop::ss2#9 +(byte) loop::sy +(byte) loop::sy#0 +(byte) loop::sy#1 +(byte) loop::sy#2 +(byte) loop::y_idx +(byte) loop::y_idx#0 +(byte) loop::y_idx#1 +(byte) loop::y_idx#2 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@return +(void()) plexInit((byte*) plexInit::screen) +(byte/signed word/word/dword/signed dword~) plexInit::$1 +(bool~) plexInit::$2 +(label) plexInit::@1 +(label) plexInit::@3 +(label) plexInit::@return +(byte) plexInit::i +(byte) plexInit::i#0 +(byte) plexInit::i#1 +(byte) plexInit::i#2 +(label) plexInit::plexSetScreen1 +(byte*~) plexInit::plexSetScreen1_$0 +(byte*) plexInit::plexSetScreen1_$0#0 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::plexSetScreen1_screen#0 +(byte*) plexInit::plexSetScreen1_screen#1 +(byte*) plexInit::screen +(byte*) plexInit::screen#0 +(byte*) plexInit::screen#1 +(void()) plexShowSprite() +(byte~) plexShowSprite::$0 +(byte~) plexShowSprite::$1 +(byte~) plexShowSprite::$2 +(byte~) plexShowSprite::$3 +(bool~) plexShowSprite::$4 +(byte/word/dword~) plexShowSprite::$5 +(byte/signed word/word/dword/signed dword~) plexShowSprite::$6 +(byte/word/dword~) plexShowSprite::$7 +(bool~) plexShowSprite::$8 +(bool~) plexShowSprite::$9 +(label) plexShowSprite::@1 +(label) plexShowSprite::@2 +(label) plexShowSprite::@3 +(label) plexShowSprite::@4 +(label) plexShowSprite::@6 +(label) plexShowSprite::@return +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 +(void()) plexSort() +(byte/signed word/word/dword/signed dword~) plexSort::$0 +(byte/signed word/word/dword/signed dword~) plexSort::$1 +(bool~) plexSort::$2 +(bool~) plexSort::$3 +(byte/signed word/word/dword/signed dword~) plexSort::$4 +(bool~) plexSort::$5 +(bool~) plexSort::$6 +(bool~) plexSort::$7 +(bool~) plexSort::$8 +(label) plexSort::@1 +(label) plexSort::@2 +(label) plexSort::@3 +(label) plexSort::@4 +(label) plexSort::@5 +(label) plexSort::@6 +(label) plexSort::@return +(byte) plexSort::m +(byte) plexSort::m#0 +(byte) plexSort::m#1 +(byte) plexSort::m#2 +(byte) plexSort::m#3 +(byte) plexSort::m#4 +(byte) plexSort::m#5 +(byte) plexSort::m#6 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 +(byte) plexSort::nxt_idx#1 +(byte) plexSort::nxt_idx#2 +(byte) plexSort::nxt_idx#3 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 +(byte) plexSort::nxt_y#1 +(byte) plexSort::nxt_y#2 +(byte) plexSort::s +(byte) plexSort::s#0 +(byte) plexSort::s#1 +(byte) plexSort::s#2 +(byte) plexSort::s#3 +(byte) plexSort::s#4 +(byte) plex_show_idx +(byte) plex_show_idx#0 +(byte) plex_show_idx#1 +(byte) plex_show_idx#10 +(byte) plex_show_idx#11 +(byte) plex_show_idx#12 +(byte) plex_show_idx#13 +(byte) plex_show_idx#14 +(byte) plex_show_idx#15 +(byte) plex_show_idx#16 +(byte) plex_show_idx#17 +(byte) plex_show_idx#18 +(byte) plex_show_idx#19 +(byte) plex_show_idx#2 +(byte) plex_show_idx#20 +(byte) plex_show_idx#21 +(byte) plex_show_idx#22 +(byte) plex_show_idx#23 +(byte) plex_show_idx#24 +(byte) plex_show_idx#25 +(byte) plex_show_idx#26 +(byte) plex_show_idx#27 +(byte) plex_show_idx#28 +(byte) plex_show_idx#29 +(byte) plex_show_idx#3 +(byte) plex_show_idx#30 +(byte) plex_show_idx#31 +(byte) plex_show_idx#32 +(byte) plex_show_idx#33 +(byte) plex_show_idx#34 +(byte) plex_show_idx#35 +(byte) plex_show_idx#36 +(byte) plex_show_idx#37 +(byte) plex_show_idx#38 +(byte) plex_show_idx#39 +(byte) plex_show_idx#4 +(byte) plex_show_idx#40 +(byte) plex_show_idx#41 +(byte) plex_show_idx#42 +(byte) plex_show_idx#43 +(byte) plex_show_idx#44 +(byte) plex_show_idx#45 +(byte) plex_show_idx#46 +(byte) plex_show_idx#47 +(byte) plex_show_idx#48 +(byte) plex_show_idx#5 +(byte) plex_show_idx#6 +(byte) plex_show_idx#7 +(byte) plex_show_idx#8 +(byte) plex_show_idx#9 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#0 +(byte) plex_sprite_idx#1 +(byte) plex_sprite_idx#10 +(byte) plex_sprite_idx#11 +(byte) plex_sprite_idx#12 +(byte) plex_sprite_idx#13 +(byte) plex_sprite_idx#14 +(byte) plex_sprite_idx#15 +(byte) plex_sprite_idx#16 +(byte) plex_sprite_idx#17 +(byte) plex_sprite_idx#18 +(byte) plex_sprite_idx#19 +(byte) plex_sprite_idx#2 +(byte) plex_sprite_idx#20 +(byte) plex_sprite_idx#21 +(byte) plex_sprite_idx#22 +(byte) plex_sprite_idx#23 +(byte) plex_sprite_idx#24 +(byte) plex_sprite_idx#25 +(byte) plex_sprite_idx#26 +(byte) plex_sprite_idx#27 +(byte) plex_sprite_idx#28 +(byte) plex_sprite_idx#29 +(byte) plex_sprite_idx#3 +(byte) plex_sprite_idx#30 +(byte) plex_sprite_idx#31 +(byte) plex_sprite_idx#32 +(byte) plex_sprite_idx#33 +(byte) plex_sprite_idx#34 +(byte) plex_sprite_idx#35 +(byte) plex_sprite_idx#36 +(byte) plex_sprite_idx#37 +(byte) plex_sprite_idx#38 +(byte) plex_sprite_idx#39 +(byte) plex_sprite_idx#4 +(byte) plex_sprite_idx#40 +(byte) plex_sprite_idx#41 +(byte) plex_sprite_idx#42 +(byte) plex_sprite_idx#43 +(byte) plex_sprite_idx#44 +(byte) plex_sprite_idx#45 +(byte) plex_sprite_idx#46 +(byte) plex_sprite_idx#47 +(byte) plex_sprite_idx#48 +(byte) plex_sprite_idx#5 +(byte) plex_sprite_idx#6 +(byte) plex_sprite_idx#7 +(byte) plex_sprite_idx#8 +(byte) plex_sprite_idx#9 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#0 +(byte) plex_sprite_msb#1 +(byte) plex_sprite_msb#10 +(byte) plex_sprite_msb#11 +(byte) plex_sprite_msb#12 +(byte) plex_sprite_msb#13 +(byte) plex_sprite_msb#14 +(byte) plex_sprite_msb#15 +(byte) plex_sprite_msb#16 +(byte) plex_sprite_msb#17 +(byte) plex_sprite_msb#18 +(byte) plex_sprite_msb#19 +(byte) plex_sprite_msb#2 +(byte) plex_sprite_msb#20 +(byte) plex_sprite_msb#21 +(byte) plex_sprite_msb#22 +(byte) plex_sprite_msb#23 +(byte) plex_sprite_msb#24 +(byte) plex_sprite_msb#25 +(byte) plex_sprite_msb#26 +(byte) plex_sprite_msb#27 +(byte) plex_sprite_msb#28 +(byte) plex_sprite_msb#29 +(byte) plex_sprite_msb#3 +(byte) plex_sprite_msb#30 +(byte) plex_sprite_msb#31 +(byte) plex_sprite_msb#32 +(byte) plex_sprite_msb#33 +(byte) plex_sprite_msb#34 +(byte) plex_sprite_msb#35 +(byte) plex_sprite_msb#36 +(byte) plex_sprite_msb#37 +(byte) plex_sprite_msb#38 +(byte) plex_sprite_msb#39 +(byte) plex_sprite_msb#4 +(byte) plex_sprite_msb#40 +(byte) plex_sprite_msb#41 +(byte) plex_sprite_msb#42 +(byte) plex_sprite_msb#43 +(byte) plex_sprite_msb#44 +(byte) plex_sprite_msb#45 +(byte) plex_sprite_msb#46 +(byte) plex_sprite_msb#47 +(byte) plex_sprite_msb#48 +(byte) plex_sprite_msb#5 +(byte) plex_sprite_msb#6 +(byte) plex_sprite_msb#7 +(byte) plex_sprite_msb#8 +(byte) plex_sprite_msb#9 + +OPTIMIZING CONTROL FLOW GRAPH +Inversing boolean not (bool~) plexSort::$3 ← (byte) plexSort::nxt_y#0 >= *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2)) from (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2)) +Inversing boolean not (bool~) plexShowSprite::$9 ← (byte) plex_sprite_msb#3 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) plexShowSprite::$8 ← (byte) plex_sprite_msb#3 == (byte/signed byte/word/signed word/dword/signed dword) 0 +Succesful SSA optimization Pass2UnaryNotSimplification +Not aliassing across scopes: plexInit::screen#1 plexInit::screen#0 +Not aliassing identity: PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#15 +Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 +Not aliassing identity: plexSort::nxt_idx#2 plexSort::nxt_idx#2 +Not aliassing identity: plexSort::m#6 plexSort::m#6 +Not aliassing across scopes: plex_sprite_idx#13 plex_sprite_idx#23 +Not aliassing across scopes: plex_show_idx#13 plex_show_idx#24 +Not aliassing across scopes: PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#16 +Not aliassing across scopes: plex_sprite_msb#25 plex_sprite_msb#30 +Not aliassing across scopes: PLEX_SCREEN_PTR#18 PLEX_SCREEN_PTR#22 +Not aliassing across scopes: SCREEN#2 SCREEN#3 +Not aliassing across scopes: plex_show_idx#35 plex_show_idx#34 +Not aliassing across scopes: plex_sprite_idx#33 plex_sprite_idx#32 +Not aliassing across scopes: plex_sprite_msb#33 plex_sprite_msb#32 +Not aliassing across scopes: SPRITE#4 SPRITE#5 +Not aliassing across scopes: YSIN#11 YSIN#13 +Not aliassing across scopes: PLEX_SCREEN_PTR#10 PLEX_SCREEN_PTR#6 +Not aliassing across scopes: plex_show_idx#16 plex_show_idx#10 +Not aliassing across scopes: plex_sprite_idx#16 plex_sprite_idx#10 +Not aliassing across scopes: plex_sprite_msb#18 plex_sprite_msb#11 +Not aliassing across scopes: SCREEN#1 SCREEN#2 +Not aliassing across scopes: PLEX_SCREEN_PTR#20 PLEX_SCREEN_PTR#18 +Not aliassing across scopes: SPRITE#3 SPRITE#4 +Not aliassing across scopes: plexInit::screen#0 SCREEN#1 +Not aliassing across scopes: PLEX_SCREEN_PTR#12 PLEX_SCREEN_PTR#2 +Not aliassing identity: SPRITE#1 SPRITE#1 +Not aliassing identity: PLEX_SCREEN_PTR#29 PLEX_SCREEN_PTR#29 +Not aliassing identity: PLEX_SCREEN_PTR#21 PLEX_SCREEN_PTR#21 +Not aliassing across scopes: plex_show_idx#36 plex_show_idx#30 +Not aliassing across scopes: plex_sprite_idx#34 plex_sprite_idx#29 +Not aliassing across scopes: plex_sprite_msb#34 plex_sprite_msb#27 +Not aliassing across scopes: YSIN#7 YSIN#9 +Not aliassing across scopes: PLEX_SCREEN_PTR#44 PLEX_SCREEN_PTR#3 +Not aliassing across scopes: plex_show_idx#18 plex_show_idx#2 +Not aliassing across scopes: plex_sprite_idx#18 plex_sprite_idx#2 +Not aliassing across scopes: plex_sprite_msb#20 plex_sprite_msb#2 +Not aliassing across scopes: plex_sprite_idx#19 plex_sprite_idx#4 +Not aliassing across scopes: plex_show_idx#19 plex_show_idx#4 +Not aliassing across scopes: plex_sprite_msb#21 plex_sprite_msb#5 +Not aliassing across scopes: plex_sprite_idx#20 plex_sprite_idx#4 +Not aliassing across scopes: plex_show_idx#21 plex_show_idx#4 +Not aliassing across scopes: plex_sprite_msb#22 plex_sprite_msb#5 +Not aliassing across scopes: PLEX_SCREEN_PTR#14 PLEX_SCREEN_PTR#4 +Not aliassing across scopes: plex_show_idx#23 plex_show_idx#6 +Not aliassing across scopes: plex_sprite_idx#22 plex_sprite_idx#6 +Not aliassing across scopes: plex_sprite_msb#24 plex_sprite_msb#7 +Alias (byte*) plexInit::plexSetScreen1_screen#0 = (byte*) plexInit::screen#1 (byte*) plexInit::plexSetScreen1_screen#1 +Alias (byte*) PLEX_SCREEN_PTR#1 = (byte*) plexInit::plexSetScreen1_$0#0 (byte*) PLEX_SCREEN_PTR#23 +Alias (byte*) PLEX_SCREEN_PTR#15 = (byte*) PLEX_SCREEN_PTR#8 (byte*) PLEX_SCREEN_PTR#2 +Alias (byte) plexSort::m#2 = (byte) plexSort::m#4 (byte) plexSort::s#0 +Alias (byte) plexSort::nxt_y#0 = (byte) plexSort::nxt_y#2 +Alias (byte) plexSort::nxt_idx#0 = (byte) plexSort::nxt_idx#3 +Alias (byte) plexSort::s#1 = (byte) plexSort::s#4 +Alias (byte) plexSort::nxt_idx#1 = (byte) plexSort::nxt_idx#2 +Alias (byte) plexSort::m#5 = (byte) plexSort::m#6 +Alias (byte) plex_show_idx#1 = (byte) plex_show_idx#12 (byte) plex_show_idx#2 +Alias (byte) plex_sprite_idx#1 = (byte) plex_sprite_idx#12 (byte) plex_sprite_idx#2 +Alias (byte) plex_sprite_msb#1 = (byte) plex_sprite_msb#13 (byte) plex_sprite_msb#2 +Alias (byte) plexShowSprite::plex_sprite_idx2#0 = (byte~) plexShowSprite::$0 +Alias (byte) plexShowSprite::xpos_idx#0 = (byte~) plexShowSprite::$1 +Alias (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#25 (byte) plex_sprite_msb#15 +Alias (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#25 (byte) plex_sprite_idx#26 +Alias (byte) plex_show_idx#13 = (byte) plex_show_idx#26 (byte) plex_show_idx#27 +Alias (byte) plex_sprite_idx#27 = (byte) plex_sprite_idx#3 (byte/word/dword~) plexShowSprite::$7 (byte) plex_sprite_idx#28 +Alias (byte) plex_show_idx#28 = (byte) plex_show_idx#3 (byte) plex_show_idx#29 +Alias (byte) plex_sprite_msb#26 = (byte) plex_sprite_msb#3 +Alias (byte) plex_sprite_idx#15 = (byte) plex_sprite_idx#4 +Alias (byte) plex_show_idx#15 = (byte) plex_show_idx#4 +Alias (byte) plex_sprite_msb#17 = (byte) plex_sprite_msb#5 +Alias (byte*) PLEX_SCREEN_PTR#0 = (byte*) PLEX_SCREEN_PTR#28 (byte*) PLEX_SCREEN_PTR#22 +Alias (byte) plex_show_idx#0 = (byte) plex_show_idx#41 (byte) plex_show_idx#34 +Alias (byte) plex_sprite_idx#0 = (byte) plex_sprite_idx#38 (byte) plex_sprite_idx#32 +Alias (byte) plex_sprite_msb#0 = (byte) plex_sprite_msb#38 (byte) plex_sprite_msb#32 +Alias (byte) plex_show_idx#30 = (byte) plex_show_idx#35 +Alias (byte) plex_sprite_idx#29 = (byte) plex_sprite_idx#33 +Alias (byte) plex_sprite_msb#27 = (byte) plex_sprite_msb#33 +Alias (byte*) YSIN#11 = (byte*) YSIN#9 +Alias (byte*) PLEX_SCREEN_PTR#10 = (byte*) PLEX_SCREEN_PTR#3 (byte*) PLEX_SCREEN_PTR#19 (byte*) PLEX_SCREEN_PTR#11 (byte*) PLEX_SCREEN_PTR#4 +Alias (byte) plex_show_idx#16 = (byte) plex_show_idx#5 (byte) plex_show_idx#17 (byte) plex_show_idx#6 +Alias (byte) plex_sprite_idx#16 = (byte) plex_sprite_idx#5 (byte) plex_sprite_idx#17 (byte) plex_sprite_idx#6 +Alias (byte) plex_sprite_msb#18 = (byte) plex_sprite_msb#6 (byte) plex_sprite_msb#19 (byte) plex_sprite_msb#7 +Alias (byte*) SPRITE#2 = (byte*) SPRITE#3 +Alias (byte*) PLEX_SCREEN_PTR#12 = (byte*) PLEX_SCREEN_PTR#5 +Alias (byte*) PLEX_SCREEN_PTR#24 = (byte*) PLEX_SCREEN_PTR#29 +Alias (byte*) PLEX_SCREEN_PTR#13 = (byte*) PLEX_SCREEN_PTR#21 (byte*) PLEX_SCREEN_PTR#6 +Alias (byte) loop::sin_idx#6 = (byte) loop::sin_idx#8 +Alias (byte*) YSIN#4 = (byte*) YSIN#6 +Alias (byte) plex_show_idx#10 = (byte) plex_show_idx#47 (byte) plex_show_idx#33 (byte) plex_show_idx#22 +Alias (byte) plex_sprite_idx#10 = (byte) plex_sprite_idx#44 (byte) plex_sprite_idx#31 (byte) plex_sprite_idx#21 +Alias (byte) plex_sprite_msb#11 = (byte) plex_sprite_msb#44 (byte) plex_sprite_msb#31 (byte) plex_sprite_msb#23 +Alias (byte*) PLEX_SCREEN_PTR#39 = (byte*) PLEX_SCREEN_PTR#43 +Alias (byte) loop::sin_idx#2 = (byte) loop::sin_idx#7 (byte) loop::sin_idx#4 (byte) loop::y_idx#0 +Alias (byte*) YSIN#2 = (byte*) YSIN#5 (byte*) YSIN#3 +Alias (byte) plex_show_idx#42 = (byte) plex_show_idx#48 (byte) plex_show_idx#45 +Alias (byte) plex_sprite_idx#39 = (byte) plex_sprite_idx#45 (byte) plex_sprite_idx#42 +Alias (byte) plex_sprite_msb#39 = (byte) plex_sprite_msb#45 (byte) plex_sprite_msb#42 +Alias (byte*) PLEX_SCREEN_PTR#35 = (byte*) PLEX_SCREEN_PTR#40 (byte*) PLEX_SCREEN_PTR#37 +Alias (byte) loop::sin_idx#3 = (byte) loop::sin_idx#5 +Alias (byte) plex_show_idx#31 = (byte) plex_show_idx#38 +Alias (byte) plex_sprite_idx#30 = (byte) plex_sprite_idx#36 +Alias (byte) plex_sprite_msb#28 = (byte) plex_sprite_msb#36 +Alias (byte*) PLEX_SCREEN_PTR#25 = (byte*) PLEX_SCREEN_PTR#30 (byte*) PLEX_SCREEN_PTR#33 +Alias (byte*) YSIN#1 = (byte*) YSIN#24 (byte*) YSIN#23 +Alias (byte) loop::sin_idx#1 = (byte) loop::sin_idx#21 +Alias (byte) plex_show_idx#18 = (byte) plex_show_idx#7 +Alias (byte) plex_sprite_idx#18 = (byte) plex_sprite_idx#7 +Alias (byte) plex_sprite_msb#20 = (byte) plex_sprite_msb#8 +Alias (byte) loop::ss#2 = (byte) loop::ss#3 +Alias (byte*) PLEX_SCREEN_PTR#17 = (byte*) PLEX_SCREEN_PTR#26 (byte*) PLEX_SCREEN_PTR#41 +Alias (byte) loop::sin_idx#18 = (byte) loop::sin_idx#19 (byte) loop::sin_idx#20 +Alias (byte*) YSIN#20 = (byte*) YSIN#21 (byte*) YSIN#22 +Alias (byte) plex_sprite_idx#19 = (byte) plex_sprite_idx#8 (byte) plex_sprite_idx#48 +Alias (byte) plex_show_idx#19 = (byte) plex_show_idx#8 (byte) plex_show_idx#39 +Alias (byte) plex_sprite_msb#21 = (byte) plex_sprite_msb#9 (byte) plex_sprite_msb#48 +Alias (byte) plex_show_idx#20 = (byte) plex_show_idx#32 (byte) plex_show_idx#46 (byte) plex_show_idx#44 +Alias (byte) plex_sprite_idx#41 = (byte) plex_sprite_idx#46 (byte) plex_sprite_idx#47 (byte) plex_sprite_idx#43 +Alias (byte*) PLEX_SCREEN_PTR#32 = (byte*) PLEX_SCREEN_PTR#36 (byte*) PLEX_SCREEN_PTR#38 (byte*) PLEX_SCREEN_PTR#34 +Alias (byte) plex_sprite_msb#41 = (byte) plex_sprite_msb#46 (byte) plex_sprite_msb#47 (byte) plex_sprite_msb#43 +Alias (byte) loop::ss2#6 = (byte) loop::ss2#8 (byte) loop::ss2#9 (byte) loop::ss2#7 +Alias (byte) loop::sin_idx#14 = (byte) loop::sin_idx#16 (byte) loop::sin_idx#17 (byte) loop::sin_idx#15 +Alias (byte*) YSIN#16 = (byte*) YSIN#18 (byte*) YSIN#19 (byte*) YSIN#17 +Alias (byte) loop::plexShowNextYpos1_return#0 = (byte) loop::plexShowNextYpos1_return#2 (byte) loop::plexShowNextYpos1_return#1 (byte) loop::plexShowNextYpos1_return#3 (byte~) loop::$7 +Alias (byte) loop::rasterY#0 = (byte/signed word/word/dword/signed dword~) loop::$8 +Alias (byte) loop::rasterY#1 = (byte) loop::rasterY#2 +Alias (byte) plex_sprite_idx#23 = (byte) plex_sprite_idx#40 (byte) plex_sprite_idx#37 +Alias (byte) plex_show_idx#24 = (byte) plex_show_idx#43 (byte) plex_show_idx#40 +Alias (byte*) PLEX_SCREEN_PTR#16 = (byte*) PLEX_SCREEN_PTR#31 (byte*) PLEX_SCREEN_PTR#27 (byte*) PLEX_SCREEN_PTR#42 (byte*) PLEX_SCREEN_PTR#45 +Alias (byte) plex_sprite_msb#30 = (byte) plex_sprite_msb#40 (byte) plex_sprite_msb#37 +Alias (byte) loop::ss2#2 = (byte) loop::ss2#5 (byte) loop::ss2#4 (byte) loop::ss2#3 +Alias (byte) loop::sin_idx#10 = (byte) loop::sin_idx#13 (byte) loop::sin_idx#12 (byte) loop::sin_idx#11 (byte) loop::sin_idx#9 +Alias (byte*) YSIN#10 = (byte*) YSIN#15 (byte*) YSIN#14 (byte*) YSIN#12 (byte*) YSIN#8 +Alias (byte) plex_sprite_idx#20 = (byte) plex_sprite_idx#9 (byte) plex_sprite_idx#35 +Alias (byte) plex_show_idx#21 = (byte) plex_show_idx#9 (byte) plex_show_idx#37 +Alias (byte) plex_sprite_msb#10 = (byte) plex_sprite_msb#22 (byte) plex_sprite_msb#35 +Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 +Alias (byte*) SPRITE#0 = (byte*) SPRITE#5 +Alias (byte*) YSIN#0 = (byte*) YSIN#13 +Alias (byte*) PLEX_SCREEN_PTR#14 = (byte*) PLEX_SCREEN_PTR#7 +Alias (byte) plex_show_idx#11 = (byte) plex_show_idx#23 +Alias (byte) plex_sprite_idx#11 = (byte) plex_sprite_idx#22 +Alias (byte) plex_sprite_msb#12 = (byte) plex_sprite_msb#24 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: plexInit::plexSetScreen1_screen#0 plexInit::screen#0 +Not aliassing identity: PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#15 +Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 +Not aliassing identity: plexSort::nxt_idx#1 plexSort::nxt_idx#1 +Not aliassing identity: plexSort::m#5 plexSort::m#5 +Not aliassing across scopes: plex_sprite_idx#13 plex_sprite_idx#23 +Not aliassing across scopes: plex_show_idx#13 plex_show_idx#24 +Not aliassing across scopes: PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#16 +Not aliassing across scopes: plex_sprite_msb#14 plex_sprite_msb#30 +Not aliassing across scopes: PLEX_SCREEN_PTR#18 PLEX_SCREEN_PTR#0 +Not aliassing across scopes: SCREEN#2 SCREEN#0 +Not aliassing across scopes: plex_show_idx#30 plex_show_idx#0 +Not aliassing across scopes: plex_sprite_idx#29 plex_sprite_idx#0 +Not aliassing across scopes: plex_sprite_msb#27 plex_sprite_msb#0 +Not aliassing across scopes: SPRITE#4 SPRITE#0 +Not aliassing across scopes: YSIN#11 YSIN#0 +Not aliassing across scopes: PLEX_SCREEN_PTR#10 PLEX_SCREEN_PTR#13 +Not aliassing across scopes: plex_show_idx#16 plex_show_idx#10 +Not aliassing across scopes: plex_sprite_idx#16 plex_sprite_idx#10 +Not aliassing across scopes: plex_sprite_msb#18 plex_sprite_msb#11 +Not aliassing across scopes: SCREEN#1 SCREEN#2 +Not aliassing across scopes: PLEX_SCREEN_PTR#20 PLEX_SCREEN_PTR#18 +Not aliassing across scopes: SPRITE#2 SPRITE#4 +Not aliassing across scopes: plexInit::screen#0 SCREEN#1 +Not aliassing across scopes: PLEX_SCREEN_PTR#12 PLEX_SCREEN_PTR#15 +Not aliassing identity: SPRITE#1 SPRITE#1 +Not aliassing identity: PLEX_SCREEN_PTR#24 PLEX_SCREEN_PTR#24 +Not aliassing identity: PLEX_SCREEN_PTR#13 PLEX_SCREEN_PTR#13 +Not aliassing across scopes: plex_show_idx#36 plex_show_idx#30 +Not aliassing across scopes: plex_sprite_idx#34 plex_sprite_idx#29 +Not aliassing across scopes: plex_sprite_msb#34 plex_sprite_msb#27 +Not aliassing across scopes: YSIN#7 YSIN#11 +Not aliassing across scopes: PLEX_SCREEN_PTR#44 PLEX_SCREEN_PTR#10 +Not aliassing across scopes: plex_show_idx#18 plex_show_idx#1 +Not aliassing across scopes: plex_sprite_idx#18 plex_sprite_idx#1 +Not aliassing across scopes: plex_sprite_msb#20 plex_sprite_msb#1 +Not aliassing across scopes: plex_sprite_idx#19 plex_sprite_idx#15 +Not aliassing across scopes: plex_show_idx#19 plex_show_idx#15 +Not aliassing across scopes: plex_sprite_msb#21 plex_sprite_msb#17 +Not aliassing identity: loop::rasterY#1 loop::rasterY#1 +Not aliassing identity: plex_sprite_idx#23 plex_sprite_idx#23 +Not aliassing identity: plex_show_idx#24 plex_show_idx#24 +Not aliassing identity: PLEX_SCREEN_PTR#16 PLEX_SCREEN_PTR#16 +Not aliassing identity: plex_sprite_msb#30 plex_sprite_msb#30 +Not aliassing identity: loop::ss2#2 loop::ss2#2 +Not aliassing identity: loop::sin_idx#10 loop::sin_idx#10 +Not aliassing identity: YSIN#10 YSIN#10 +Not aliassing across scopes: plex_sprite_idx#20 plex_sprite_idx#15 +Not aliassing across scopes: plex_show_idx#21 plex_show_idx#15 +Not aliassing across scopes: plex_sprite_msb#10 plex_sprite_msb#17 +Not aliassing across scopes: PLEX_SCREEN_PTR#14 PLEX_SCREEN_PTR#10 +Not aliassing across scopes: plex_show_idx#11 plex_show_idx#16 +Not aliassing across scopes: plex_sprite_idx#11 plex_sprite_idx#16 +Not aliassing across scopes: plex_sprite_msb#12 plex_sprite_msb#18 +Alias (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#14 +Alias (byte) plex_show_idx#13 = (byte) plex_show_idx#14 +Alias (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#16 +Alias (byte) plex_sprite_idx#15 = (byte) plex_sprite_idx#27 +Alias (byte) plex_show_idx#15 = (byte) plex_show_idx#28 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: plexInit::plexSetScreen1_screen#0 plexInit::screen#0 +Not aliassing identity: PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#15 +Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 +Not aliassing identity: plexSort::nxt_idx#1 plexSort::nxt_idx#1 +Not aliassing identity: plexSort::m#5 plexSort::m#5 +Not aliassing across scopes: plex_sprite_idx#13 plex_sprite_idx#23 +Not aliassing across scopes: plex_show_idx#13 plex_show_idx#24 +Not aliassing across scopes: PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#16 +Not aliassing across scopes: plex_sprite_msb#14 plex_sprite_msb#30 +Not aliassing across scopes: PLEX_SCREEN_PTR#18 PLEX_SCREEN_PTR#0 +Not aliassing across scopes: SCREEN#2 SCREEN#0 +Not aliassing across scopes: plex_show_idx#30 plex_show_idx#0 +Not aliassing across scopes: plex_sprite_idx#29 plex_sprite_idx#0 +Not aliassing across scopes: plex_sprite_msb#27 plex_sprite_msb#0 +Not aliassing across scopes: SPRITE#4 SPRITE#0 +Not aliassing across scopes: YSIN#11 YSIN#0 +Not aliassing across scopes: PLEX_SCREEN_PTR#10 PLEX_SCREEN_PTR#13 +Not aliassing across scopes: plex_show_idx#16 plex_show_idx#10 +Not aliassing across scopes: plex_sprite_idx#16 plex_sprite_idx#10 +Not aliassing across scopes: plex_sprite_msb#18 plex_sprite_msb#11 +Not aliassing across scopes: SCREEN#1 SCREEN#2 +Not aliassing across scopes: PLEX_SCREEN_PTR#20 PLEX_SCREEN_PTR#18 +Not aliassing across scopes: SPRITE#2 SPRITE#4 +Not aliassing across scopes: plexInit::screen#0 SCREEN#1 +Not aliassing across scopes: PLEX_SCREEN_PTR#12 PLEX_SCREEN_PTR#15 +Not aliassing identity: SPRITE#1 SPRITE#1 +Not aliassing identity: PLEX_SCREEN_PTR#24 PLEX_SCREEN_PTR#24 +Not aliassing identity: PLEX_SCREEN_PTR#13 PLEX_SCREEN_PTR#13 +Not aliassing across scopes: plex_show_idx#36 plex_show_idx#30 +Not aliassing across scopes: plex_sprite_idx#34 plex_sprite_idx#29 +Not aliassing across scopes: plex_sprite_msb#34 plex_sprite_msb#27 +Not aliassing across scopes: YSIN#7 YSIN#11 +Not aliassing across scopes: PLEX_SCREEN_PTR#44 PLEX_SCREEN_PTR#10 +Not aliassing across scopes: plex_show_idx#18 plex_show_idx#1 +Not aliassing across scopes: plex_sprite_idx#18 plex_sprite_idx#1 +Not aliassing across scopes: plex_sprite_msb#20 plex_sprite_msb#1 +Not aliassing across scopes: plex_sprite_idx#19 plex_sprite_idx#15 +Not aliassing across scopes: plex_show_idx#19 plex_show_idx#15 +Not aliassing across scopes: plex_sprite_msb#21 plex_sprite_msb#17 +Not aliassing identity: loop::rasterY#1 loop::rasterY#1 +Not aliassing identity: plex_sprite_idx#23 plex_sprite_idx#23 +Not aliassing identity: plex_show_idx#24 plex_show_idx#24 +Not aliassing identity: PLEX_SCREEN_PTR#16 PLEX_SCREEN_PTR#16 +Not aliassing identity: plex_sprite_msb#30 plex_sprite_msb#30 +Not aliassing identity: loop::ss2#2 loop::ss2#2 +Not aliassing identity: loop::sin_idx#10 loop::sin_idx#10 +Not aliassing identity: YSIN#10 YSIN#10 +Not aliassing across scopes: plex_sprite_idx#20 plex_sprite_idx#15 +Not aliassing across scopes: plex_show_idx#21 plex_show_idx#15 +Not aliassing across scopes: plex_sprite_msb#10 plex_sprite_msb#17 +Not aliassing across scopes: PLEX_SCREEN_PTR#14 PLEX_SCREEN_PTR#10 +Not aliassing across scopes: plex_show_idx#11 plex_show_idx#16 +Not aliassing across scopes: plex_sprite_idx#11 plex_sprite_idx#16 +Not aliassing across scopes: plex_sprite_msb#12 plex_sprite_msb#18 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#15 +Self Phi Eliminated (byte) plexSort::nxt_y#1 +Self Phi Eliminated (byte) plexSort::nxt_idx#1 +Self Phi Eliminated (byte) plexSort::m#5 +Self Phi Eliminated (byte*) SPRITE#1 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#24 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#13 +Self Phi Eliminated (byte) loop::sin_idx#2 +Self Phi Eliminated (byte*) YSIN#2 +Self Phi Eliminated (byte) plex_show_idx#42 +Self Phi Eliminated (byte) plex_sprite_idx#39 +Self Phi Eliminated (byte) plex_sprite_msb#39 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#35 +Self Phi Eliminated (byte*) YSIN#1 +Self Phi Eliminated (byte) loop::sin_idx#3 +Self Phi Eliminated (byte) plex_show_idx#31 +Self Phi Eliminated (byte) plex_sprite_idx#30 +Self Phi Eliminated (byte) plex_sprite_msb#28 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#25 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#17 +Self Phi Eliminated (byte) loop::sin_idx#18 +Self Phi Eliminated (byte*) YSIN#20 +Self Phi Eliminated (byte) loop::rasterY#1 +Self Phi Eliminated (byte) plex_sprite_idx#23 +Self Phi Eliminated (byte) plex_show_idx#24 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#16 +Self Phi Eliminated (byte) plex_sprite_msb#30 +Self Phi Eliminated (byte) loop::ss2#2 +Self Phi Eliminated (byte) loop::sin_idx#10 +Self Phi Eliminated (byte*) YSIN#10 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) plexInit::plexSetScreen1_screen#0 (byte*) plexInit::screen#0 +Redundant Phi (byte*) PLEX_SCREEN_PTR#15 (byte*) PLEX_SCREEN_PTR#1 +Redundant Phi (byte) plexSort::nxt_y#1 (byte) plexSort::nxt_y#0 +Redundant Phi (byte) plexSort::nxt_idx#1 (byte) plexSort::nxt_idx#0 +Redundant Phi (byte) plexSort::m#5 (byte) plexSort::m#2 +Redundant Phi (byte*) PLEX_SCREEN_PTR#18 (byte*) PLEX_SCREEN_PTR#0 +Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 +Redundant Phi (byte) plex_show_idx#30 (byte) plex_show_idx#0 +Redundant Phi (byte) plex_sprite_idx#29 (byte) plex_sprite_idx#0 +Redundant Phi (byte) plex_sprite_msb#27 (byte) plex_sprite_msb#0 +Redundant Phi (byte*) SPRITE#4 (byte*) SPRITE#0 +Redundant Phi (byte*) YSIN#11 (byte*) YSIN#0 +Redundant Phi (byte*) PLEX_SCREEN_PTR#10 (byte*) PLEX_SCREEN_PTR#13 +Redundant Phi (byte) plex_show_idx#16 (byte) plex_show_idx#10 +Redundant Phi (byte) plex_sprite_idx#16 (byte) plex_sprite_idx#10 +Redundant Phi (byte) plex_sprite_msb#18 (byte) plex_sprite_msb#11 +Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 +Redundant Phi (byte*) PLEX_SCREEN_PTR#20 (byte*) PLEX_SCREEN_PTR#18 +Redundant Phi (byte*) SPRITE#2 (byte*) SPRITE#4 +Redundant Phi (byte*) PLEX_SCREEN_PTR#12 (byte*) PLEX_SCREEN_PTR#15 +Redundant Phi (byte*) SPRITE#1 (byte*) SPRITE#2 +Redundant Phi (byte*) PLEX_SCREEN_PTR#24 (byte*) PLEX_SCREEN_PTR#12 +Redundant Phi (byte*) PLEX_SCREEN_PTR#13 (byte*) PLEX_SCREEN_PTR#24 +Redundant Phi (byte) plex_show_idx#36 (byte) plex_show_idx#30 +Redundant Phi (byte) plex_sprite_idx#34 (byte) plex_sprite_idx#29 +Redundant Phi (byte) plex_sprite_msb#34 (byte) plex_sprite_msb#27 +Redundant Phi (byte*) YSIN#7 (byte*) YSIN#11 +Redundant Phi (byte*) PLEX_SCREEN_PTR#44 (byte*) PLEX_SCREEN_PTR#10 +Redundant Phi (byte) loop::sin_idx#2 (byte) loop::sin_idx#6 +Redundant Phi (byte*) YSIN#2 (byte*) YSIN#4 +Redundant Phi (byte) plex_show_idx#42 (byte) plex_show_idx#10 +Redundant Phi (byte) plex_sprite_idx#39 (byte) plex_sprite_idx#10 +Redundant Phi (byte) plex_sprite_msb#39 (byte) plex_sprite_msb#11 +Redundant Phi (byte*) PLEX_SCREEN_PTR#35 (byte*) PLEX_SCREEN_PTR#39 +Redundant Phi (byte*) YSIN#1 (byte*) YSIN#2 +Redundant Phi (byte) loop::sin_idx#3 (byte) loop::sin_idx#2 +Redundant Phi (byte) plex_show_idx#31 (byte) plex_show_idx#42 +Redundant Phi (byte) plex_sprite_idx#30 (byte) plex_sprite_idx#39 +Redundant Phi (byte) plex_sprite_msb#28 (byte) plex_sprite_msb#39 +Redundant Phi (byte*) PLEX_SCREEN_PTR#25 (byte*) PLEX_SCREEN_PTR#35 +Redundant Phi (byte) plex_show_idx#18 (byte) plex_show_idx#1 +Redundant Phi (byte) plex_sprite_idx#18 (byte) plex_sprite_idx#1 +Redundant Phi (byte) plex_sprite_msb#20 (byte) plex_sprite_msb#1 +Redundant Phi (byte*) PLEX_SCREEN_PTR#17 (byte*) PLEX_SCREEN_PTR#25 +Redundant Phi (byte) loop::sin_idx#18 (byte) loop::sin_idx#1 +Redundant Phi (byte*) YSIN#20 (byte*) YSIN#1 +Redundant Phi (byte) plex_sprite_idx#19 (byte) plex_sprite_idx#15 +Redundant Phi (byte) plex_show_idx#19 (byte) plex_show_idx#15 +Redundant Phi (byte) plex_sprite_msb#21 (byte) plex_sprite_msb#17 +Redundant Phi (byte) loop::rasterY#1 (byte) loop::rasterY#0 +Redundant Phi (byte) plex_sprite_idx#23 (byte) plex_sprite_idx#41 +Redundant Phi (byte) plex_show_idx#24 (byte) plex_show_idx#20 +Redundant Phi (byte*) PLEX_SCREEN_PTR#16 (byte*) PLEX_SCREEN_PTR#32 +Redundant Phi (byte) plex_sprite_msb#30 (byte) plex_sprite_msb#41 +Redundant Phi (byte) loop::ss2#2 (byte) loop::ss2#6 +Redundant Phi (byte) loop::sin_idx#10 (byte) loop::sin_idx#14 +Redundant Phi (byte*) YSIN#10 (byte*) YSIN#16 +Redundant Phi (byte) plex_sprite_idx#20 (byte) plex_sprite_idx#15 +Redundant Phi (byte) plex_show_idx#21 (byte) plex_show_idx#15 +Redundant Phi (byte) plex_sprite_msb#10 (byte) plex_sprite_msb#17 +Redundant Phi (byte*) PLEX_SCREEN_PTR#14 (byte*) PLEX_SCREEN_PTR#10 +Redundant Phi (byte) plex_show_idx#11 (byte) plex_show_idx#16 +Redundant Phi (byte) plex_sprite_idx#11 (byte) plex_sprite_idx#16 +Redundant Phi (byte) plex_sprite_msb#12 (byte) plex_sprite_msb#18 +Succesful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte) plexSort::m#3 (byte) plexSort::m#2 +Redundant Phi (byte) plex_show_idx#20 (byte) plex_show_idx#15 +Redundant Phi (byte) plex_sprite_idx#41 (byte) plex_sprite_idx#15 +Redundant Phi (byte) plex_sprite_msb#41 (byte) plex_sprite_msb#17 +Succesful SSA optimization Pass2RedundantPhiElimination +Simple Condition (bool~) plexInit::$2 if((byte) plexInit::i#1!=rangelast(0,plexInit::$1)) goto plexInit::@1 +Simple Condition (bool~) plexSort::$3 if((byte) plexSort::nxt_y#0>=*((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 +Simple Condition (bool~) plexSort::$8 if((byte) plexSort::m#1!=rangelast(0,plexSort::$0)) goto plexSort::@1 +Simple Condition (bool~) plexShowSprite::$4 if((byte~) plexShowSprite::$3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@1 +Simple Condition (bool~) plexShowSprite::$9 if((byte) plex_sprite_msb#26!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@3 +Simple Condition (bool~) init::$7 if((byte) init::sx#1!=rangelast(0,init::$3)) goto init::@1 +Simple Condition (bool~) init::$8 if((byte) init::ss#1!=rangelast(0,7)) goto init::@2 +Simple Condition (bool~) loop::$0 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@5 +Simple Condition (bool~) loop::$2 if((byte) loop::sy#1!=rangelast(0,loop::$1)) goto loop::@7 +Simple Condition (bool~) loop::$5 if((byte) loop::ss#1!=rangelast(0,7)) goto loop::@8 +Simple Condition (bool~) loop::$9 if(*((byte*) RASTER#0)<(byte) loop::rasterY#0) goto loop::@11 +Simple Condition (bool~) loop::$11 if((byte) loop::ss2#1!=rangelast(8,loop::$6)) goto loop::@9 +Succesful SSA optimization Pass2ConditionalJumpSimplification +Rewriting && if()-condition to two if()s (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 +Succesful SSA optimization Pass2ConditionalAndOrRewriting +Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248 +Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249 +Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264 +Constant (const byte*) RASTER#0 = ((byte*))53266 +Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269 +Constant (const byte*) BORDERCOL#0 = ((byte*))53280 +Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287 +Constant (const byte*) D011#0 = ((byte*))53265 +Constant (const byte) VIC_DEN#0 = 16 +Constant (const byte) VIC_RSEL#0 = 8 +Constant (const byte) BLACK#0 = 0 +Constant (const byte) GREEN#0 = 5 +Constant (const byte) PLEX_COUNT#0 = 24 +Constant (const word/signed word/dword/signed dword) $0 = 1024+1016 +Constant (const byte) plex_show_idx#0 = 0 +Constant (const byte) plex_sprite_idx#0 = 0 +Constant (const byte) plex_sprite_msb#0 = 1 +Constant (const byte) plexInit::i#0 = 0 +Constant (const byte) plexSort::m#0 = 0 +Constant (const byte) plex_show_idx#1 = 0 +Constant (const byte) plex_sprite_idx#1 = 0 +Constant (const byte) plex_sprite_msb#1 = 1 +Constant (const byte) plex_sprite_msb#4 = 1 +Constant (const byte*) SPRITE#0 = ((byte*))8192 +Constant (const byte*) SCREEN#0 = ((byte*))1024 +Constant (const byte*) YSIN#0 = ((byte*))8448 +Constant (const word) init::xp#0 = 32 +Constant (const byte) init::sx#0 = 0 +Constant (const byte) init::ss#0 = 0 +Constant (const byte) loop::sin_idx#0 = 0 +Constant (const byte) loop::sy#0 = 0 +Constant (const byte) loop::ss#0 = 0 +Constant (const byte) loop::ss2#0 = 8 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const word[PLEX_COUNT#0]) PLEX_XPOS#0 = { fill( PLEX_COUNT#0, 0) } +Constant (const byte[PLEX_COUNT#0]) PLEX_YPOS#0 = { fill( PLEX_COUNT#0, 0) } +Constant (const byte[PLEX_COUNT#0]) PLEX_PTR#0 = { fill( PLEX_COUNT#0, 0) } +Constant (const byte*) PLEX_SCREEN_PTR#0 = ((byte*))$0 +Constant (const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 = { fill( PLEX_COUNT#0, 0) } +Constant (const byte/signed word/word/dword/signed dword) plexInit::$1 = PLEX_COUNT#0-1 +Constant (const byte/signed word/word/dword/signed dword) plexSort::$0 = PLEX_COUNT#0-2 +Constant (const byte) init::$0 = VIC_DEN#0|VIC_RSEL#0 +Constant (const byte*) plexInit::screen#0 = SCREEN#0 +Constant (const byte/signed word/word/dword/signed dword) init::$3 = PLEX_COUNT#0-1 +Constant (const byte*) init::$4 = SPRITE#0/64 +Constant (const byte/signed word/word/dword/signed dword) loop::$1 = PLEX_COUNT#0-1 +Constant (const byte/signed word/word/dword/signed dword) loop::$6 = PLEX_COUNT#0-1 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte*) PLEX_SCREEN_PTR#1 = plexInit::screen#0+1016 +Constant (const byte/word/dword) init::$1 = init::$0|3 +Constant (const byte) init::$5 = ((byte))init::$4 +Succesful SSA optimization Pass2ConstantIdentification +Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$1) +Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$4) +Succesful SSA optimization Pass2ConstantAdditionElimination +if() condition always true - replacing block destination if(true) goto loop::@2 +Succesful SSA optimization Pass2ConstantIfs +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) plexSort::$1 ← (byte) plexSort::m#2 +Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) plexSort::$4 ← (byte) plexSort::s#3 +Eliminating unused variable - keeping the phi block (byte) plex_show_idx#10 +Eliminating unused variable - keeping the phi block (byte) plex_sprite_idx#10 +Eliminating unused variable - keeping the phi block (byte) plex_sprite_msb#11 +Eliminating unused constant (const byte*) PLEX_SCREEN_PTR#0 +Succesful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const word/signed word/dword/signed dword) $0 +Eliminating unused constant (const byte) plex_show_idx#0 +Eliminating unused constant (const byte) plex_sprite_idx#0 +Eliminating unused constant (const byte) plex_sprite_msb#0 +Succesful SSA optimization PassNEliminateUnusedVars +Removing unused block loop::@return +Succesful SSA optimization Pass2EliminateUnusedBlocks +Resolved ranged next value plexInit::i#1 ← ++ plexInit::i#2 to ++ +Resolved ranged comparison value if(plexInit::i#1!=rangelast(0,plexInit::$1)) goto plexInit::@1 to (const byte/signed word/word/dword/signed dword) plexInit::$1+(byte/signed byte/word/signed word/dword/signed dword) 1 +Resolved ranged next value plexSort::m#1 ← ++ plexSort::m#2 to ++ +Resolved ranged comparison value if(plexSort::m#1!=rangelast(0,plexSort::$0)) goto plexSort::@1 to (const byte/signed word/word/dword/signed dword) plexSort::$0+(byte/signed byte/word/signed word/dword/signed dword) 1 +Resolved ranged next value init::sx#1 ← ++ init::sx#2 to ++ +Resolved ranged comparison value if(init::sx#1!=rangelast(0,init::$3)) goto init::@1 to (const byte/signed word/word/dword/signed dword) init::$3+(byte/signed byte/word/signed word/dword/signed dword) 1 +Resolved ranged next value init::ss#1 ← ++ init::ss#2 to ++ +Resolved ranged comparison value if(init::ss#1!=rangelast(0,7)) goto init::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8 +Resolved ranged next value loop::sy#1 ← ++ loop::sy#2 to ++ +Resolved ranged comparison value if(loop::sy#1!=rangelast(0,loop::$1)) goto loop::@7 to (const byte/signed word/word/dword/signed dword) loop::$1+(byte/signed byte/word/signed word/dword/signed dword) 1 +Resolved ranged next value loop::ss#1 ← ++ loop::ss#2 to ++ +Resolved ranged comparison value if(loop::ss#1!=rangelast(0,7)) goto loop::@8 to (byte/signed byte/word/signed word/dword/signed dword) 8 +Resolved ranged next value loop::ss2#1 ← ++ loop::ss2#6 to ++ +Resolved ranged comparison value if(loop::ss2#1!=rangelast(8,loop::$6)) goto loop::@9 to (const byte/signed word/word/dword/signed dword) loop::$6+(byte/signed byte/word/signed word/dword/signed dword) 1 +Culled Empty Block (label) @23 +Culled Empty Block (label) plexInit::@3 +Culled Empty Block (label) plexSort::@4 +Culled Empty Block (label) plexSort::@6 +Culled Empty Block (label) plexShowSprite::@3 +Not culling empty block because it shares successor with its predecessor. (label) plexShowSprite::@6 +Culled Empty Block (label) main::@2 +Culled Empty Block (label) init::@5 +Culled Empty Block (label) loop::@2 +Culled Empty Block (label) loop::@5 +Culled Empty Block (label) loop::@19 +Culled Empty Block (label) loop::plexShowNextYpos1_@return +Culled Empty Block (label) loop::@11 +Culled Empty Block (label) @32 +Succesful SSA optimization Pass2CullEmptyBlocks +Not culling empty block because it shares successor with its predecessor. (label) plexShowSprite::@6 +Not aliassing across scopes: PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#32 +Alias (byte) plexSort::m#2 = (byte~) plexSort::$1 +Alias (byte) plexSort::s#3 = (byte~) plexSort::$4 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: PLEX_SCREEN_PTR#9 PLEX_SCREEN_PTR#32 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#32 +Self Phi Eliminated (byte) loop::sin_idx#14 +Self Phi Eliminated (byte*) YSIN#16 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) PLEX_SCREEN_PTR#32 (byte*) PLEX_SCREEN_PTR#39 +Redundant Phi (byte) loop::sin_idx#14 (byte) loop::sin_idx#1 +Redundant Phi (byte*) YSIN#16 (byte*) YSIN#4 +Succesful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte*) PLEX_SCREEN_PTR#9 (byte*) PLEX_SCREEN_PTR#39 +Succesful SSA optimization Pass2RedundantPhiElimination +Simple Condition (bool~) plexSort::$5 if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 +Simple Condition (bool~) plexSort::$6 if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 +Succesful SSA optimization Pass2ConditionalJumpSimplification +Not culling empty block because it shares successor with its predecessor. (label) plexShowSprite::@6 +Self Phi Eliminated (byte*) YSIN#4 +Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#39 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) YSIN#4 (const byte*) YSIN#0 +Redundant Phi (byte*) PLEX_SCREEN_PTR#39 (const byte*) PLEX_SCREEN_PTR#1 +Succesful SSA optimization Pass2RedundantPhiElimination +Not culling empty block because it shares successor with its predecessor. (label) plexShowSprite::@6 +OPTIMIZING CONTROL FLOW GRAPH +Inlining constant with var siblings (const byte) plexInit::i#0 +Inlining constant with var siblings (const byte) plexInit::i#0 +Inlining constant with var siblings (const byte) plexSort::m#0 +Inlining constant with var siblings (const byte) plexSort::m#0 +Inlining constant with var siblings (const word) init::xp#0 +Inlining constant with var siblings (const word) init::xp#0 +Inlining constant with var siblings (const byte) init::sx#0 +Inlining constant with var siblings (const byte) init::sx#0 +Inlining constant with var siblings (const byte) init::ss#0 +Inlining constant with var siblings (const byte) init::ss#0 +Inlining constant with var siblings (const byte) loop::sin_idx#0 +Inlining constant with var siblings (const byte) loop::sin_idx#0 +Inlining constant with var siblings (const byte) loop::sy#0 +Inlining constant with var siblings (const byte) loop::sy#0 +Inlining constant with var siblings (const byte) loop::ss#0 +Inlining constant with var siblings (const byte) loop::ss#0 +Inlining constant with var siblings (const byte) loop::ss2#0 +Inlining constant with var siblings (const byte) loop::ss2#0 +Inlining constant with var siblings (const byte) plex_show_idx#1 +Inlining constant with var siblings (const byte) plex_show_idx#1 +Inlining constant with var siblings (const byte) plex_show_idx#1 +Inlining constant with var siblings (const byte) plex_sprite_idx#1 +Inlining constant with var siblings (const byte) plex_sprite_idx#1 +Inlining constant with var siblings (const byte) plex_sprite_idx#1 +Inlining constant with var siblings (const byte) plex_sprite_msb#1 +Inlining constant with var siblings (const byte) plex_sprite_msb#1 +Inlining constant with var siblings (const byte) plex_sprite_msb#1 +Inlining constant with var siblings (const byte) plex_sprite_msb#1 +Inlining constant with var siblings (const byte) plex_sprite_msb#4 +Inlining constant with var siblings (const byte) plex_sprite_msb#4 +Inlining constant with var siblings (const byte) plex_sprite_msb#4 +Inlining constant with var siblings (const byte) plex_sprite_msb#4 +Constant inlined init::xp#0 = (byte/signed byte/word/signed word/dword/signed dword) 32 +Constant inlined plexInit::$1 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined plexSort::$0 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2 +Constant inlined init::ss#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined plexInit::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined plexSort::m#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined init::$3 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined init::$1 = (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 +Constant inlined loop::sin_idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined init::$0 = (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0 +Constant inlined plexInit::screen#0 = (const byte*) SCREEN#0 +Constant inlined plex_sprite_msb#4 = (byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined init::$5 = ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 +Constant inlined plex_show_idx#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined plex_sprite_idx#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined plex_sprite_msb#1 = (byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined init::$4 = (const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 +Constant inlined loop::$1 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined loop::sy#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined loop::$6 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 +Constant inlined loop::ss2#0 = (byte/signed byte/word/signed word/dword/signed dword) 8 +Constant inlined loop::ss#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined init::sx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Succesful SSA optimization Pass2ConstantInlining +Block Sequence Planned @begin @28 @31 @end main main::@1 main::@return loop loop::@1 loop::@4 loop::@6 loop::@7 loop::@18 loop::@26 loop::@8 loop::@27 loop::@9 loop::plexShowNextYpos1 loop::@25 loop::@10 loop::@12 loop::@28 loop::@23 plexShowSprite plexShowSprite::@4 plexShowSprite::@2 plexShowSprite::@6 plexShowSprite::@return plexShowSprite::@1 plexSort plexSort::@1 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::@return plexSort::@7 init init::@1 init::@3 init::@2 init::@return plexInit plexInit::plexSetScreen1 plexInit::@1 plexInit::@return +Added new block during phi lifting loop::@29(between loop::@7 and loop::@7) +Added new block during phi lifting loop::@30(between loop::@27 and loop::@8) +Added new block during phi lifting loop::@31(between loop::@28 and loop::@9) +Added new block during phi lifting plexShowSprite::@7(between plexShowSprite::@2 and plexShowSprite::@return) +Added new block during phi lifting plexSort::@8(between plexSort::@2 and plexSort::@1) +Added new block during phi lifting plexSort::@9(between plexSort::@7 and plexSort::@3) +Added new block during phi lifting plexSort::@10(between plexSort::@1 and plexSort::@3) +Added new block during phi lifting init::@6(between init::@1 and init::@1) +Added new block during phi lifting init::@7(between init::@2 and init::@2) +Added new block during phi lifting plexInit::@4(between plexInit::@1 and plexInit::@1) +Block Sequence Planned @begin @28 @31 @end main main::@1 main::@return loop loop::@1 loop::@4 loop::@6 loop::@7 loop::@18 loop::@26 loop::@8 loop::@27 loop::@9 loop::plexShowNextYpos1 loop::@25 loop::@10 loop::@12 loop::@28 loop::@23 loop::@31 loop::@30 loop::@29 plexShowSprite plexShowSprite::@4 plexShowSprite::@2 plexShowSprite::@6 plexShowSprite::@return plexShowSprite::@7 plexShowSprite::@1 plexSort plexSort::@1 plexSort::@10 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::@return plexSort::@8 plexSort::@7 plexSort::@9 init init::@1 init::@3 init::@2 init::@return init::@7 init::@6 plexInit plexInit::plexSetScreen1 plexInit::@1 plexInit::@return plexInit::@4 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @31 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of loop +Adding NOP phi() at start of plexShowSprite::@6 +Adding NOP phi() at start of plexSort +Adding NOP phi() at start of plexInit +Adding NOP phi() at start of plexInit::plexSetScreen1 +CALL GRAPH +Calls in [] to main:4 +Calls in [main] to init:7 loop:9 +Calls in [loop] to plexSort:23 plexShowSprite:29 plexShowSprite:41 +Calls in [init] to plexInit:93 + +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Created 18 initial phi equivalence classes +Not coalescing [15] loop::y_idx#3 ← loop::sin_idx#6 +Coalesced [26] plex_sprite_idx#51 ← plex_sprite_idx#24 +Coalesced [27] plex_show_idx#51 ← plex_show_idx#25 +Coalesced [28] plex_sprite_msb#51 ← plex_sprite_msb#29 +Coalesced [38] plex_sprite_idx#50 ← plex_sprite_idx#15 +Coalesced [39] plex_show_idx#50 ← plex_show_idx#15 +Coalesced [40] plex_sprite_msb#50 ← plex_sprite_msb#17 +Coalesced [45] loop::sin_idx#22 ← loop::sin_idx#1 +Coalesced [46] loop::ss2#10 ← loop::ss2#1 +Coalesced (already) [47] plex_sprite_idx#49 ← plex_sprite_idx#15 +Coalesced (already) [48] plex_show_idx#49 ← plex_show_idx#15 +Coalesced (already) [49] plex_sprite_msb#49 ← plex_sprite_msb#17 +Coalesced [50] loop::ss#4 ← loop::ss#1 +Coalesced [51] loop::y_idx#4 ← loop::y_idx#1 +Coalesced [52] loop::sy#3 ← loop::sy#1 +Coalesced [72] plex_sprite_msb#52 ← plex_sprite_msb#26 +Not coalescing [79] plexSort::s#6 ← plexSort::m#2 +Coalesced [89] plexSort::m#7 ← plexSort::m#1 +Coalesced [91] plexSort::s#5 ← plexSort::s#1 +Coalesced [107] init::ss#3 ← init::ss#1 +Coalesced [108] init::sx#3 ← init::sx#1 +Coalesced [109] init::xp#3 ← init::xp#1 +Coalesced [117] plexInit::i#3 ← plexInit::i#1 +Coalesced down to 14 phi equivalence classes +Culled Empty Block (label) loop::@31 +Culled Empty Block (label) loop::@30 +Culled Empty Block (label) loop::@29 +Culled Empty Block (label) plexShowSprite::@6 +Not culling empty block because it shares successor with its predecessor. (label) plexShowSprite::@7 +Culled Empty Block (label) plexSort::@8 +Culled Empty Block (label) plexSort::@9 +Culled Empty Block (label) init::@7 +Culled Empty Block (label) init::@6 +Culled Empty Block (label) plexInit::@4 +Block Sequence Planned @begin @28 @31 @end main main::@1 main::@return loop loop::@1 loop::@4 loop::@6 loop::@7 loop::@18 loop::@26 loop::@8 loop::@27 loop::@9 loop::plexShowNextYpos1 loop::@25 loop::@10 loop::@12 loop::@28 loop::@23 plexShowSprite plexShowSprite::@4 plexShowSprite::@2 plexShowSprite::@return plexShowSprite::@7 plexShowSprite::@1 plexSort plexSort::@1 plexSort::@10 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::@return plexSort::@7 init init::@1 init::@3 init::@2 init::@return plexInit plexInit::plexSetScreen1 plexInit::@1 plexInit::@return +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @31 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of loop +Adding NOP phi() at start of plexShowSprite::@7 +Adding NOP phi() at start of plexSort +Adding NOP phi() at start of plexInit +Adding NOP phi() at start of plexInit::plexSetScreen1 +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@28 +@28: scope:[] from @begin + kickasm(location (const byte*) YSIN#0) {{ .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + }} + kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + }} + to:@31 +@31: scope:[] from @28 + [3] phi() [ ] ( ) + [4] call main [ ] ( ) + to:@end +@end: scope:[] from @31 + [5] phi() [ ] ( ) +main: scope:[main] from @31 + asm { sei } + [7] call init [ ] ( main:4 [ ] ) + to:main::@1 +main::@1: scope:[main] from main + [8] phi() [ ] ( main:4 [ ] ) + [9] call loop [ ] ( main:4 [ ] ) + to:main::@return +main::@return: scope:[main] from main::@1 + [10] return [ ] ( main:4 [ ] ) + to:@return +loop: scope:[loop] from main::@1 + [11] phi() [ ] ( main:4::loop:9 [ ] ) + to:loop::@1 +loop::@1: scope:[loop] from loop loop::@23 + [12] (byte) loop::sin_idx#6 ← phi( loop/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@23/(byte) loop::sin_idx#1 ) [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) + to:loop::@4 +loop::@4: scope:[loop] from loop::@1 loop::@4 + [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) + to:loop::@6 +loop::@6: scope:[loop] from loop::@4 + [14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) + [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 [ loop::sin_idx#6 loop::y_idx#3 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#3 ] ) + to:loop::@7 +loop::@7: scope:[loop] from loop::@6 loop::@7 + [16] (byte) loop::sy#2 ← phi( loop::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@7/(byte) loop::sy#1 ) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) + [16] (byte) loop::y_idx#2 ← phi( loop::@6/(byte~) loop::y_idx#3 loop::@7/(byte) loop::y_idx#1 ) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) + [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) + [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) + [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) + [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) + to:loop::@18 +loop::@18: scope:[loop] from loop::@7 + [21] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + [22] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + [23] call plexSort [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + to:loop::@26 +loop::@26: scope:[loop] from loop::@18 + [24] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + to:loop::@8 +loop::@8: scope:[loop] from loop::@26 loop::@27 + [25] (byte) loop::ss#2 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@27/(byte) loop::ss#1 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [25] (byte) plex_sprite_msb#29 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 1 loop::@27/(byte) plex_sprite_msb#17 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [25] (byte) plex_show_idx#25 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@27/(byte) plex_show_idx#15 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [25] (byte) plex_sprite_idx#24 ← phi( loop::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@27/(byte) plex_sprite_idx#15 ) [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#24 plex_show_idx#25 plex_sprite_msb#29 loop::ss#2 ] ) + [26] call plexShowSprite [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + to:loop::@27 +loop::@27: scope:[loop] from loop::@8 + [27] (byte) loop::ss#1 ← ++ (byte) loop::ss#2 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) + [28] if((byte) loop::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) + to:loop::@9 +loop::@9: scope:[loop] from loop::@27 loop::@28 + [29] (byte) loop::ss2#6 ← phi( loop::@27/(byte/signed byte/word/signed word/dword/signed dword) 8 loop::@28/(byte) loop::ss2#1 ) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + [30] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + to:loop::plexShowNextYpos1 +loop::plexShowNextYpos1: scope:[loop] from loop::@9 + [31] (byte) loop::plexShowNextYpos1_return#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#15)) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ) + to:loop::@25 +loop::@25: scope:[loop] from loop::plexShowNextYpos1 + [32] (byte) loop::rasterY#0 ← (byte) loop::plexShowNextYpos1_return#0 - (byte/signed byte/word/signed word/dword/signed dword) 8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) + to:loop::@10 +loop::@10: scope:[loop] from loop::@10 loop::@25 + [33] if(*((const byte*) RASTER#0)<(byte) loop::rasterY#0) goto loop::@10 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) + to:loop::@12 +loop::@12: scope:[loop] from loop::@10 + [34] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + [35] call plexShowSprite [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + to:loop::@28 +loop::@28: scope:[loop] from loop::@12 + [36] (byte) loop::ss2#1 ← ++ (byte) loop::ss2#6 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) + [37] if((byte) loop::ss2#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) + to:loop::@23 +loop::@23: scope:[loop] from loop::@28 + [38] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + to:loop::@1 +plexShowSprite: scope:[plexShowSprite] from loop::@12 loop::@8 + [39] (byte) plex_sprite_msb#14 ← phi( loop::@12/(byte) plex_sprite_msb#17 loop::@8/(byte) plex_sprite_msb#29 ) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + [39] (byte) plex_show_idx#13 ← phi( loop::@12/(byte) plex_show_idx#15 loop::@8/(byte) plex_show_idx#25 ) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + [39] (byte) plex_sprite_idx#13 ← phi( loop::@12/(byte) plex_sprite_idx#15 loop::@8/(byte) plex_sprite_idx#24 ) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + [40] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) + [41] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) + [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#13) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) + [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) + [44] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ) + [45] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ) + [46] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ) + [47] if((byte~) plexShowSprite::$3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + to:plexShowSprite::@4 +plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite + [48] (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ) + [49] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + to:plexShowSprite::@2 +plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@4 + [50] (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 ← (byte) plex_sprite_idx#13 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ) + [51] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ) + [52] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#13 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ) + [53] (byte) plex_sprite_msb#26 ← (byte) plex_sprite_msb#14 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) + [54] if((byte) plex_sprite_msb#26!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@7 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) + to:plexShowSprite::@return +plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@7 + [55] (byte) plex_sprite_msb#17 ← phi( plexShowSprite::@7/(byte) plex_sprite_msb#26 plexShowSprite::@2/(byte/signed byte/word/signed word/dword/signed dword) 1 ) [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + [56] return [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + to:@return +plexShowSprite::@7: scope:[plexShowSprite] from plexShowSprite::@2 + [57] phi() [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) + to:plexShowSprite::@return +plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite + [58] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) + to:plexShowSprite::@2 +plexSort: scope:[plexSort] from loop::@18 + [59] phi() [ ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 ] ) + to:plexSort::@1 +plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 + [60] (byte) plexSort::m#2 ← phi( plexSort/(byte/signed byte/word/signed word/dword/signed dword) 0 plexSort::@2/(byte) plexSort::m#1 ) [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) + [61] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) + [62] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) + [63] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) + to:plexSort::@10 +plexSort::@10: scope:[plexSort] from plexSort::@1 + [64] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) + to:plexSort::@3 +plexSort::@3: scope:[plexSort] from plexSort::@10 plexSort::@7 + [65] (byte) plexSort::s#3 ← phi( plexSort::@7/(byte) plexSort::s#1 plexSort::@10/(byte~) plexSort::s#6 ) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) + [66] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) + [67] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) + [68] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) + to:plexSort::@5 +plexSort::@5: scope:[plexSort] from plexSort::@3 plexSort::@7 + [69] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) + [70] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) + to:plexSort::@2 +plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@5 + [71] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) + [72] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) + to:plexSort::@return +plexSort::@return: scope:[plexSort] from plexSort::@2 + [73] return [ ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 ] ) + to:@return +plexSort::@7: scope:[plexSort] from plexSort::@3 + [74] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) + to:plexSort::@5 +init: scope:[init] from main + [75] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:4::init:7 [ ] ) + [76] call plexInit [ ] ( main:4::init:7 [ ] ) + to:init::@1 +init::@1: scope:[init] from init init::@1 + [77] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte/signed byte/word/signed word/dword/signed dword) 32 ) [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [77] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [78] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [79] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ init::sx#2 init::xp#2 init::$6 ] ( main:4::init:7 [ init::sx#2 init::xp#2 init::$6 ] ) + [80] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) + [81] (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 [ init::sx#2 init::xp#1 ] ( main:4::init:7 [ init::sx#2 init::xp#1 ] ) + [82] (byte) init::sx#1 ← ++ (byte) init::sx#2 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) + [83] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) + to:init::@3 +init::@3: scope:[init] from init::@1 + [84] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:4::init:7 [ ] ) + to:init::@2 +init::@2: scope:[init] from init::@2 init::@3 + [85] (byte) init::ss#2 ← phi( init::@2/(byte) init::ss#1 init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) + [86] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) + [87] (byte) init::ss#1 ← ++ (byte) init::ss#2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) + [88] if((byte) init::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) + to:init::@return +init::@return: scope:[init] from init::@2 + [89] return [ ] ( main:4::init:7 [ ] ) + to:@return +plexInit: scope:[plexInit] from init + [90] phi() [ ] ( main:4::init:7::plexInit:76 [ ] ) + to:plexInit::plexSetScreen1 +plexInit::plexSetScreen1: scope:[plexInit] from plexInit + [91] phi() [ ] ( main:4::init:7::plexInit:76 [ ] ) + to:plexInit::@1 +plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 + [92] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ plexInit::i#2 ] ( main:4::init:7::plexInit:76 [ plexInit::i#2 ] ) + [93] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:4::init:7::plexInit:76 [ plexInit::i#2 ] ) + [94] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) + [95] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) + to:plexInit::@return +plexInit::@return: scope:[plexInit] from plexInit::@1 + [96] return [ ] ( main:4::init:7::plexInit:76 [ ] ) + to:@return + +DOMINATORS +@begin dominated by @begin +@28 dominated by @28 @begin +@31 dominated by @28 @31 @begin +@end dominated by @end @28 @31 @begin +main dominated by @28 main @31 @begin +main::@1 dominated by @28 main main::@1 @31 @begin +main::@return dominated by main::@return @28 main main::@1 @31 @begin +loop dominated by @28 main loop main::@1 @31 @begin +loop::@1 dominated by @28 main loop loop::@1 main::@1 @31 @begin +loop::@4 dominated by @28 main loop loop::@1 main::@1 loop::@4 @31 @begin +loop::@6 dominated by @28 main loop loop::@1 main::@1 loop::@6 loop::@4 @31 @begin +loop::@7 dominated by @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin +loop::@18 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin +loop::@26 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@26 @begin +loop::@8 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 @begin +loop::@27 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 loop::@27 @begin +loop::@9 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@9 loop::@26 loop::@27 @begin +loop::plexShowNextYpos1 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@9 loop::@26 loop::@27 @begin loop::plexShowNextYpos1 +loop::@25 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@9 loop::@25 loop::@26 loop::@27 @begin loop::plexShowNextYpos1 +loop::@10 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@9 loop::@25 loop::@26 loop::@27 @begin loop::@10 loop::plexShowNextYpos1 +loop::@12 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@9 loop::@25 loop::@26 loop::@27 @begin loop::@10 loop::plexShowNextYpos1 loop::@12 +loop::@28 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@9 loop::@25 loop::@26 loop::@27 loop::@28 @begin loop::@10 loop::plexShowNextYpos1 loop::@12 +loop::@23 dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 loop::@23 @31 loop::@8 loop::@9 loop::@25 loop::@26 loop::@27 loop::@28 @begin loop::@10 loop::plexShowNextYpos1 loop::@12 +plexShowSprite dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 @begin plexShowSprite +plexShowSprite::@4 dominated by loop::@18 @28 plexShowSprite::@4 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 @begin plexShowSprite +plexShowSprite::@2 dominated by loop::@18 @28 main plexShowSprite::@2 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 @begin plexShowSprite +plexShowSprite::@return dominated by loop::@18 @28 main plexShowSprite::@2 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 @begin plexShowSprite plexShowSprite::@return +plexShowSprite::@7 dominated by loop::@18 plexShowSprite::@7 @28 main plexShowSprite::@2 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 @begin plexShowSprite +plexShowSprite::@1 dominated by loop::@18 @28 main plexShowSprite::@1 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 loop::@8 loop::@26 @begin plexShowSprite +plexSort dominated by loop::@18 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort +plexSort::@1 dominated by loop::@18 plexSort::@1 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort +plexSort::@10 dominated by loop::@18 plexSort::@1 @28 main plexSort::@10 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort +plexSort::@3 dominated by loop::@18 plexSort::@1 @28 main plexSort::@10 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort plexSort::@3 +plexSort::@5 dominated by loop::@18 plexSort::@1 @28 main plexSort::@10 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort plexSort::@3 plexSort::@5 +plexSort::@2 dominated by plexSort::@2 loop::@18 plexSort::@1 @28 main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort +plexSort::@return dominated by plexSort::@2 loop::@18 plexSort::@1 @28 plexSort::@return main loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort +plexSort::@7 dominated by loop::@18 plexSort::@1 @28 main plexSort::@10 loop loop::@1 main::@1 loop::@6 loop::@7 loop::@4 @31 @begin plexSort plexSort::@7 plexSort::@3 +init dominated by @28 main @31 init @begin +init::@1 dominated by @28 main @31 init @begin init::@1 +init::@3 dominated by @28 main @31 init @begin init::@3 init::@1 +init::@2 dominated by @28 main @31 init @begin init::@3 init::@2 init::@1 +init::@return dominated by @28 main @31 init @begin init::@return init::@3 init::@2 init::@1 +plexInit dominated by @28 main @31 init @begin plexInit +plexInit::plexSetScreen1 dominated by @28 plexInit::plexSetScreen1 main @31 init @begin plexInit +plexInit::@1 dominated by @28 plexInit::plexSetScreen1 main @31 plexInit::@1 init @begin plexInit +plexInit::@return dominated by @28 plexInit::plexSetScreen1 main @31 plexInit::@1 init @begin plexInit plexInit::@return + +NATURAL LOOPS +Found back edge: Loop head: loop::@4 tails: loop::@4 blocks: null +Found back edge: Loop head: loop::@7 tails: loop::@7 blocks: null +Found back edge: Loop head: loop::@8 tails: loop::@27 blocks: null +Found back edge: Loop head: loop::@10 tails: loop::@10 blocks: null +Found back edge: Loop head: loop::@9 tails: loop::@28 blocks: null +Found back edge: Loop head: loop::@1 tails: loop::@23 blocks: null +Found back edge: Loop head: plexSort::@1 tails: plexSort::@2 blocks: null +Found back edge: Loop head: plexSort::@3 tails: plexSort::@7 blocks: null +Found back edge: Loop head: init::@1 tails: init::@1 blocks: null +Found back edge: Loop head: init::@2 tails: init::@2 blocks: null +Found back edge: Loop head: plexInit::@1 tails: plexInit::@1 blocks: null +Populated: Loop head: loop::@4 tails: loop::@4 blocks: loop::@4 +Populated: Loop head: loop::@7 tails: loop::@7 blocks: loop::@7 +Populated: Loop head: loop::@8 tails: loop::@27 blocks: loop::@27 loop::@8 +Populated: Loop head: loop::@10 tails: loop::@10 blocks: loop::@10 +Populated: Loop head: loop::@9 tails: loop::@28 blocks: loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 +Populated: Loop head: loop::@1 tails: loop::@23 blocks: loop::@23 loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 loop::@27 loop::@8 loop::@26 loop::@18 loop::@7 loop::@6 loop::@4 loop::@1 +Populated: Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 +Populated: Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 +Populated: Loop head: init::@1 tails: init::@1 blocks: init::@1 +Populated: Loop head: init::@2 tails: init::@2 blocks: init::@2 +Populated: Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 +Loop head: loop::@4 tails: loop::@4 blocks: loop::@4 +Loop head: loop::@7 tails: loop::@7 blocks: loop::@7 +Loop head: loop::@8 tails: loop::@27 blocks: loop::@27 loop::@8 +Loop head: loop::@10 tails: loop::@10 blocks: loop::@10 +Loop head: loop::@9 tails: loop::@28 blocks: loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 +Loop head: loop::@1 tails: loop::@23 blocks: loop::@23 loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 loop::@27 loop::@8 loop::@26 loop::@18 loop::@7 loop::@6 loop::@4 loop::@1 +Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 +Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 +Loop head: init::@1 tails: init::@1 blocks: init::@1 +Loop head: init::@2 tails: init::@2 blocks: init::@2 +Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 + +NATURAL LOOPS WITH DEPTH +Found 0 loops in scope [] +Found 0 loops in scope [main] +Found 2 loops in scope [init] + Loop head: init::@1 tails: init::@1 blocks: init::@1 + Loop head: init::@2 tails: init::@2 blocks: init::@2 +Found 6 loops in scope [loop] + Loop head: loop::@4 tails: loop::@4 blocks: loop::@4 + Loop head: loop::@7 tails: loop::@7 blocks: loop::@7 + Loop head: loop::@8 tails: loop::@27 blocks: loop::@27 loop::@8 + Loop head: loop::@10 tails: loop::@10 blocks: loop::@10 + Loop head: loop::@9 tails: loop::@28 blocks: loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 + Loop head: loop::@1 tails: loop::@23 blocks: loop::@23 loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 loop::@27 loop::@8 loop::@26 loop::@18 loop::@7 loop::@6 loop::@4 loop::@1 +Found 1 loops in scope [plexInit] + Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 +Found 2 loops in scope [plexSort] + Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 + Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 +Found 0 loops in scope [plexShowSprite] +Loop head: loop::@4 tails: loop::@4 blocks: loop::@4 depth: 2 +Loop head: loop::@7 tails: loop::@7 blocks: loop::@7 depth: 2 +Loop head: loop::@8 tails: loop::@27 blocks: loop::@27 loop::@8 depth: 2 +Loop head: loop::@10 tails: loop::@10 blocks: loop::@10 depth: 3 +Loop head: loop::@9 tails: loop::@28 blocks: loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 depth: 2 +Loop head: loop::@1 tails: loop::@23 blocks: loop::@23 loop::@28 loop::@12 loop::@10 loop::@25 loop::plexShowNextYpos1 loop::@9 loop::@27 loop::@8 loop::@26 loop::@18 loop::@7 loop::@6 loop::@4 loop::@1 depth: 1 +Loop head: plexSort::@1 tails: plexSort::@2 blocks: plexSort::@2 plexSort::@1 plexSort::@5 plexSort::@3 plexSort::@7 plexSort::@10 depth: 2 +Loop head: plexSort::@3 tails: plexSort::@7 blocks: plexSort::@7 plexSort::@3 depth: 3 +Loop head: init::@1 tails: init::@1 blocks: init::@1 depth: 1 +Loop head: init::@2 tails: init::@2 blocks: init::@2 depth: 1 +Loop head: plexInit::@1 tails: plexInit::@1 blocks: plexInit::@1 depth: 1 + + +VARIABLE REGISTER WEIGHTS +(byte) BLACK +(byte*) BORDERCOL +(byte*) D011 +(byte) GREEN +(byte) PLEX_COUNT +(byte[PLEX_COUNT#0]) PLEX_PTR +(byte*) PLEX_SCREEN_PTR +(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX +(word[PLEX_COUNT#0]) PLEX_XPOS +(byte[PLEX_COUNT#0]) PLEX_YPOS +(byte*) RASTER +(byte*) SCREEN +(byte*) SPRITE +(byte*) SPRITES_COLS +(byte*) SPRITES_ENABLE +(byte*) SPRITES_XMSB +(byte*) SPRITES_XPOS +(byte*) SPRITES_YPOS +(byte) VIC_DEN +(byte) VIC_RSEL +(byte*) YSIN +(void()) init() +(byte~) init::$6 22.0 +(byte) init::ss +(byte) init::ss#1 16.5 +(byte) init::ss#2 16.5 +(byte) init::sx +(byte) init::sx#1 16.5 +(byte) init::sx#2 8.8 +(word) init::xp +(word) init::xp#1 7.333333333333333 +(word) init::xp#2 8.25 +(void()) loop() +(byte) loop::plexShowNextYpos1_return +(byte) loop::plexShowNextYpos1_return#0 202.0 +(byte) loop::rasterY +(byte) loop::rasterY#0 551.0 +(byte) loop::sin_idx +(byte) loop::sin_idx#1 1.2222222222222223 +(byte) loop::sin_idx#6 3.666666666666667 +(byte) loop::ss +(byte) loop::ss#1 151.5 +(byte) loop::ss#2 101.0 +(byte) loop::ss2 +(byte) loop::ss2#1 151.5 +(byte) loop::ss2#6 28.857142857142858 +(byte) loop::sy +(byte) loop::sy#1 151.5 +(byte) loop::sy#2 101.0 +(byte) loop::y_idx +(byte) loop::y_idx#1 67.33333333333333 +(byte) loop::y_idx#2 157.0 +(byte~) loop::y_idx#3 22.0 +(void()) main() +(void()) plexInit((byte*) plexInit::screen) +(byte) plexInit::i +(byte) plexInit::i#1 16.5 +(byte) plexInit::i#2 22.0 +(byte*~) plexInit::plexSetScreen1_$0 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::screen +(void()) plexShowSprite() +(byte~) plexShowSprite::$2 4.0 +(byte~) plexShowSprite::$3 4.0 +(byte/word/dword~) plexShowSprite::$5 4.0 +(byte/signed word/word/dword/signed dword~) plexShowSprite::$6 4.0 +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 1.2000000000000002 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 2.0 +(void()) plexSort() +(byte) plexSort::m +(byte) plexSort::m#1 151.5 +(byte) plexSort::m#2 42.08333333333333 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 30.299999999999997 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 150.375 +(byte) plexSort::s +(byte) plexSort::s#1 1368.3333333333335 +(byte) plexSort::s#2 202.0 +(byte) plexSort::s#3 2052.5 +(byte~) plexSort::s#6 202.0 +(byte) plex_show_idx +(byte) plex_show_idx#13 14.999999999999998 +(byte) plex_show_idx#15 16.944444444444443 +(byte) plex_show_idx#25 202.0 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#13 17.333333333333336 +(byte) plex_sprite_idx#15 10.736842105263158 +(byte) plex_sprite_idx#24 202.0 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#14 13.866666666666665 +(byte) plex_sprite_msb#17 14.571428571428571 +(byte) plex_sprite_msb#26 2.0 +(byte) plex_sprite_msb#29 202.0 + +Initial phi equivalence classes +[ loop::sin_idx#6 loop::sin_idx#1 ] +[ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +[ loop::sy#2 loop::sy#1 ] +[ loop::ss#2 loop::ss#1 ] +[ loop::ss2#6 loop::ss2#1 ] +[ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +[ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] +[ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +[ plexSort::m#2 plexSort::m#1 ] +[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +[ init::sx#2 init::sx#1 ] +[ init::xp#2 init::xp#1 ] +[ init::ss#2 init::ss#1 ] +[ plexInit::i#2 plexInit::i#1 ] +Added variable loop::plexShowNextYpos1_return#0 to zero page equivalence class [ loop::plexShowNextYpos1_return#0 ] +Added variable loop::rasterY#0 to zero page equivalence class [ loop::rasterY#0 ] +Added variable plexShowSprite::plex_sprite_idx2#0 to zero page equivalence class [ plexShowSprite::plex_sprite_idx2#0 ] +Added variable plexShowSprite::xpos_idx#0 to zero page equivalence class [ plexShowSprite::xpos_idx#0 ] +Added variable plexShowSprite::$2 to zero page equivalence class [ plexShowSprite::$2 ] +Added variable plexShowSprite::$3 to zero page equivalence class [ plexShowSprite::$3 ] +Added variable plexShowSprite::$5 to zero page equivalence class [ plexShowSprite::$5 ] +Added variable plexShowSprite::$6 to zero page equivalence class [ plexShowSprite::$6 ] +Added variable plexSort::nxt_idx#0 to zero page equivalence class [ plexSort::nxt_idx#0 ] +Added variable plexSort::nxt_y#0 to zero page equivalence class [ plexSort::nxt_y#0 ] +Added variable plexSort::s#2 to zero page equivalence class [ plexSort::s#2 ] +Added variable init::$6 to zero page equivalence class [ init::$6 ] +Complete equivalence classes +[ loop::sin_idx#6 loop::sin_idx#1 ] +[ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +[ loop::sy#2 loop::sy#1 ] +[ loop::ss#2 loop::ss#1 ] +[ loop::ss2#6 loop::ss2#1 ] +[ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +[ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] +[ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +[ plexSort::m#2 plexSort::m#1 ] +[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +[ init::sx#2 init::sx#1 ] +[ init::xp#2 init::xp#1 ] +[ init::ss#2 init::ss#1 ] +[ plexInit::i#2 plexInit::i#1 ] +[ loop::plexShowNextYpos1_return#0 ] +[ loop::rasterY#0 ] +[ plexShowSprite::plex_sprite_idx2#0 ] +[ plexShowSprite::xpos_idx#0 ] +[ plexShowSprite::$2 ] +[ plexShowSprite::$3 ] +[ plexShowSprite::$5 ] +[ plexShowSprite::$6 ] +[ plexSort::nxt_idx#0 ] +[ plexSort::nxt_y#0 ] +[ plexSort::s#2 ] +[ init::$6 ] +Allocated zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +Allocated zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +Allocated zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ] +Allocated zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] +Allocated zp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] +Allocated zp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +Allocated zp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] +Allocated zp ZP_BYTE:9 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +Allocated zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] +Allocated zp ZP_BYTE:11 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Allocated zp ZP_BYTE:12 [ init::sx#2 init::sx#1 ] +Allocated zp ZP_WORD:13 [ init::xp#2 init::xp#1 ] +Allocated zp ZP_BYTE:15 [ init::ss#2 init::ss#1 ] +Allocated zp ZP_BYTE:16 [ plexInit::i#2 plexInit::i#1 ] +Allocated zp ZP_BYTE:17 [ loop::plexShowNextYpos1_return#0 ] +Allocated zp ZP_BYTE:18 [ loop::rasterY#0 ] +Allocated zp ZP_BYTE:19 [ plexShowSprite::plex_sprite_idx2#0 ] +Allocated zp ZP_BYTE:20 [ plexShowSprite::xpos_idx#0 ] +Allocated zp ZP_BYTE:21 [ plexShowSprite::$2 ] +Allocated zp ZP_BYTE:22 [ plexShowSprite::$3 ] +Allocated zp ZP_BYTE:23 [ plexShowSprite::$5 ] +Allocated zp ZP_BYTE:24 [ plexShowSprite::$6 ] +Allocated zp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] +Allocated zp ZP_BYTE:26 [ plexSort::nxt_y#0 ] +Allocated zp ZP_BYTE:27 [ plexSort::s#2 ] +Allocated zp ZP_BYTE:28 [ init::$6 ] + +INITIAL ASM +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + .const BLACK = 0 + .const GREEN = 5 + .const PLEX_COUNT = $18 + .label SPRITE = $2000 + .label SCREEN = $400 + .label YSIN = $2100 + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label plex_sprite_idx = 7 + .label plex_show_idx = 8 + .label plex_sprite_msb = 9 +//SEG2 @begin +bbegin: + jmp b28 +//SEG3 @28 +b28: +//SEG4 kickasm(location (const byte*) YSIN#0) {{ .var min = 51 .var max = 250-21 .var ampl = max-min; .for(var i=0;i<256;i++) .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) }} +//SEG5 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) .byte pic.getSinglecolorByte(x,y) }} +//SEG6 [3] phi from @28 to @31 [phi:@28->@31] +b31_from_b28: + jmp b31 +//SEG7 @31 +b31: +//SEG8 [4] call main [ ] ( ) + jsr main +//SEG9 [5] phi from @31 to @end [phi:@31->@end] +bend_from_b31: + jmp bend +//SEG10 @end +bend: +//SEG11 main +main: { + //SEG12 asm { sei } + sei + //SEG13 [7] call init [ ] ( main:4 [ ] ) + jsr init + //SEG14 [8] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + //SEG15 main::@1 + b1: + //SEG16 [9] call loop [ ] ( main:4 [ ] ) + //SEG17 [11] phi from main::@1 to loop [phi:main::@1->loop] + loop_from_b1: + jsr loop + jmp breturn + //SEG18 main::@return + breturn: + //SEG19 [10] return [ ] ( main:4 [ ] ) + rts +} +//SEG20 loop +loop: { + .label y_idx = 3 + .label sy = 4 + .label sin_idx = 2 + .label ss = 5 + .label plexShowNextYpos1_return = $11 + .label rasterY = $12 + .label ss2 = 6 + //SEG21 [12] phi from loop to loop::@1 [phi:loop->loop::@1] + b1_from_loop: + //SEG22 [12] phi (byte) loop::sin_idx#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + lda #0 + sta sin_idx + jmp b1 + //SEG23 loop::@1 + b1: + jmp b4 + //SEG24 loop::@4 + b4: + //SEG25 [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 + lda RASTER + cmp #$ff + bne b4 + jmp b6 + //SEG26 loop::@6 + b6: + //SEG27 [14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG28 [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 [ loop::sin_idx#6 loop::y_idx#3 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#3 ] ) -- vbuz1=vbuz2 + lda sin_idx + sta y_idx + //SEG29 [16] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + b7_from_b6: + //SEG30 [16] phi (byte) loop::sy#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@6->loop::@7#0] -- vbuz1=vbuc1 + lda #0 + sta sy + //SEG31 [16] phi (byte) loop::y_idx#2 = (byte~) loop::y_idx#3 [phi:loop::@6->loop::@7#1] -- register_copy + jmp b7 + //SEG32 [16] phi from loop::@7 to loop::@7 [phi:loop::@7->loop::@7] + b7_from_b7: + //SEG33 [16] phi (byte) loop::sy#2 = (byte) loop::sy#1 [phi:loop::@7->loop::@7#0] -- register_copy + //SEG34 [16] phi (byte) loop::y_idx#2 = (byte) loop::y_idx#1 [phi:loop::@7->loop::@7#1] -- register_copy + jmp b7 + //SEG35 loop::@7 + b7: + //SEG36 [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 + ldy y_idx + lda YSIN,y + ldy sy + sta PLEX_YPOS,y + //SEG37 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) -- vbuz1=vbuz1_plus_vbuc1 + lda #$a + clc + adc y_idx + sta y_idx + //SEG38 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) -- vbuz1=_inc_vbuz1 + inc sy + //SEG39 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda sy + cmp #PLEX_COUNT-1+1 + bne b7_from_b7 + jmp b18 + //SEG40 loop::@18 + b18: + //SEG41 [21] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- vbuz1=vbuz1_plus_1 + inc sin_idx + //SEG42 [22] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG43 [23] call plexSort [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + //SEG44 [59] phi from loop::@18 to plexSort [phi:loop::@18->plexSort] + plexSort_from_b18: + jsr plexSort + jmp b26 + //SEG45 loop::@26 + b26: + //SEG46 [24] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG47 [25] phi from loop::@26 to loop::@8 [phi:loop::@26->loop::@8] + b8_from_b26: + //SEG48 [25] phi (byte) loop::ss#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#0] -- vbuz1=vbuc1 + lda #0 + sta ss + //SEG49 [25] phi (byte) plex_sprite_msb#29 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:loop::@26->loop::@8#1] -- vbuz1=vbuc1 + lda #1 + sta plex_sprite_msb + //SEG50 [25] phi (byte) plex_show_idx#25 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#2] -- vbuz1=vbuc1 + lda #0 + sta plex_show_idx + //SEG51 [25] phi (byte) plex_sprite_idx#24 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#3] -- vbuz1=vbuc1 + lda #0 + sta plex_sprite_idx + jmp b8 + //SEG52 [25] phi from loop::@27 to loop::@8 [phi:loop::@27->loop::@8] + b8_from_b27: + //SEG53 [25] phi (byte) loop::ss#2 = (byte) loop::ss#1 [phi:loop::@27->loop::@8#0] -- register_copy + //SEG54 [25] phi (byte) plex_sprite_msb#29 = (byte) plex_sprite_msb#17 [phi:loop::@27->loop::@8#1] -- register_copy + //SEG55 [25] phi (byte) plex_show_idx#25 = (byte) plex_show_idx#15 [phi:loop::@27->loop::@8#2] -- register_copy + //SEG56 [25] phi (byte) plex_sprite_idx#24 = (byte) plex_sprite_idx#15 [phi:loop::@27->loop::@8#3] -- register_copy + jmp b8 + //SEG57 loop::@8 + b8: + //SEG58 [26] call plexShowSprite [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + //SEG59 [39] phi from loop::@8 to plexShowSprite [phi:loop::@8->plexShowSprite] + plexShowSprite_from_b8: + //SEG60 [39] phi (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#29 [phi:loop::@8->plexShowSprite#0] -- register_copy + //SEG61 [39] phi (byte) plex_show_idx#13 = (byte) plex_show_idx#25 [phi:loop::@8->plexShowSprite#1] -- register_copy + //SEG62 [39] phi (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#24 [phi:loop::@8->plexShowSprite#2] -- register_copy + jsr plexShowSprite + jmp b27 + //SEG63 loop::@27 + b27: + //SEG64 [27] (byte) loop::ss#1 ← ++ (byte) loop::ss#2 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) -- vbuz1=_inc_vbuz1 + inc ss + //SEG65 [28] if((byte) loop::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ss + cmp #8 + bne b8_from_b27 + //SEG66 [29] phi from loop::@27 to loop::@9 [phi:loop::@27->loop::@9] + b9_from_b27: + //SEG67 [29] phi (byte) loop::ss2#6 = (byte/signed byte/word/signed word/dword/signed dword) 8 [phi:loop::@27->loop::@9#0] -- vbuz1=vbuc1 + lda #8 + sta ss2 + jmp b9 + //SEG68 [29] phi from loop::@28 to loop::@9 [phi:loop::@28->loop::@9] + b9_from_b28: + //SEG69 [29] phi (byte) loop::ss2#6 = (byte) loop::ss2#1 [phi:loop::@28->loop::@9#0] -- register_copy + jmp b9 + //SEG70 loop::@9 + b9: + //SEG71 [30] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + jmp plexShowNextYpos1 + //SEG72 loop::plexShowNextYpos1 + plexShowNextYpos1: + //SEG73 [31] (byte) loop::plexShowNextYpos1_return#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#15)) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ) -- vbuz1=pbuc1_derefidx_pbuc2_derefidx_vbuz2 + ldy plex_show_idx + lda PLEX_SORTED_IDX,y + tay + lda PLEX_YPOS,y + sta plexShowNextYpos1_return + jmp b25 + //SEG74 loop::@25 + b25: + //SEG75 [32] (byte) loop::rasterY#0 ← (byte) loop::plexShowNextYpos1_return#0 - (byte/signed byte/word/signed word/dword/signed dword) 8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) -- vbuz1=vbuz2_minus_vbuc1 + lda plexShowNextYpos1_return + sec + sbc #8 + sta rasterY + jmp b10 + //SEG76 loop::@10 + b10: + //SEG77 [33] if(*((const byte*) RASTER#0)<(byte) loop::rasterY#0) goto loop::@10 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) -- _deref_pbuc1_lt_vbuz1_then_la1 + lda RASTER + cmp rasterY + bcc b10 + jmp b12 + //SEG78 loop::@12 + b12: + //SEG79 [34] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG80 [35] call plexShowSprite [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + //SEG81 [39] phi from loop::@12 to plexShowSprite [phi:loop::@12->plexShowSprite] + plexShowSprite_from_b12: + //SEG82 [39] phi (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#17 [phi:loop::@12->plexShowSprite#0] -- register_copy + //SEG83 [39] phi (byte) plex_show_idx#13 = (byte) plex_show_idx#15 [phi:loop::@12->plexShowSprite#1] -- register_copy + //SEG84 [39] phi (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#15 [phi:loop::@12->plexShowSprite#2] -- register_copy + jsr plexShowSprite + jmp b28 + //SEG85 loop::@28 + b28: + //SEG86 [36] (byte) loop::ss2#1 ← ++ (byte) loop::ss2#6 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) -- vbuz1=_inc_vbuz1 + inc ss2 + //SEG87 [37] if((byte) loop::ss2#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ss2 + cmp #PLEX_COUNT-1+1 + bne b9_from_b28 + jmp b23 + //SEG88 loop::@23 + b23: + //SEG89 [38] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + //SEG90 [12] phi from loop::@23 to loop::@1 [phi:loop::@23->loop::@1] + b1_from_b23: + //SEG91 [12] phi (byte) loop::sin_idx#6 = (byte) loop::sin_idx#1 [phi:loop::@23->loop::@1#0] -- register_copy + jmp b1 +} +//SEG92 plexShowSprite +plexShowSprite: { + .label _2 = $15 + .label _3 = $16 + .label _5 = $17 + .label _6 = $18 + .label plex_sprite_idx2 = $13 + .label xpos_idx = $14 + //SEG93 [40] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- vbuz1=vbuz2_rol_1 + lda plex_sprite_idx + asl + sta plex_sprite_idx2 + //SEG94 [41] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_pbuc3_derefidx_vbuz2 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_YPOS,x + ldx plex_sprite_idx2 + sta SPRITES_YPOS,x + //SEG95 [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#13) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_pbuc3_derefidx_vbuz2 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_PTR,x + ldx plex_sprite_idx + sta PLEX_SCREEN_PTR,x + //SEG96 [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_rol_1 + ldy plex_show_idx + lda PLEX_SORTED_IDX,y + asl + sta xpos_idx + //SEG97 [44] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ) -- vbuz1=_lo_pwuc1_derefidx_vbuz2 + ldy xpos_idx + lda PLEX_XPOS,y + sta _2 + //SEG98 [45] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + lda _2 + ldy plex_sprite_idx2 + sta SPRITES_XPOS,y + //SEG99 [46] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ) -- vbuz1=_hi_pwuc1_derefidx_vbuz2 + ldy xpos_idx + lda PLEX_XPOS+1,y + sta _3 + //SEG100 [47] if((byte~) plexShowSprite::$3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- vbuz1_neq_0_then_la1 + lda _3 + bne b1 + jmp b4 + //SEG101 plexShowSprite::@4 + b4: + //SEG102 [48] (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ) -- vbuz1=vbuc1_bxor_vbuz2 + lda plex_sprite_msb + eor #$ff + sta _5 + //SEG103 [49] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- _deref_pbuc1=_deref_pbuc1_band_vbuz1 + lda SPRITES_XMSB + and _5 + sta SPRITES_XMSB + jmp b2 + //SEG104 plexShowSprite::@2 + b2: + //SEG105 [50] (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 ← (byte) plex_sprite_idx#13 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ) -- vbuz1=vbuz2_plus_1 + ldy plex_sprite_idx + iny + sty _6 + //SEG106 [51] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda #7 + and _6 + sta plex_sprite_idx + //SEG107 [52] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#13 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ) -- vbuz1=_inc_vbuz1 + inc plex_show_idx + //SEG108 [53] (byte) plex_sprite_msb#26 ← (byte) plex_sprite_msb#14 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) -- vbuz1=vbuz1_rol_1 + asl plex_sprite_msb + //SEG109 [54] if((byte) plex_sprite_msb#26!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@7 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) -- vbuz1_neq_0_then_la1 + lda plex_sprite_msb + bne b7_from_b2 + //SEG110 [55] phi from plexShowSprite::@2 to plexShowSprite::@return [phi:plexShowSprite::@2->plexShowSprite::@return] + breturn_from_b2: + //SEG111 [55] phi (byte) plex_sprite_msb#17 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:plexShowSprite::@2->plexShowSprite::@return#0] -- vbuz1=vbuc1 + lda #1 + sta plex_sprite_msb + jmp breturn + //SEG112 plexShowSprite::@return + breturn: + //SEG113 [56] return [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + rts + //SEG114 [57] phi from plexShowSprite::@2 to plexShowSprite::@7 [phi:plexShowSprite::@2->plexShowSprite::@7] + b7_from_b2: + jmp b7 + //SEG115 plexShowSprite::@7 + b7: + //SEG116 [55] phi from plexShowSprite::@7 to plexShowSprite::@return [phi:plexShowSprite::@7->plexShowSprite::@return] + breturn_from_b7: + //SEG117 [55] phi (byte) plex_sprite_msb#17 = (byte) plex_sprite_msb#26 [phi:plexShowSprite::@7->plexShowSprite::@return#0] -- register_copy + jmp breturn + //SEG118 plexShowSprite::@1 + b1: + //SEG119 [58] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + lda SPRITES_XMSB + ora plex_sprite_msb + sta SPRITES_XMSB + jmp b2 +} +//SEG120 plexSort +plexSort: { + .label nxt_idx = $19 + .label nxt_y = $1a + .label m = $a + .label s = $b + .label s_2 = $1b + //SEG121 [60] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + b1_from_plexSort: + //SEG122 [60] phi (byte) plexSort::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + lda #0 + sta m + jmp b1 + //SEG123 [60] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + b1_from_b2: + //SEG124 [60] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + jmp b1 + //SEG125 plexSort::@1 + b1: + //SEG126 [61] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy m + lda PLEX_SORTED_IDX+1,y + sta nxt_idx + //SEG127 [62] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy nxt_idx + lda PLEX_YPOS,y + sta nxt_y + //SEG128 [63] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1_ge_pbuc1_derefidx_pbuc2_derefidx_vbuz2_then_la1 + lda nxt_y + ldx m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs b2 + jmp b10 + //SEG129 plexSort::@10 + b10: + //SEG130 [64] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) -- vbuz1=vbuz2 + lda m + sta s + //SEG131 [65] phi from plexSort::@10 plexSort::@7 to plexSort::@3 [phi:plexSort::@10/plexSort::@7->plexSort::@3] + b3_from_b10: + b3_from_b7: + //SEG132 [65] phi (byte) plexSort::s#3 = (byte~) plexSort::s#6 [phi:plexSort::@10/plexSort::@7->plexSort::@3#0] -- register_copy + jmp b3 + //SEG133 plexSort::@3 + b3: + //SEG134 [66] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy s + lda PLEX_SORTED_IDX,y + sta PLEX_SORTED_IDX+1,y + //SEG135 [67] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1=_dec_vbuz1 + dec s + //SEG136 [68] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda s + cmp #$ff + bne b7 + jmp b5 + //SEG137 plexSort::@5 + b5: + //SEG138 [69] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) -- vbuz1=_inc_vbuz2 + ldy s + iny + sty s_2 + //SEG139 [70] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + lda nxt_idx + ldy s_2 + sta PLEX_SORTED_IDX,y + jmp b2 + //SEG140 plexSort::@2 + b2: + //SEG141 [71] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) -- vbuz1=_inc_vbuz1 + inc m + //SEG142 [72] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda m + cmp #PLEX_COUNT-2+1 + bne b1_from_b2 + jmp breturn + //SEG143 plexSort::@return + breturn: + //SEG144 [73] return [ ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 ] ) + rts + //SEG145 plexSort::@7 + b7: + //SEG146 [74] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_lt_pbuc1_derefidx_pbuc2_derefidx_vbuz2_then_la1 + lda nxt_y + ldx s + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcc b3_from_b7 + jmp b5 +} +//SEG147 init +init: { + .label _6 = $1c + .label xp = $d + .label sx = $c + .label ss = $f + //SEG148 [75] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:4::init:7 [ ] ) -- _deref_pbuc1=vbuc2 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + //SEG149 [76] call plexInit [ ] ( main:4::init:7 [ ] ) + //SEG150 [90] phi from init to plexInit [phi:init->plexInit] + plexInit_from_init: + jsr plexInit + //SEG151 [77] phi from init to init::@1 [phi:init->init::@1] + b1_from_init: + //SEG152 [77] phi (word) init::xp#2 = (byte/signed byte/word/signed word/dword/signed dword) 32 [phi:init->init::@1#0] -- vwuz1=vbuc1 + lda #<$20 + sta xp + lda #>$20 + sta xp+1 + //SEG153 [77] phi (byte) init::sx#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init->init::@1#1] -- vbuz1=vbuc1 + lda #0 + sta sx + jmp b1 + //SEG154 [77] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + b1_from_b1: + //SEG155 [77] phi (word) init::xp#2 = (word) init::xp#1 [phi:init::@1->init::@1#0] -- register_copy + //SEG156 [77] phi (byte) init::sx#2 = (byte) init::sx#1 [phi:init::@1->init::@1#1] -- register_copy + jmp b1 + //SEG157 init::@1 + b1: + //SEG158 [78] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 + ldy sx + lda #$ff&SPRITE/$40 + sta PLEX_PTR,y + //SEG159 [79] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ init::sx#2 init::xp#2 init::$6 ] ( main:4::init:7 [ init::sx#2 init::xp#2 init::$6 ] ) -- vbuz1=vbuz2_rol_1 + lda sx + asl + sta _6 + //SEG160 [80] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 + ldy _6 + lda xp + sta PLEX_XPOS,y + lda xp+1 + sta PLEX_XPOS+1,y + //SEG161 [81] (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 [ init::sx#2 init::xp#1 ] ( main:4::init:7 [ init::sx#2 init::xp#1 ] ) -- vwuz1=vwuz1_plus_vbuc1 + clc + lda xp + adc #<$c + sta xp + lda xp+1 + adc #>$c + sta xp+1 + //SEG162 [82] (byte) init::sx#1 ← ++ (byte) init::sx#2 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) -- vbuz1=_inc_vbuz1 + inc sx + //SEG163 [83] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda sx + cmp #PLEX_COUNT-1+1 + bne b1_from_b1 + jmp b3 + //SEG164 init::@3 + b3: + //SEG165 [84] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:4::init:7 [ ] ) -- _deref_pbuc1=vbuc2 + lda #$ff + sta SPRITES_ENABLE + //SEG166 [85] phi from init::@3 to init::@2 [phi:init::@3->init::@2] + b2_from_b3: + //SEG167 [85] phi (byte) init::ss#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@3->init::@2#0] -- vbuz1=vbuc1 + lda #0 + sta ss + jmp b2 + //SEG168 [85] phi from init::@2 to init::@2 [phi:init::@2->init::@2] + b2_from_b2: + //SEG169 [85] phi (byte) init::ss#2 = (byte) init::ss#1 [phi:init::@2->init::@2#0] -- register_copy + jmp b2 + //SEG170 init::@2 + b2: + //SEG171 [86] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 + ldy ss + lda #GREEN + sta SPRITES_COLS,y + //SEG172 [87] (byte) init::ss#1 ← ++ (byte) init::ss#2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) -- vbuz1=_inc_vbuz1 + inc ss + //SEG173 [88] if((byte) init::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ss + cmp #8 + bne b2_from_b2 + jmp breturn + //SEG174 init::@return + breturn: + //SEG175 [89] return [ ] ( main:4::init:7 [ ] ) + rts +} +//SEG176 plexInit +plexInit: { + .label i = $10 + //SEG177 [91] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + plexSetScreen1_from_plexInit: + jmp plexSetScreen1 + //SEG178 plexInit::plexSetScreen1 + plexSetScreen1: + //SEG179 [92] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + b1_from_plexSetScreen1: + //SEG180 [92] phi (byte) plexInit::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b1 + //SEG181 [92] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + b1_from_b1: + //SEG182 [92] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + jmp b1 + //SEG183 plexInit::@1 + b1: + //SEG184 [93] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:4::init:7::plexInit:76 [ plexInit::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1 + ldy i + tya + sta PLEX_SORTED_IDX,y + //SEG185 [94] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG186 [95] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #PLEX_COUNT-1+1 + bne b1_from_b1 + jmp breturn + //SEG187 plexInit::@return + breturn: + //SEG188 [96] return [ ] ( main:4::init:7::plexInit:76 [ ] ) + rts +} + PLEX_XPOS: .fill 2*PLEX_COUNT, 0 + PLEX_YPOS: .fill PLEX_COUNT, 0 + PLEX_PTR: .fill PLEX_COUNT, 0 + PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 +.pc = YSIN "Inline" + .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + +.pc = SPRITE "Inline" + .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +Statement [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ] +Statement [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) always clobbers reg byte a +Statement [30] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] +Statement [31] (byte) loop::plexShowNextYpos1_return#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#15)) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ) always clobbers reg byte a +Statement [32] (byte) loop::rasterY#0 ← (byte) loop::plexShowNextYpos1_return#0 - (byte/signed byte/word/signed word/dword/signed dword) 8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) always clobbers reg byte a +Statement [38] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) always clobbers reg byte a +Statement [40] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] +Statement [41] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ plexShowSprite::plex_sprite_idx2#0 ] +Statement [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#13) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Statement [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte a +Statement [44] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ plexShowSprite::xpos_idx#0 ] +Statement [46] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ) always clobbers reg byte a +Statement [48] (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ) always clobbers reg byte a +Statement [49] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) always clobbers reg byte a +Statement [51] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ) always clobbers reg byte a +Statement [58] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) always clobbers reg byte a +Statement [66] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ plexSort::nxt_y#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +Statement [70] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) always clobbers reg byte a +Statement [74] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) always clobbers reg byte a +Statement [75] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:4::init:7 [ ] ) always clobbers reg byte a +Statement [78] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ init::sx#2 init::sx#1 ] +Statement [79] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ init::sx#2 init::xp#2 init::$6 ] ( main:4::init:7 [ init::sx#2 init::xp#2 init::$6 ] ) always clobbers reg byte a +Statement [80] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) always clobbers reg byte a +Statement [81] (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 [ init::sx#2 init::xp#1 ] ( main:4::init:7 [ init::sx#2 init::xp#1 ] ) always clobbers reg byte a +Statement [84] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:4::init:7 [ ] ) always clobbers reg byte a +Statement [86] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ init::ss#2 init::ss#1 ] +Statement [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) always clobbers reg byte a +Statement [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) always clobbers reg byte a +Statement [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) always clobbers reg byte a +Statement [30] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) always clobbers reg byte a +Statement [31] (byte) loop::plexShowNextYpos1_return#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#15)) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ) always clobbers reg byte a +Statement [32] (byte) loop::rasterY#0 ← (byte) loop::plexShowNextYpos1_return#0 - (byte/signed byte/word/signed word/dword/signed dword) 8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) always clobbers reg byte a +Statement [38] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) always clobbers reg byte a +Statement [40] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Statement [41] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Statement [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#13) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) always clobbers reg byte a +Statement [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) always clobbers reg byte a +Statement [44] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ) always clobbers reg byte a +Statement [46] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ) always clobbers reg byte a +Statement [48] (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ) always clobbers reg byte a +Statement [49] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) always clobbers reg byte a +Statement [51] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ) always clobbers reg byte a +Statement [58] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) always clobbers reg byte a +Statement [63] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) always clobbers reg byte a +Statement [66] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) always clobbers reg byte a +Statement [70] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) always clobbers reg byte a +Statement [74] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) always clobbers reg byte a +Statement [75] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:4::init:7 [ ] ) always clobbers reg byte a +Statement [78] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) always clobbers reg byte a +Statement [79] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ init::sx#2 init::xp#2 init::$6 ] ( main:4::init:7 [ init::sx#2 init::xp#2 init::$6 ] ) always clobbers reg byte a +Statement [80] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) always clobbers reg byte a +Statement [81] (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 [ init::sx#2 init::xp#1 ] ( main:4::init:7 [ init::sx#2 init::xp#1 ] ) always clobbers reg byte a +Statement [84] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:4::init:7 [ ] ) always clobbers reg byte a +Statement [86] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:11 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:12 [ init::sx#2 init::sx#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:13 [ init::xp#2 init::xp#1 ] : zp ZP_WORD:13 , +Potential registers zp ZP_BYTE:15 [ init::ss#2 init::ss#1 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:16 [ plexInit::i#2 plexInit::i#1 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:17 [ loop::plexShowNextYpos1_return#0 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:18 [ loop::rasterY#0 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:19 [ plexShowSprite::plex_sprite_idx2#0 ] : zp ZP_BYTE:19 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:20 [ plexShowSprite::xpos_idx#0 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:21 [ plexShowSprite::$2 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:22 [ plexShowSprite::$3 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:23 [ plexShowSprite::$5 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:24 [ plexShowSprite::$6 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ plexSort::nxt_y#0 ] : zp ZP_BYTE:26 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:27 [ plexSort::s#2 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:28 [ init::$6 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plexSort] 3,622.83: zp ZP_BYTE:11 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 202: zp ZP_BYTE:27 [ plexSort::s#2 ] 193.58: zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] 150.38: zp ZP_BYTE:26 [ plexSort::nxt_y#0 ] 30.3: zp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] +Uplift Scope [loop] 551: zp ZP_BYTE:18 [ loop::rasterY#0 ] 252.5: zp ZP_BYTE:4 [ loop::sy#2 loop::sy#1 ] 252.5: zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] 246.33: zp ZP_BYTE:3 [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] 202: zp ZP_BYTE:17 [ loop::plexShowNextYpos1_return#0 ] 180.36: zp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] 4.89: zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +Uplift Scope [] 233.94: zp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] 232.44: zp ZP_BYTE:9 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] 230.07: zp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +Uplift Scope [init] 33: zp ZP_BYTE:15 [ init::ss#2 init::ss#1 ] 25.3: zp ZP_BYTE:12 [ init::sx#2 init::sx#1 ] 22: zp ZP_BYTE:28 [ init::$6 ] 15.58: zp ZP_WORD:13 [ init::xp#2 init::xp#1 ] +Uplift Scope [plexInit] 38.5: zp ZP_BYTE:16 [ plexInit::i#2 plexInit::i#1 ] +Uplift Scope [plexShowSprite] 4: zp ZP_BYTE:21 [ plexShowSprite::$2 ] 4: zp ZP_BYTE:22 [ plexShowSprite::$3 ] 4: zp ZP_BYTE:23 [ plexShowSprite::$5 ] 4: zp ZP_BYTE:24 [ plexShowSprite::$6 ] 2: zp ZP_BYTE:20 [ plexShowSprite::xpos_idx#0 ] 1.2: zp ZP_BYTE:19 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplift Scope [main] + +Uplifting [plexSort] best 81021 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::s#2 ] zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] zp ZP_BYTE:26 [ plexSort::nxt_y#0 ] zp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] +Limited combination testing to 100 combinations of 324 possible. +Uplifting [loop] best 79291 combination zp ZP_BYTE:18 [ loop::rasterY#0 ] reg byte y [ loop::sy#2 loop::sy#1 ] zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] zp ZP_BYTE:17 [ loop::plexShowNextYpos1_return#0 ] zp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +Limited combination testing to 100 combinations of 3888 possible. +Uplifting [] best 79291 combination zp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] zp ZP_BYTE:9 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] zp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +Uplifting [init] best 79001 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] reg byte a [ init::$6 ] zp ZP_WORD:13 [ init::xp#2 init::xp#1 ] +Uplifting [plexInit] best 78881 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] +Uplifting [plexShowSprite] best 78861 combination reg byte a [ plexShowSprite::$2 ] reg byte a [ plexShowSprite::$3 ] reg byte a [ plexShowSprite::$5 ] reg byte a [ plexShowSprite::$6 ] zp ZP_BYTE:20 [ plexShowSprite::xpos_idx#0 ] zp ZP_BYTE:19 [ plexShowSprite::plex_sprite_idx2#0 ] +Limited combination testing to 100 combinations of 2304 possible. +Uplifting [main] best 78861 combination +Attempting to uplift remaining variables inzp ZP_BYTE:18 [ loop::rasterY#0 ] +Uplifting [loop] best 78861 combination zp ZP_BYTE:18 [ loop::rasterY#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] +Uplifting [loop] best 78861 combination zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] +Uplifting [] best 78861 combination zp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] +Attempting to uplift remaining variables inzp ZP_BYTE:9 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +Uplifting [] best 78861 combination zp ZP_BYTE:9 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +Attempting to uplift remaining variables inzp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +Uplifting [] best 78861 combination zp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] +Attempting to uplift remaining variables inzp ZP_BYTE:17 [ loop::plexShowNextYpos1_return#0 ] +Uplifting [loop] best 78261 combination reg byte a [ loop::plexShowNextYpos1_return#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] +Uplifting [plexSort] best 78261 combination zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] +Uplifting [loop] best 78261 combination zp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ plexSort::nxt_y#0 ] +Uplifting [plexSort] best 78261 combination zp ZP_BYTE:26 [ plexSort::nxt_y#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 78261 combination zp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +Uplifting [loop] best 78261 combination zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:20 [ plexShowSprite::xpos_idx#0 ] +Uplifting [plexShowSprite] best 78254 combination reg byte x [ plexShowSprite::xpos_idx#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 78247 combination reg byte y [ plexShowSprite::plex_sprite_idx2#0 ] +Coalescing zero page register [ zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 ] ] with [ zp ZP_BYTE:6 [ loop::ss2#6 loop::ss2#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:5 [ loop::ss#2 loop::ss#1 loop::ss2#6 loop::ss2#1 ] ] with [ zp ZP_BYTE:10 [ plexSort::m#2 plexSort::m#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:7 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 ] ] with [ zp ZP_BYTE:25 [ plexSort::nxt_idx#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:8 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 ] ] with [ zp ZP_BYTE:26 [ plexSort::nxt_y#0 ] ] +Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:3 [ loop::ss#2 loop::ss#1 loop::ss2#6 loop::ss2#1 plexSort::m#2 plexSort::m#1 ] +Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:4 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 plexSort::nxt_idx#0 ] +Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:5 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 plexSort::nxt_y#0 ] +Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:6 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +Allocated (was zp ZP_WORD:13) zp ZP_WORD:7 [ init::xp#2 init::xp#1 ] +Allocated (was zp ZP_BYTE:18) zp ZP_BYTE:9 [ loop::rasterY#0 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + .const BLACK = 0 + .const GREEN = 5 + .const PLEX_COUNT = $18 + .label SPRITE = $2000 + .label SCREEN = $400 + .label YSIN = $2100 + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label plex_sprite_idx = 4 + .label plex_show_idx = 5 + .label plex_sprite_msb = 6 +//SEG2 @begin +bbegin: + jmp b28 +//SEG3 @28 +b28: +//SEG4 kickasm(location (const byte*) YSIN#0) {{ .var min = 51 .var max = 250-21 .var ampl = max-min; .for(var i=0;i<256;i++) .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) }} +//SEG5 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) .byte pic.getSinglecolorByte(x,y) }} +//SEG6 [3] phi from @28 to @31 [phi:@28->@31] +b31_from_b28: + jmp b31 +//SEG7 @31 +b31: +//SEG8 [4] call main [ ] ( ) + jsr main +//SEG9 [5] phi from @31 to @end [phi:@31->@end] +bend_from_b31: + jmp bend +//SEG10 @end +bend: +//SEG11 main +main: { + //SEG12 asm { sei } + sei + //SEG13 [7] call init [ ] ( main:4 [ ] ) + jsr init + //SEG14 [8] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + jmp b1 + //SEG15 main::@1 + b1: + //SEG16 [9] call loop [ ] ( main:4 [ ] ) + //SEG17 [11] phi from main::@1 to loop [phi:main::@1->loop] + loop_from_b1: + jsr loop + jmp breturn + //SEG18 main::@return + breturn: + //SEG19 [10] return [ ] ( main:4 [ ] ) + rts +} +//SEG20 loop +loop: { + .label sin_idx = 2 + .label ss = 3 + .label rasterY = 9 + .label ss2 = 3 + //SEG21 [12] phi from loop to loop::@1 [phi:loop->loop::@1] + b1_from_loop: + //SEG22 [12] phi (byte) loop::sin_idx#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + lda #0 + sta sin_idx + jmp b1 + //SEG23 loop::@1 + b1: + jmp b4 + //SEG24 loop::@4 + b4: + //SEG25 [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 + lda RASTER + cmp #$ff + bne b4 + jmp b6 + //SEG26 loop::@6 + b6: + //SEG27 [14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG28 [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 [ loop::sin_idx#6 loop::y_idx#3 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#3 ] ) -- vbuxx=vbuz1 + ldx sin_idx + //SEG29 [16] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + b7_from_b6: + //SEG30 [16] phi (byte) loop::sy#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@6->loop::@7#0] -- vbuyy=vbuc1 + ldy #0 + //SEG31 [16] phi (byte) loop::y_idx#2 = (byte~) loop::y_idx#3 [phi:loop::@6->loop::@7#1] -- register_copy + jmp b7 + //SEG32 [16] phi from loop::@7 to loop::@7 [phi:loop::@7->loop::@7] + b7_from_b7: + //SEG33 [16] phi (byte) loop::sy#2 = (byte) loop::sy#1 [phi:loop::@7->loop::@7#0] -- register_copy + //SEG34 [16] phi (byte) loop::y_idx#2 = (byte) loop::y_idx#1 [phi:loop::@7->loop::@7#1] -- register_copy + jmp b7 + //SEG35 loop::@7 + b7: + //SEG36 [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx + lda YSIN,x + sta PLEX_YPOS,y + //SEG37 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) -- vbuxx=vbuxx_plus_vbuc1 + txa + clc + adc #$a + tax + //SEG38 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) -- vbuyy=_inc_vbuyy + iny + //SEG39 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) -- vbuyy_neq_vbuc1_then_la1 + cpy #PLEX_COUNT-1+1 + bne b7_from_b7 + jmp b18 + //SEG40 loop::@18 + b18: + //SEG41 [21] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- vbuz1=vbuz1_plus_1 + inc sin_idx + //SEG42 [22] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG43 [23] call plexSort [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + //SEG44 [59] phi from loop::@18 to plexSort [phi:loop::@18->plexSort] + plexSort_from_b18: + jsr plexSort + jmp b26 + //SEG45 loop::@26 + b26: + //SEG46 [24] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG47 [25] phi from loop::@26 to loop::@8 [phi:loop::@26->loop::@8] + b8_from_b26: + //SEG48 [25] phi (byte) loop::ss#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#0] -- vbuz1=vbuc1 + lda #0 + sta ss + //SEG49 [25] phi (byte) plex_sprite_msb#29 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:loop::@26->loop::@8#1] -- vbuz1=vbuc1 + lda #1 + sta plex_sprite_msb + //SEG50 [25] phi (byte) plex_show_idx#25 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#2] -- vbuz1=vbuc1 + lda #0 + sta plex_show_idx + //SEG51 [25] phi (byte) plex_sprite_idx#24 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#3] -- vbuz1=vbuc1 + lda #0 + sta plex_sprite_idx + jmp b8 + //SEG52 [25] phi from loop::@27 to loop::@8 [phi:loop::@27->loop::@8] + b8_from_b27: + //SEG53 [25] phi (byte) loop::ss#2 = (byte) loop::ss#1 [phi:loop::@27->loop::@8#0] -- register_copy + //SEG54 [25] phi (byte) plex_sprite_msb#29 = (byte) plex_sprite_msb#17 [phi:loop::@27->loop::@8#1] -- register_copy + //SEG55 [25] phi (byte) plex_show_idx#25 = (byte) plex_show_idx#15 [phi:loop::@27->loop::@8#2] -- register_copy + //SEG56 [25] phi (byte) plex_sprite_idx#24 = (byte) plex_sprite_idx#15 [phi:loop::@27->loop::@8#3] -- register_copy + jmp b8 + //SEG57 loop::@8 + b8: + //SEG58 [26] call plexShowSprite [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + //SEG59 [39] phi from loop::@8 to plexShowSprite [phi:loop::@8->plexShowSprite] + plexShowSprite_from_b8: + //SEG60 [39] phi (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#29 [phi:loop::@8->plexShowSprite#0] -- register_copy + //SEG61 [39] phi (byte) plex_show_idx#13 = (byte) plex_show_idx#25 [phi:loop::@8->plexShowSprite#1] -- register_copy + //SEG62 [39] phi (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#24 [phi:loop::@8->plexShowSprite#2] -- register_copy + jsr plexShowSprite + jmp b27 + //SEG63 loop::@27 + b27: + //SEG64 [27] (byte) loop::ss#1 ← ++ (byte) loop::ss#2 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) -- vbuz1=_inc_vbuz1 + inc ss + //SEG65 [28] if((byte) loop::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ss + cmp #8 + bne b8_from_b27 + //SEG66 [29] phi from loop::@27 to loop::@9 [phi:loop::@27->loop::@9] + b9_from_b27: + //SEG67 [29] phi (byte) loop::ss2#6 = (byte/signed byte/word/signed word/dword/signed dword) 8 [phi:loop::@27->loop::@9#0] -- vbuz1=vbuc1 + lda #8 + sta ss2 + jmp b9 + //SEG68 [29] phi from loop::@28 to loop::@9 [phi:loop::@28->loop::@9] + b9_from_b28: + //SEG69 [29] phi (byte) loop::ss2#6 = (byte) loop::ss2#1 [phi:loop::@28->loop::@9#0] -- register_copy + jmp b9 + //SEG70 loop::@9 + b9: + //SEG71 [30] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + jmp plexShowNextYpos1 + //SEG72 loop::plexShowNextYpos1 + plexShowNextYpos1: + //SEG73 [31] (byte) loop::plexShowNextYpos1_return#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#15)) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ) -- vbuaa=pbuc1_derefidx_pbuc2_derefidx_vbuz1 + ldy plex_show_idx + lda PLEX_SORTED_IDX,y + tay + lda PLEX_YPOS,y + jmp b25 + //SEG74 loop::@25 + b25: + //SEG75 [32] (byte) loop::rasterY#0 ← (byte) loop::plexShowNextYpos1_return#0 - (byte/signed byte/word/signed word/dword/signed dword) 8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) -- vbuz1=vbuaa_minus_vbuc1 + sec + sbc #8 + sta rasterY + jmp b10 + //SEG76 loop::@10 + b10: + //SEG77 [33] if(*((const byte*) RASTER#0)<(byte) loop::rasterY#0) goto loop::@10 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) -- _deref_pbuc1_lt_vbuz1_then_la1 + lda RASTER + cmp rasterY + bcc b10 + jmp b12 + //SEG78 loop::@12 + b12: + //SEG79 [34] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG80 [35] call plexShowSprite [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + //SEG81 [39] phi from loop::@12 to plexShowSprite [phi:loop::@12->plexShowSprite] + plexShowSprite_from_b12: + //SEG82 [39] phi (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#17 [phi:loop::@12->plexShowSprite#0] -- register_copy + //SEG83 [39] phi (byte) plex_show_idx#13 = (byte) plex_show_idx#15 [phi:loop::@12->plexShowSprite#1] -- register_copy + //SEG84 [39] phi (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#15 [phi:loop::@12->plexShowSprite#2] -- register_copy + jsr plexShowSprite + jmp b28 + //SEG85 loop::@28 + b28: + //SEG86 [36] (byte) loop::ss2#1 ← ++ (byte) loop::ss2#6 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) -- vbuz1=_inc_vbuz1 + inc ss2 + //SEG87 [37] if((byte) loop::ss2#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ss2 + cmp #PLEX_COUNT-1+1 + bne b9_from_b28 + jmp b23 + //SEG88 loop::@23 + b23: + //SEG89 [38] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + //SEG90 [12] phi from loop::@23 to loop::@1 [phi:loop::@23->loop::@1] + b1_from_b23: + //SEG91 [12] phi (byte) loop::sin_idx#6 = (byte) loop::sin_idx#1 [phi:loop::@23->loop::@1#0] -- register_copy + jmp b1 +} +//SEG92 plexShowSprite +plexShowSprite: { + //SEG93 [40] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- vbuyy=vbuz1_rol_1 + lda plex_sprite_idx + asl + tay + //SEG94 [41] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_pbuc3_derefidx_vbuz1 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_YPOS,x + sta SPRITES_YPOS,y + //SEG95 [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#13) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_pbuc3_derefidx_vbuz2 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_PTR,x + ldx plex_sprite_idx + sta PLEX_SCREEN_PTR,x + //SEG96 [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) -- vbuxx=pbuc1_derefidx_vbuz1_rol_1 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + asl + tax + //SEG97 [44] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ) -- vbuaa=_lo_pwuc1_derefidx_vbuxx + lda PLEX_XPOS,x + //SEG98 [45] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ) -- pbuc1_derefidx_vbuyy=vbuaa + sta SPRITES_XPOS,y + //SEG99 [46] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ) -- vbuaa=_hi_pwuc1_derefidx_vbuxx + lda PLEX_XPOS+1,x + //SEG100 [47] if((byte~) plexShowSprite::$3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- vbuaa_neq_0_then_la1 + cmp #0 + bne b1 + jmp b4 + //SEG101 plexShowSprite::@4 + b4: + //SEG102 [48] (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ) -- vbuaa=vbuc1_bxor_vbuz1 + lda plex_sprite_msb + eor #$ff + //SEG103 [49] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + and SPRITES_XMSB + sta SPRITES_XMSB + jmp b2 + //SEG104 plexShowSprite::@2 + b2: + //SEG105 [50] (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 ← (byte) plex_sprite_idx#13 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ) -- vbuaa=vbuz1_plus_1 + lda plex_sprite_idx + clc + adc #1 + //SEG106 [51] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ) -- vbuz1=vbuaa_band_vbuc1 + and #7 + sta plex_sprite_idx + //SEG107 [52] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#13 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ) -- vbuz1=_inc_vbuz1 + inc plex_show_idx + //SEG108 [53] (byte) plex_sprite_msb#26 ← (byte) plex_sprite_msb#14 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) -- vbuz1=vbuz1_rol_1 + asl plex_sprite_msb + //SEG109 [54] if((byte) plex_sprite_msb#26!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@7 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) -- vbuz1_neq_0_then_la1 + lda plex_sprite_msb + bne b7_from_b2 + //SEG110 [55] phi from plexShowSprite::@2 to plexShowSprite::@return [phi:plexShowSprite::@2->plexShowSprite::@return] + breturn_from_b2: + //SEG111 [55] phi (byte) plex_sprite_msb#17 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:plexShowSprite::@2->plexShowSprite::@return#0] -- vbuz1=vbuc1 + lda #1 + sta plex_sprite_msb + jmp breturn + //SEG112 plexShowSprite::@return + breturn: + //SEG113 [56] return [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + rts + //SEG114 [57] phi from plexShowSprite::@2 to plexShowSprite::@7 [phi:plexShowSprite::@2->plexShowSprite::@7] + b7_from_b2: + jmp b7 + //SEG115 plexShowSprite::@7 + b7: + //SEG116 [55] phi from plexShowSprite::@7 to plexShowSprite::@return [phi:plexShowSprite::@7->plexShowSprite::@return] + breturn_from_b7: + //SEG117 [55] phi (byte) plex_sprite_msb#17 = (byte) plex_sprite_msb#26 [phi:plexShowSprite::@7->plexShowSprite::@return#0] -- register_copy + jmp breturn + //SEG118 plexShowSprite::@1 + b1: + //SEG119 [58] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + lda SPRITES_XMSB + ora plex_sprite_msb + sta SPRITES_XMSB + jmp b2 +} +//SEG120 plexSort +plexSort: { + .label nxt_idx = 4 + .label nxt_y = 5 + .label m = 3 + //SEG121 [60] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + b1_from_plexSort: + //SEG122 [60] phi (byte) plexSort::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + lda #0 + sta m + jmp b1 + //SEG123 [60] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + b1_from_b2: + //SEG124 [60] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + jmp b1 + //SEG125 plexSort::@1 + b1: + //SEG126 [61] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy m + lda PLEX_SORTED_IDX+1,y + sta nxt_idx + //SEG127 [62] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy nxt_idx + lda PLEX_YPOS,y + sta nxt_y + //SEG128 [63] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1_ge_pbuc1_derefidx_pbuc2_derefidx_vbuz2_then_la1 + lda nxt_y + ldx m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs b2 + jmp b10 + //SEG129 plexSort::@10 + b10: + //SEG130 [64] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) -- vbuxx=vbuz1 + ldx m + //SEG131 [65] phi from plexSort::@10 plexSort::@7 to plexSort::@3 [phi:plexSort::@10/plexSort::@7->plexSort::@3] + b3_from_b10: + b3_from_b7: + //SEG132 [65] phi (byte) plexSort::s#3 = (byte~) plexSort::s#6 [phi:plexSort::@10/plexSort::@7->plexSort::@3#0] -- register_copy + jmp b3 + //SEG133 plexSort::@3 + b3: + //SEG134 [66] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda PLEX_SORTED_IDX,x + sta PLEX_SORTED_IDX+1,x + //SEG135 [67] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx=_dec_vbuxx + dex + //SEG136 [68] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #$ff + bne b7 + jmp b5 + //SEG137 plexSort::@5 + b5: + //SEG138 [69] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG139 [70] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) -- pbuc1_derefidx_vbuxx=vbuz1 + lda nxt_idx + sta PLEX_SORTED_IDX,x + jmp b2 + //SEG140 plexSort::@2 + b2: + //SEG141 [71] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) -- vbuz1=_inc_vbuz1 + inc m + //SEG142 [72] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda m + cmp #PLEX_COUNT-2+1 + bne b1_from_b2 + jmp breturn + //SEG143 plexSort::@return + breturn: + //SEG144 [73] return [ ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 ] ) + rts + //SEG145 plexSort::@7 + b7: + //SEG146 [74] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_lt_pbuc1_derefidx_pbuc2_derefidx_vbuxx_then_la1 + lda nxt_y + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcc b3_from_b7 + jmp b5 +} +//SEG147 init +init: { + .label xp = 7 + //SEG148 [75] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:4::init:7 [ ] ) -- _deref_pbuc1=vbuc2 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + //SEG149 [76] call plexInit [ ] ( main:4::init:7 [ ] ) + //SEG150 [90] phi from init to plexInit [phi:init->plexInit] + plexInit_from_init: + jsr plexInit + //SEG151 [77] phi from init to init::@1 [phi:init->init::@1] + b1_from_init: + //SEG152 [77] phi (word) init::xp#2 = (byte/signed byte/word/signed word/dword/signed dword) 32 [phi:init->init::@1#0] -- vwuz1=vbuc1 + lda #<$20 + sta xp + lda #>$20 + sta xp+1 + //SEG153 [77] phi (byte) init::sx#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init->init::@1#1] -- vbuxx=vbuc1 + ldx #0 + jmp b1 + //SEG154 [77] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + b1_from_b1: + //SEG155 [77] phi (word) init::xp#2 = (word) init::xp#1 [phi:init::@1->init::@1#0] -- register_copy + //SEG156 [77] phi (byte) init::sx#2 = (byte) init::sx#1 [phi:init::@1->init::@1#1] -- register_copy + jmp b1 + //SEG157 init::@1 + b1: + //SEG158 [78] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 + lda #$ff&SPRITE/$40 + sta PLEX_PTR,x + //SEG159 [79] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ init::sx#2 init::xp#2 init::$6 ] ( main:4::init:7 [ init::sx#2 init::xp#2 init::$6 ] ) -- vbuaa=vbuxx_rol_1 + txa + asl + //SEG160 [80] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) -- pwuc1_derefidx_vbuaa=vwuz1 + tay + lda xp + sta PLEX_XPOS,y + lda xp+1 + sta PLEX_XPOS+1,y + //SEG161 [81] (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 [ init::sx#2 init::xp#1 ] ( main:4::init:7 [ init::sx#2 init::xp#1 ] ) -- vwuz1=vwuz1_plus_vbuc1 + clc + lda xp + adc #<$c + sta xp + lda xp+1 + adc #>$c + sta xp+1 + //SEG162 [82] (byte) init::sx#1 ← ++ (byte) init::sx#2 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG163 [83] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #PLEX_COUNT-1+1 + bne b1_from_b1 + jmp b3 + //SEG164 init::@3 + b3: + //SEG165 [84] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:4::init:7 [ ] ) -- _deref_pbuc1=vbuc2 + lda #$ff + sta SPRITES_ENABLE + //SEG166 [85] phi from init::@3 to init::@2 [phi:init::@3->init::@2] + b2_from_b3: + //SEG167 [85] phi (byte) init::ss#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@3->init::@2#0] -- vbuxx=vbuc1 + ldx #0 + jmp b2 + //SEG168 [85] phi from init::@2 to init::@2 [phi:init::@2->init::@2] + b2_from_b2: + //SEG169 [85] phi (byte) init::ss#2 = (byte) init::ss#1 [phi:init::@2->init::@2#0] -- register_copy + jmp b2 + //SEG170 init::@2 + b2: + //SEG171 [86] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 + lda #GREEN + sta SPRITES_COLS,x + //SEG172 [87] (byte) init::ss#1 ← ++ (byte) init::ss#2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG173 [88] if((byte) init::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne b2_from_b2 + jmp breturn + //SEG174 init::@return + breturn: + //SEG175 [89] return [ ] ( main:4::init:7 [ ] ) + rts +} +//SEG176 plexInit +plexInit: { + //SEG177 [91] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + plexSetScreen1_from_plexInit: + jmp plexSetScreen1 + //SEG178 plexInit::plexSetScreen1 + plexSetScreen1: + //SEG179 [92] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + b1_from_plexSetScreen1: + //SEG180 [92] phi (byte) plexInit::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp b1 + //SEG181 [92] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + b1_from_b1: + //SEG182 [92] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + jmp b1 + //SEG183 plexInit::@1 + b1: + //SEG184 [93] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:4::init:7::plexInit:76 [ plexInit::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta PLEX_SORTED_IDX,x + //SEG185 [94] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG186 [95] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #PLEX_COUNT-1+1 + bne b1_from_b1 + jmp breturn + //SEG187 plexInit::@return + breturn: + //SEG188 [96] return [ ] ( main:4::init:7::plexInit:76 [ ] ) + rts +} + PLEX_XPOS: .fill 2*PLEX_COUNT, 0 + PLEX_YPOS: .fill PLEX_COUNT, 0 + PLEX_PTR: .fill PLEX_COUNT, 0 + PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 +.pc = YSIN "Inline" + .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + +.pc = SPRITE "Inline" + .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b28 +Removing instruction jmp b31 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b6 +Removing instruction jmp b7 +Removing instruction jmp b18 +Removing instruction jmp b26 +Removing instruction jmp b8 +Removing instruction jmp b27 +Removing instruction jmp b9 +Removing instruction jmp plexShowNextYpos1 +Removing instruction jmp b25 +Removing instruction jmp b10 +Removing instruction jmp b12 +Removing instruction jmp b28 +Removing instruction jmp b23 +Removing instruction jmp b4 +Removing instruction jmp b2 +Removing instruction jmp breturn +Removing instruction jmp b7 +Removing instruction jmp b1 +Removing instruction jmp b10 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b2 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b2 +Removing instruction jmp breturn +Removing instruction jmp plexSetScreen1 +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #0 +Replacing instruction ldy nxt_idx with TAY +Removing instruction lda nxt_y +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b7_from_b7 with b7 +Replacing label b8_from_b27 with b8 +Replacing label b9_from_b28 with b9 +Replacing label b1 with b4 +Replacing label b7_from_b2 with b7 +Replacing label b1_from_b2 with b1 +Replacing label b3_from_b7 with b3 +Replacing label b1_from_b1 with b1 +Replacing label b2_from_b2 with b2 +Replacing label b1_from_b1 with b1 +Removing instruction bbegin: +Removing instruction b28: +Removing instruction b31_from_b28: +Removing instruction bend_from_b31: +Removing instruction b1_from_main: +Removing instruction loop_from_b1: +Removing instruction b1: +Removing instruction b7_from_b7: +Removing instruction b8_from_b27: +Removing instruction plexShowSprite_from_b8: +Removing instruction b9_from_b28: +Removing instruction b7_from_b2: +Removing instruction breturn_from_b7: +Removing instruction b1_from_b2: +Removing instruction b3_from_b10: +Removing instruction b3_from_b7: +Removing instruction b1_from_b1: +Removing instruction b2_from_b2: +Removing instruction plexSetScreen1_from_plexInit: +Removing instruction b1_from_plexSetScreen1: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction b31: +Removing instruction bend: +Removing instruction b1: +Removing instruction breturn: +Removing instruction b1_from_loop: +Removing instruction b6: +Removing instruction b7_from_b6: +Removing instruction b18: +Removing instruction plexSort_from_b18: +Removing instruction b26: +Removing instruction b8_from_b26: +Removing instruction b27: +Removing instruction b9_from_b27: +Removing instruction plexShowNextYpos1: +Removing instruction b25: +Removing instruction b12: +Removing instruction plexShowSprite_from_b12: +Removing instruction b28: +Removing instruction b23: +Removing instruction b1_from_b23: +Removing instruction b4: +Removing instruction breturn_from_b2: +Removing instruction b1_from_plexSort: +Removing instruction b10: +Removing instruction breturn: +Removing instruction plexInit_from_init: +Removing instruction b1_from_init: +Removing instruction b3: +Removing instruction b2_from_b3: +Removing instruction breturn: +Removing instruction plexSetScreen1: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to breturn in bne b7 +Succesful ASM optimization Pass5DoubleJumpElimination +Removing instruction jmp b7 +Removing instruction jmp b8 +Removing instruction jmp b9 +Removing instruction jmp b1 +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction ldx m +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction b7: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction jmp breturn +Succesful ASM optimization Pass5UnreachableCodeElimination + +FINAL SYMBOL TABLE +(label) @28 +(label) @31 +(label) @begin +(label) @end +(byte) BLACK +(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0 +(byte*) BORDERCOL +(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280 +(byte*) D011 +(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265 +(byte) GREEN +(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5 +(byte) PLEX_COUNT +(const byte) PLEX_COUNT#0 PLEX_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 24 +(byte[PLEX_COUNT#0]) PLEX_PTR +(const byte[PLEX_COUNT#0]) PLEX_PTR#0 PLEX_PTR = { fill( PLEX_COUNT#0, 0) } +(byte*) PLEX_SCREEN_PTR +(const byte*) PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1016 +(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX +(const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 PLEX_SORTED_IDX = { fill( PLEX_COUNT#0, 0) } +(word[PLEX_COUNT#0]) PLEX_XPOS +(const word[PLEX_COUNT#0]) PLEX_XPOS#0 PLEX_XPOS = { fill( PLEX_COUNT#0, 0) } +(byte[PLEX_COUNT#0]) PLEX_YPOS +(const byte[PLEX_COUNT#0]) PLEX_YPOS#0 PLEX_YPOS = { fill( PLEX_COUNT#0, 0) } +(byte*) RASTER +(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266 +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 +(byte*) SPRITE +(const byte*) SPRITE#0 SPRITE = ((byte*))(word/signed word/dword/signed dword) 8192 +(byte*) SPRITES_COLS +(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287 +(byte*) SPRITES_ENABLE +(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269 +(byte*) SPRITES_XMSB +(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264 +(byte*) SPRITES_XPOS +(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248 +(byte*) SPRITES_YPOS +(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249 +(byte) VIC_DEN +(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16 +(byte) VIC_RSEL +(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8 +(byte*) YSIN +(const byte*) YSIN#0 YSIN = ((byte*))(word/signed word/dword/signed dword) 8448 +(void()) init() +(byte~) init::$6 reg byte a 22.0 +(label) init::@1 +(label) init::@2 +(label) init::@3 +(label) init::@return +(byte) init::ss +(byte) init::ss#1 reg byte x 16.5 +(byte) init::ss#2 reg byte x 16.5 +(byte) init::sx +(byte) init::sx#1 reg byte x 16.5 +(byte) init::sx#2 reg byte x 8.8 +(word) init::xp +(word) init::xp#1 xp zp ZP_WORD:7 7.333333333333333 +(word) init::xp#2 xp zp ZP_WORD:7 8.25 +(void()) loop() +(label) loop::@1 +(label) loop::@10 +(label) loop::@12 +(label) loop::@18 +(label) loop::@23 +(label) loop::@25 +(label) loop::@26 +(label) loop::@27 +(label) loop::@28 +(label) loop::@4 +(label) loop::@6 +(label) loop::@7 +(label) loop::@8 +(label) loop::@9 +(label) loop::plexShowNextYpos1 +(byte) loop::plexShowNextYpos1_return +(byte) loop::plexShowNextYpos1_return#0 reg byte a 202.0 +(byte) loop::rasterY +(byte) loop::rasterY#0 rasterY zp ZP_BYTE:9 551.0 +(byte) loop::sin_idx +(byte) loop::sin_idx#1 sin_idx zp ZP_BYTE:2 1.2222222222222223 +(byte) loop::sin_idx#6 sin_idx zp ZP_BYTE:2 3.666666666666667 +(byte) loop::ss +(byte) loop::ss#1 ss zp ZP_BYTE:3 151.5 +(byte) loop::ss#2 ss zp ZP_BYTE:3 101.0 +(byte) loop::ss2 +(byte) loop::ss2#1 ss2 zp ZP_BYTE:3 151.5 +(byte) loop::ss2#6 ss2 zp ZP_BYTE:3 28.857142857142858 +(byte) loop::sy +(byte) loop::sy#1 reg byte y 151.5 +(byte) loop::sy#2 reg byte y 101.0 +(byte) loop::y_idx +(byte) loop::y_idx#1 reg byte x 67.33333333333333 +(byte) loop::y_idx#2 reg byte x 157.0 +(byte~) loop::y_idx#3 reg byte x 22.0 +(void()) main() +(label) main::@1 +(label) main::@return +(void()) plexInit((byte*) plexInit::screen) +(label) plexInit::@1 +(label) plexInit::@return +(byte) plexInit::i +(byte) plexInit::i#1 reg byte x 16.5 +(byte) plexInit::i#2 reg byte x 22.0 +(label) plexInit::plexSetScreen1 +(byte*~) plexInit::plexSetScreen1_$0 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::screen +(void()) plexShowSprite() +(byte~) plexShowSprite::$2 reg byte a 4.0 +(byte~) plexShowSprite::$3 reg byte a 4.0 +(byte/word/dword~) plexShowSprite::$5 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) plexShowSprite::$6 reg byte a 4.0 +(label) plexShowSprite::@1 +(label) plexShowSprite::@2 +(label) plexShowSprite::@4 +(label) plexShowSprite::@7 +(label) plexShowSprite::@return +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 reg byte y 1.2000000000000002 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 reg byte x 2.0 +(void()) plexSort() +(label) plexSort::@1 +(label) plexSort::@10 +(label) plexSort::@2 +(label) plexSort::@3 +(label) plexSort::@5 +(label) plexSort::@7 +(label) plexSort::@return +(byte) plexSort::m +(byte) plexSort::m#1 m zp ZP_BYTE:3 151.5 +(byte) plexSort::m#2 m zp ZP_BYTE:3 42.08333333333333 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 nxt_idx zp ZP_BYTE:4 30.299999999999997 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 nxt_y zp ZP_BYTE:5 150.375 +(byte) plexSort::s +(byte) plexSort::s#1 reg byte x 1368.3333333333335 +(byte) plexSort::s#2 reg byte x 202.0 +(byte) plexSort::s#3 reg byte x 2052.5 +(byte~) plexSort::s#6 reg byte x 202.0 +(byte) plex_show_idx +(byte) plex_show_idx#13 plex_show_idx zp ZP_BYTE:5 14.999999999999998 +(byte) plex_show_idx#15 plex_show_idx zp ZP_BYTE:5 16.944444444444443 +(byte) plex_show_idx#25 plex_show_idx zp ZP_BYTE:5 202.0 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#13 plex_sprite_idx zp ZP_BYTE:4 17.333333333333336 +(byte) plex_sprite_idx#15 plex_sprite_idx zp ZP_BYTE:4 10.736842105263158 +(byte) plex_sprite_idx#24 plex_sprite_idx zp ZP_BYTE:4 202.0 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#14 plex_sprite_msb zp ZP_BYTE:6 13.866666666666665 +(byte) plex_sprite_msb#17 plex_sprite_msb zp ZP_BYTE:6 14.571428571428571 +(byte) plex_sprite_msb#26 plex_sprite_msb zp ZP_BYTE:6 2.0 +(byte) plex_sprite_msb#29 plex_sprite_msb zp ZP_BYTE:6 202.0 + +zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +reg byte y [ loop::sy#2 loop::sy#1 ] +zp ZP_BYTE:3 [ loop::ss#2 loop::ss#1 loop::ss2#6 loop::ss2#1 plexSort::m#2 plexSort::m#1 ] +zp ZP_BYTE:4 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 plexSort::nxt_idx#0 ] +zp ZP_BYTE:5 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 plexSort::nxt_y#0 ] +zp ZP_BYTE:6 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +reg byte x [ init::sx#2 init::sx#1 ] +zp ZP_WORD:7 [ init::xp#2 init::xp#1 ] +reg byte x [ init::ss#2 init::ss#1 ] +reg byte x [ plexInit::i#2 plexInit::i#1 ] +reg byte a [ loop::plexShowNextYpos1_return#0 ] +zp ZP_BYTE:9 [ loop::rasterY#0 ] +reg byte y [ plexShowSprite::plex_sprite_idx2#0 ] +reg byte x [ plexShowSprite::xpos_idx#0 ] +reg byte a [ plexShowSprite::$2 ] +reg byte a [ plexShowSprite::$3 ] +reg byte a [ plexShowSprite::$5 ] +reg byte a [ plexShowSprite::$6 ] +reg byte x [ plexSort::s#2 ] +reg byte a [ init::$6 ] + + +FINAL ASSEMBLER +Score: 62848 + +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label D011 = $d011 + .const VIC_DEN = $10 + .const VIC_RSEL = 8 + .const BLACK = 0 + .const GREEN = 5 + .const PLEX_COUNT = $18 + .label SPRITE = $2000 + .label SCREEN = $400 + .label YSIN = $2100 + .label PLEX_SCREEN_PTR = SCREEN+$3f8 + .label plex_sprite_idx = 4 + .label plex_show_idx = 5 + .label plex_sprite_msb = 6 +//SEG2 @begin +//SEG3 @28 +//SEG4 kickasm(location (const byte*) YSIN#0) {{ .var min = 51 .var max = 250-21 .var ampl = max-min; .for(var i=0;i<256;i++) .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) }} +//SEG5 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) .byte pic.getSinglecolorByte(x,y) }} +//SEG6 [3] phi from @28 to @31 [phi:@28->@31] +//SEG7 @31 +//SEG8 [4] call main [ ] ( ) + jsr main +//SEG9 [5] phi from @31 to @end [phi:@31->@end] +//SEG10 @end +//SEG11 main +main: { + //SEG12 asm { sei } + sei + //SEG13 [7] call init [ ] ( main:4 [ ] ) + jsr init + //SEG14 [8] phi from main to main::@1 [phi:main->main::@1] + //SEG15 main::@1 + //SEG16 [9] call loop [ ] ( main:4 [ ] ) + //SEG17 [11] phi from main::@1 to loop [phi:main::@1->loop] + jsr loop + //SEG18 main::@return + //SEG19 [10] return [ ] ( main:4 [ ] ) + rts +} +//SEG20 loop +loop: { + .label sin_idx = 2 + .label ss = 3 + .label rasterY = 9 + .label ss2 = 3 + //SEG21 [12] phi from loop to loop::@1 [phi:loop->loop::@1] + //SEG22 [12] phi (byte) loop::sin_idx#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vbuz1=vbuc1 + lda #0 + sta sin_idx + //SEG23 loop::@1 + //SEG24 loop::@4 + b4: + //SEG25 [13] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 + lda RASTER + cmp #$ff + bne b4 + //SEG26 loop::@6 + //SEG27 [14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#6 ] ( main:4::loop:9 [ loop::sin_idx#6 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG28 [15] (byte~) loop::y_idx#3 ← (byte) loop::sin_idx#6 [ loop::sin_idx#6 loop::y_idx#3 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#3 ] ) -- vbuxx=vbuz1 + ldx sin_idx + //SEG29 [16] phi from loop::@6 to loop::@7 [phi:loop::@6->loop::@7] + //SEG30 [16] phi (byte) loop::sy#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@6->loop::@7#0] -- vbuyy=vbuc1 + ldy #0 + //SEG31 [16] phi (byte) loop::y_idx#2 = (byte~) loop::y_idx#3 [phi:loop::@6->loop::@7#1] -- register_copy + //SEG32 [16] phi from loop::@7 to loop::@7 [phi:loop::@7->loop::@7] + //SEG33 [16] phi (byte) loop::sy#2 = (byte) loop::sy#1 [phi:loop::@7->loop::@7#0] -- register_copy + //SEG34 [16] phi (byte) loop::y_idx#2 = (byte) loop::y_idx#1 [phi:loop::@7->loop::@7#1] -- register_copy + //SEG35 loop::@7 + b7: + //SEG36 [17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#2 loop::sy#2 ] ) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx + lda YSIN,x + sta PLEX_YPOS,y + //SEG37 [18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::sy#2 loop::y_idx#1 ] ) -- vbuxx=vbuxx_plus_vbuc1 + txa + clc + adc #$a + tax + //SEG38 [19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) -- vbuyy=_inc_vbuyy + iny + //SEG39 [20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@7 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ( main:4::loop:9 [ loop::sin_idx#6 loop::y_idx#1 loop::sy#1 ] ) -- vbuyy_neq_vbuc1_then_la1 + cpy #PLEX_COUNT-1+1 + bne b7 + //SEG40 loop::@18 + //SEG41 [21] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- vbuz1=vbuz1_plus_1 + inc sin_idx + //SEG42 [22] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG43 [23] call plexSort [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) + //SEG44 [59] phi from loop::@18 to plexSort [phi:loop::@18->plexSort] + jsr plexSort + //SEG45 loop::@26 + //SEG46 [24] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG47 [25] phi from loop::@26 to loop::@8 [phi:loop::@26->loop::@8] + //SEG48 [25] phi (byte) loop::ss#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#0] -- vbuz1=vbuc1 + lda #0 + sta ss + //SEG49 [25] phi (byte) plex_sprite_msb#29 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:loop::@26->loop::@8#1] -- vbuz1=vbuc1 + lda #1 + sta plex_sprite_msb + //SEG50 [25] phi (byte) plex_show_idx#25 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#2] -- vbuz1=vbuc1 + lda #0 + sta plex_show_idx + //SEG51 [25] phi (byte) plex_sprite_idx#24 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@26->loop::@8#3] -- vbuz1=vbuc1 + sta plex_sprite_idx + //SEG52 [25] phi from loop::@27 to loop::@8 [phi:loop::@27->loop::@8] + //SEG53 [25] phi (byte) loop::ss#2 = (byte) loop::ss#1 [phi:loop::@27->loop::@8#0] -- register_copy + //SEG54 [25] phi (byte) plex_sprite_msb#29 = (byte) plex_sprite_msb#17 [phi:loop::@27->loop::@8#1] -- register_copy + //SEG55 [25] phi (byte) plex_show_idx#25 = (byte) plex_show_idx#15 [phi:loop::@27->loop::@8#2] -- register_copy + //SEG56 [25] phi (byte) plex_sprite_idx#24 = (byte) plex_sprite_idx#15 [phi:loop::@27->loop::@8#3] -- register_copy + //SEG57 loop::@8 + b8: + //SEG58 [26] call plexShowSprite [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + //SEG59 [39] phi from loop::@8 to plexShowSprite [phi:loop::@8->plexShowSprite] + //SEG60 [39] phi (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#29 [phi:loop::@8->plexShowSprite#0] -- register_copy + //SEG61 [39] phi (byte) plex_show_idx#13 = (byte) plex_show_idx#25 [phi:loop::@8->plexShowSprite#1] -- register_copy + //SEG62 [39] phi (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#24 [phi:loop::@8->plexShowSprite#2] -- register_copy + jsr plexShowSprite + //SEG63 loop::@27 + //SEG64 [27] (byte) loop::ss#1 ← ++ (byte) loop::ss#2 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) -- vbuz1=_inc_vbuz1 + inc ss + //SEG65 [28] if((byte) loop::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto loop::@8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ss + cmp #8 + bne b8 + //SEG66 [29] phi from loop::@27 to loop::@9 [phi:loop::@27->loop::@9] + //SEG67 [29] phi (byte) loop::ss2#6 = (byte/signed byte/word/signed word/dword/signed dword) 8 [phi:loop::@27->loop::@9#0] -- vbuz1=vbuc1 + lda #8 + sta ss2 + //SEG68 [29] phi from loop::@28 to loop::@9 [phi:loop::@28->loop::@9] + //SEG69 [29] phi (byte) loop::ss2#6 = (byte) loop::ss2#1 [phi:loop::@28->loop::@9#0] -- register_copy + //SEG70 loop::@9 + b9: + //SEG71 [30] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + //SEG72 loop::plexShowNextYpos1 + //SEG73 [31] (byte) loop::plexShowNextYpos1_return#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#15)) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::plexShowNextYpos1_return#0 ] ) -- vbuaa=pbuc1_derefidx_pbuc2_derefidx_vbuz1 + ldy plex_show_idx + lda PLEX_SORTED_IDX,y + tay + lda PLEX_YPOS,y + //SEG74 loop::@25 + //SEG75 [32] (byte) loop::rasterY#0 ← (byte) loop::plexShowNextYpos1_return#0 - (byte/signed byte/word/signed word/dword/signed dword) 8 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) -- vbuz1=vbuaa_minus_vbuc1 + sec + sbc #8 + sta rasterY + //SEG76 loop::@10 + b10: + //SEG77 [33] if(*((const byte*) RASTER#0)<(byte) loop::rasterY#0) goto loop::@10 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 loop::rasterY#0 ] ) -- _deref_pbuc1_lt_vbuz1_then_la1 + lda RASTER + cmp rasterY + bcc b10 + //SEG78 loop::@12 + //SEG79 [34] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + inc BORDERCOL + //SEG80 [35] call plexShowSprite [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#6 ] ) + //SEG81 [39] phi from loop::@12 to plexShowSprite [phi:loop::@12->plexShowSprite] + //SEG82 [39] phi (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#17 [phi:loop::@12->plexShowSprite#0] -- register_copy + //SEG83 [39] phi (byte) plex_show_idx#13 = (byte) plex_show_idx#15 [phi:loop::@12->plexShowSprite#1] -- register_copy + //SEG84 [39] phi (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#15 [phi:loop::@12->plexShowSprite#2] -- register_copy + jsr plexShowSprite + //SEG85 loop::@28 + //SEG86 [36] (byte) loop::ss2#1 ← ++ (byte) loop::ss2#6 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) -- vbuz1=_inc_vbuz1 + inc ss2 + //SEG87 [37] if((byte) loop::ss2#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto loop::@9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ( main:4::loop:9 [ loop::sin_idx#1 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 loop::ss2#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda ss2 + cmp #PLEX_COUNT-1+1 + bne b9 + //SEG88 loop::@23 + //SEG89 [38] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ loop::sin_idx#1 ] ( main:4::loop:9 [ loop::sin_idx#1 ] ) -- _deref_pbuc1=vbuc2 + lda #BLACK + sta BORDERCOL + //SEG90 [12] phi from loop::@23 to loop::@1 [phi:loop::@23->loop::@1] + //SEG91 [12] phi (byte) loop::sin_idx#6 = (byte) loop::sin_idx#1 [phi:loop::@23->loop::@1#0] -- register_copy + jmp b4 +} +//SEG92 plexShowSprite +plexShowSprite: { + //SEG93 [40] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- vbuyy=vbuz1_rol_1 + lda plex_sprite_idx + asl + tay + //SEG94 [41] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- pbuc1_derefidx_vbuyy=pbuc2_derefidx_pbuc3_derefidx_vbuz1 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_YPOS,x + sta SPRITES_YPOS,y + //SEG95 [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#13) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13)) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_pbuc3_derefidx_vbuz2 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + tax + lda PLEX_PTR,x + ldx plex_sprite_idx + sta PLEX_SCREEN_PTR,x + //SEG96 [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13) << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ) -- vbuxx=pbuc1_derefidx_vbuz1_rol_1 + ldx plex_show_idx + lda PLEX_SORTED_IDX,x + asl + tax + //SEG97 [44] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 plexShowSprite::$2 ] ) -- vbuaa=_lo_pwuc1_derefidx_vbuxx + lda PLEX_XPOS,x + //SEG98 [45] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::xpos_idx#0 ] ) -- pbuc1_derefidx_vbuyy=vbuaa + sta SPRITES_XPOS,y + //SEG99 [46] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0) [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$3 ] ) -- vbuaa=_hi_pwuc1_derefidx_vbuxx + lda PLEX_XPOS+1,x + //SEG100 [47] if((byte~) plexShowSprite::$3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@1 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- vbuaa_neq_0_then_la1 + cmp #0 + bne b1 + //SEG101 plexShowSprite::@4 + //SEG102 [48] (byte/word/dword~) plexShowSprite::$5 ← (byte/word/signed word/dword/signed dword) 255 ^ (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$5 ] ) -- vbuaa=vbuc1_bxor_vbuz1 + lda plex_sprite_msb + eor #$ff + //SEG103 [49] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte/word/dword~) plexShowSprite::$5 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- _deref_pbuc1=_deref_pbuc1_band_vbuaa + and SPRITES_XMSB + sta SPRITES_XMSB + //SEG104 plexShowSprite::@2 + b2: + //SEG105 [50] (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 ← (byte) plex_sprite_idx#13 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_show_idx#13 plex_sprite_msb#14 plexShowSprite::$6 ] ) -- vbuaa=vbuz1_plus_1 + lda plex_sprite_idx + clc + adc #1 + //SEG106 [51] (byte) plex_sprite_idx#15 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#13 plex_sprite_msb#14 ] ) -- vbuz1=vbuaa_band_vbuc1 + and #7 + sta plex_sprite_idx + //SEG107 [52] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#13 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#14 ] ) -- vbuz1=_inc_vbuz1 + inc plex_show_idx + //SEG108 [53] (byte) plex_sprite_msb#26 ← (byte) plex_sprite_msb#14 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) -- vbuz1=vbuz1_rol_1 + asl plex_sprite_msb + //SEG109 [54] if((byte) plex_sprite_msb#26!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto plexShowSprite::@7 [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#26 ] ) -- vbuz1_neq_0_then_la1 + lda plex_sprite_msb + bne breturn + //SEG110 [55] phi from plexShowSprite::@2 to plexShowSprite::@return [phi:plexShowSprite::@2->plexShowSprite::@return] + //SEG111 [55] phi (byte) plex_sprite_msb#17 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:plexShowSprite::@2->plexShowSprite::@return#0] -- vbuz1=vbuc1 + lda #1 + sta plex_sprite_msb + //SEG112 plexShowSprite::@return + breturn: + //SEG113 [56] return [ plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#15 plex_show_idx#15 plex_sprite_msb#17 ] ) + rts + //SEG114 [57] phi from plexShowSprite::@2 to plexShowSprite::@7 [phi:plexShowSprite::@2->plexShowSprite::@7] + //SEG115 plexShowSprite::@7 + //SEG116 [55] phi from plexShowSprite::@7 to plexShowSprite::@return [phi:plexShowSprite::@7->plexShowSprite::@return] + //SEG117 [55] phi (byte) plex_sprite_msb#17 = (byte) plex_sprite_msb#26 [phi:plexShowSprite::@7->plexShowSprite::@return#0] -- register_copy + //SEG118 plexShowSprite::@1 + b1: + //SEG119 [58] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#14 [ plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ( main:4::loop:9::plexShowSprite:26 [ loop::sin_idx#1 loop::ss#2 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] main:4::loop:9::plexShowSprite:35 [ loop::sin_idx#1 loop::ss2#6 plex_sprite_idx#13 plex_show_idx#13 plex_sprite_msb#14 ] ) -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1 + lda SPRITES_XMSB + ora plex_sprite_msb + sta SPRITES_XMSB + jmp b2 +} +//SEG120 plexSort +plexSort: { + .label nxt_idx = 4 + .label nxt_y = 5 + .label m = 3 + //SEG121 [60] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1] + //SEG122 [60] phi (byte) plexSort::m#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1 + lda #0 + sta m + //SEG123 [60] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1] + //SEG124 [60] phi (byte) plexSort::m#2 = (byte) plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy + //SEG125 plexSort::@1 + b1: + //SEG126 [61] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::m#2) [ plexSort::m#2 plexSort::nxt_idx#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy m + lda PLEX_SORTED_IDX+1,y + sta nxt_idx + //SEG127 [62] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + tay + lda PLEX_YPOS,y + sta nxt_y + //SEG128 [63] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ) -- vbuz1_ge_pbuc1_derefidx_pbuc2_derefidx_vbuz2_then_la1 + ldx m + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcs b2 + //SEG129 plexSort::@10 + //SEG130 [64] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#6 ] ) -- vbuxx=vbuz1 + //SEG131 [65] phi from plexSort::@10 plexSort::@7 to plexSort::@3 [phi:plexSort::@10/plexSort::@7->plexSort::@3] + //SEG132 [65] phi (byte) plexSort::s#3 = (byte~) plexSort::s#6 [phi:plexSort::@10/plexSort::@7->plexSort::@3#0] -- register_copy + //SEG133 plexSort::@3 + b3: + //SEG134 [66] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda PLEX_SORTED_IDX,x + sta PLEX_SORTED_IDX+1,x + //SEG135 [67] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx=_dec_vbuxx + dex + //SEG136 [68] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@7 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #$ff + bne b7 + //SEG137 plexSort::@5 + b5: + //SEG138 [69] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::s#2 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG139 [70] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 ] ) -- pbuc1_derefidx_vbuxx=vbuz1 + lda nxt_idx + sta PLEX_SORTED_IDX,x + //SEG140 plexSort::@2 + b2: + //SEG141 [71] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) -- vbuz1=_inc_vbuz1 + inc m + //SEG142 [72] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexSort::@1 [ plexSort::m#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda m + cmp #PLEX_COUNT-2+1 + bne b1 + //SEG143 plexSort::@return + //SEG144 [73] return [ ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 ] ) + rts + //SEG145 plexSort::@7 + b7: + //SEG146 [74] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:4::loop:9::plexSort:23 [ loop::sin_idx#1 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ) -- vbuz1_lt_pbuc1_derefidx_pbuc2_derefidx_vbuxx_then_la1 + lda nxt_y + ldy PLEX_SORTED_IDX,x + cmp PLEX_YPOS,y + bcc b3 + jmp b5 +} +//SEG147 init +init: { + .label xp = 7 + //SEG148 [75] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:4::init:7 [ ] ) -- _deref_pbuc1=vbuc2 + lda #VIC_DEN|VIC_RSEL|3 + sta D011 + //SEG149 [76] call plexInit [ ] ( main:4::init:7 [ ] ) + //SEG150 [90] phi from init to plexInit [phi:init->plexInit] + jsr plexInit + //SEG151 [77] phi from init to init::@1 [phi:init->init::@1] + //SEG152 [77] phi (word) init::xp#2 = (byte/signed byte/word/signed word/dword/signed dword) 32 [phi:init->init::@1#0] -- vwuz1=vbuc1 + lda #<$20 + sta xp + lda #>$20 + sta xp+1 + //SEG153 [77] phi (byte) init::sx#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init->init::@1#1] -- vbuxx=vbuc1 + ldx #0 + //SEG154 [77] phi from init::@1 to init::@1 [phi:init::@1->init::@1] + //SEG155 [77] phi (word) init::xp#2 = (word) init::xp#1 [phi:init::@1->init::@1#0] -- register_copy + //SEG156 [77] phi (byte) init::sx#2 = (byte) init::sx#1 [phi:init::@1->init::@1#1] -- register_copy + //SEG157 init::@1 + b1: + //SEG158 [78] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 + lda #$ff&SPRITE/$40 + sta PLEX_PTR,x + //SEG159 [79] (byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ init::sx#2 init::xp#2 init::$6 ] ( main:4::init:7 [ init::sx#2 init::xp#2 init::$6 ] ) -- vbuaa=vbuxx_rol_1 + txa + asl + //SEG160 [80] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2 [ init::sx#2 init::xp#2 ] ( main:4::init:7 [ init::sx#2 init::xp#2 ] ) -- pwuc1_derefidx_vbuaa=vwuz1 + tay + lda xp + sta PLEX_XPOS,y + lda xp+1 + sta PLEX_XPOS+1,y + //SEG161 [81] (word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 12 [ init::sx#2 init::xp#1 ] ( main:4::init:7 [ init::sx#2 init::xp#1 ] ) -- vwuz1=vwuz1_plus_vbuc1 + clc + lda xp + adc #<$c + sta xp + lda xp+1 + adc #>$c + sta xp+1 + //SEG162 [82] (byte) init::sx#1 ← ++ (byte) init::sx#2 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG163 [83] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1 [ init::sx#1 init::xp#1 ] ( main:4::init:7 [ init::sx#1 init::xp#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #PLEX_COUNT-1+1 + bne b1 + //SEG164 init::@3 + //SEG165 [84] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255 [ ] ( main:4::init:7 [ ] ) -- _deref_pbuc1=vbuc2 + lda #$ff + sta SPRITES_ENABLE + //SEG166 [85] phi from init::@3 to init::@2 [phi:init::@3->init::@2] + //SEG167 [85] phi (byte) init::ss#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:init::@3->init::@2#0] -- vbuxx=vbuc1 + ldx #0 + //SEG168 [85] phi from init::@2 to init::@2 [phi:init::@2->init::@2] + //SEG169 [85] phi (byte) init::ss#2 = (byte) init::ss#1 [phi:init::@2->init::@2#0] -- register_copy + //SEG170 init::@2 + b2: + //SEG171 [86] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [ init::ss#2 ] ( main:4::init:7 [ init::ss#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 + lda #GREEN + sta SPRITES_COLS,x + //SEG172 [87] (byte) init::ss#1 ← ++ (byte) init::ss#2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG173 [88] if((byte) init::ss#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@2 [ init::ss#1 ] ( main:4::init:7 [ init::ss#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne b2 + //SEG174 init::@return + //SEG175 [89] return [ ] ( main:4::init:7 [ ] ) + rts +} +//SEG176 plexInit +plexInit: { + //SEG177 [91] phi from plexInit to plexInit::plexSetScreen1 [phi:plexInit->plexInit::plexSetScreen1] + //SEG178 plexInit::plexSetScreen1 + //SEG179 [92] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1] + //SEG180 [92] phi (byte) plexInit::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG181 [92] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1] + //SEG182 [92] phi (byte) plexInit::i#2 = (byte) plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy + //SEG183 plexInit::@1 + b1: + //SEG184 [93] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [ plexInit::i#2 ] ( main:4::init:7::plexInit:76 [ plexInit::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx + txa + sta PLEX_SORTED_IDX,x + //SEG185 [94] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG186 [95] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto plexInit::@1 [ plexInit::i#1 ] ( main:4::init:7::plexInit:76 [ plexInit::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #PLEX_COUNT-1+1 + bne b1 + //SEG187 plexInit::@return + //SEG188 [96] return [ ] ( main:4::init:7::plexInit:76 [ ] ) + rts +} + PLEX_XPOS: .fill 2*PLEX_COUNT, 0 + PLEX_YPOS: .fill PLEX_COUNT, 0 + PLEX_PTR: .fill PLEX_COUNT, 0 + PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 +.pc = YSIN "Inline" + .var min = 51 + .var max = 250-21 + .var ampl = max-min; + .for(var i=0;i<256;i++) + .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) + +.pc = SPRITE "Inline" + .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) +.for (var y=0; y<21; y++) + .for (var x=0;x<3; x++) + .byte pic.getSinglecolorByte(x,y) + + diff --git a/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.sym b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.sym new file mode 100644 index 000000000..7463c195f --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.sym @@ -0,0 +1,180 @@ +(label) @28 +(label) @31 +(label) @begin +(label) @end +(byte) BLACK +(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0 +(byte*) BORDERCOL +(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280 +(byte*) D011 +(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265 +(byte) GREEN +(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5 +(byte) PLEX_COUNT +(const byte) PLEX_COUNT#0 PLEX_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 24 +(byte[PLEX_COUNT#0]) PLEX_PTR +(const byte[PLEX_COUNT#0]) PLEX_PTR#0 PLEX_PTR = { fill( PLEX_COUNT#0, 0) } +(byte*) PLEX_SCREEN_PTR +(const byte*) PLEX_SCREEN_PTR#1 PLEX_SCREEN_PTR = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1016 +(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX +(const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 PLEX_SORTED_IDX = { fill( PLEX_COUNT#0, 0) } +(word[PLEX_COUNT#0]) PLEX_XPOS +(const word[PLEX_COUNT#0]) PLEX_XPOS#0 PLEX_XPOS = { fill( PLEX_COUNT#0, 0) } +(byte[PLEX_COUNT#0]) PLEX_YPOS +(const byte[PLEX_COUNT#0]) PLEX_YPOS#0 PLEX_YPOS = { fill( PLEX_COUNT#0, 0) } +(byte*) RASTER +(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266 +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 +(byte*) SPRITE +(const byte*) SPRITE#0 SPRITE = ((byte*))(word/signed word/dword/signed dword) 8192 +(byte*) SPRITES_COLS +(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287 +(byte*) SPRITES_ENABLE +(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269 +(byte*) SPRITES_XMSB +(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264 +(byte*) SPRITES_XPOS +(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248 +(byte*) SPRITES_YPOS +(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249 +(byte) VIC_DEN +(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16 +(byte) VIC_RSEL +(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8 +(byte*) YSIN +(const byte*) YSIN#0 YSIN = ((byte*))(word/signed word/dword/signed dword) 8448 +(void()) init() +(byte~) init::$6 reg byte a 22.0 +(label) init::@1 +(label) init::@2 +(label) init::@3 +(label) init::@return +(byte) init::ss +(byte) init::ss#1 reg byte x 16.5 +(byte) init::ss#2 reg byte x 16.5 +(byte) init::sx +(byte) init::sx#1 reg byte x 16.5 +(byte) init::sx#2 reg byte x 8.8 +(word) init::xp +(word) init::xp#1 xp zp ZP_WORD:7 7.333333333333333 +(word) init::xp#2 xp zp ZP_WORD:7 8.25 +(void()) loop() +(label) loop::@1 +(label) loop::@10 +(label) loop::@12 +(label) loop::@18 +(label) loop::@23 +(label) loop::@25 +(label) loop::@26 +(label) loop::@27 +(label) loop::@28 +(label) loop::@4 +(label) loop::@6 +(label) loop::@7 +(label) loop::@8 +(label) loop::@9 +(label) loop::plexShowNextYpos1 +(byte) loop::plexShowNextYpos1_return +(byte) loop::plexShowNextYpos1_return#0 reg byte a 202.0 +(byte) loop::rasterY +(byte) loop::rasterY#0 rasterY zp ZP_BYTE:9 551.0 +(byte) loop::sin_idx +(byte) loop::sin_idx#1 sin_idx zp ZP_BYTE:2 1.2222222222222223 +(byte) loop::sin_idx#6 sin_idx zp ZP_BYTE:2 3.666666666666667 +(byte) loop::ss +(byte) loop::ss#1 ss zp ZP_BYTE:3 151.5 +(byte) loop::ss#2 ss zp ZP_BYTE:3 101.0 +(byte) loop::ss2 +(byte) loop::ss2#1 ss2 zp ZP_BYTE:3 151.5 +(byte) loop::ss2#6 ss2 zp ZP_BYTE:3 28.857142857142858 +(byte) loop::sy +(byte) loop::sy#1 reg byte y 151.5 +(byte) loop::sy#2 reg byte y 101.0 +(byte) loop::y_idx +(byte) loop::y_idx#1 reg byte x 67.33333333333333 +(byte) loop::y_idx#2 reg byte x 157.0 +(byte~) loop::y_idx#3 reg byte x 22.0 +(void()) main() +(label) main::@1 +(label) main::@return +(void()) plexInit((byte*) plexInit::screen) +(label) plexInit::@1 +(label) plexInit::@return +(byte) plexInit::i +(byte) plexInit::i#1 reg byte x 16.5 +(byte) plexInit::i#2 reg byte x 22.0 +(label) plexInit::plexSetScreen1 +(byte*~) plexInit::plexSetScreen1_$0 +(byte*) plexInit::plexSetScreen1_screen +(byte*) plexInit::screen +(void()) plexShowSprite() +(byte~) plexShowSprite::$2 reg byte a 4.0 +(byte~) plexShowSprite::$3 reg byte a 4.0 +(byte/word/dword~) plexShowSprite::$5 reg byte a 4.0 +(byte/signed word/word/dword/signed dword~) plexShowSprite::$6 reg byte a 4.0 +(label) plexShowSprite::@1 +(label) plexShowSprite::@2 +(label) plexShowSprite::@4 +(label) plexShowSprite::@7 +(label) plexShowSprite::@return +(byte) plexShowSprite::plex_sprite_idx2 +(byte) plexShowSprite::plex_sprite_idx2#0 reg byte y 1.2000000000000002 +(byte) plexShowSprite::xpos_idx +(byte) plexShowSprite::xpos_idx#0 reg byte x 2.0 +(void()) plexSort() +(label) plexSort::@1 +(label) plexSort::@10 +(label) plexSort::@2 +(label) plexSort::@3 +(label) plexSort::@5 +(label) plexSort::@7 +(label) plexSort::@return +(byte) plexSort::m +(byte) plexSort::m#1 m zp ZP_BYTE:3 151.5 +(byte) plexSort::m#2 m zp ZP_BYTE:3 42.08333333333333 +(byte) plexSort::nxt_idx +(byte) plexSort::nxt_idx#0 nxt_idx zp ZP_BYTE:4 30.299999999999997 +(byte) plexSort::nxt_y +(byte) plexSort::nxt_y#0 nxt_y zp ZP_BYTE:5 150.375 +(byte) plexSort::s +(byte) plexSort::s#1 reg byte x 1368.3333333333335 +(byte) plexSort::s#2 reg byte x 202.0 +(byte) plexSort::s#3 reg byte x 2052.5 +(byte~) plexSort::s#6 reg byte x 202.0 +(byte) plex_show_idx +(byte) plex_show_idx#13 plex_show_idx zp ZP_BYTE:5 14.999999999999998 +(byte) plex_show_idx#15 plex_show_idx zp ZP_BYTE:5 16.944444444444443 +(byte) plex_show_idx#25 plex_show_idx zp ZP_BYTE:5 202.0 +(byte) plex_sprite_idx +(byte) plex_sprite_idx#13 plex_sprite_idx zp ZP_BYTE:4 17.333333333333336 +(byte) plex_sprite_idx#15 plex_sprite_idx zp ZP_BYTE:4 10.736842105263158 +(byte) plex_sprite_idx#24 plex_sprite_idx zp ZP_BYTE:4 202.0 +(byte) plex_sprite_msb +(byte) plex_sprite_msb#14 plex_sprite_msb zp ZP_BYTE:6 13.866666666666665 +(byte) plex_sprite_msb#17 plex_sprite_msb zp ZP_BYTE:6 14.571428571428571 +(byte) plex_sprite_msb#26 plex_sprite_msb zp ZP_BYTE:6 2.0 +(byte) plex_sprite_msb#29 plex_sprite_msb zp ZP_BYTE:6 202.0 + +zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ] +reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] +reg byte y [ loop::sy#2 loop::sy#1 ] +zp ZP_BYTE:3 [ loop::ss#2 loop::ss#1 loop::ss2#6 loop::ss2#1 plexSort::m#2 plexSort::m#1 ] +zp ZP_BYTE:4 [ plex_sprite_idx#13 plex_sprite_idx#24 plex_sprite_idx#15 plexSort::nxt_idx#0 ] +zp ZP_BYTE:5 [ plex_show_idx#13 plex_show_idx#25 plex_show_idx#15 plexSort::nxt_y#0 ] +zp ZP_BYTE:6 [ plex_sprite_msb#14 plex_sprite_msb#29 plex_sprite_msb#17 plex_sprite_msb#26 ] +reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] +reg byte x [ init::sx#2 init::sx#1 ] +zp ZP_WORD:7 [ init::xp#2 init::xp#1 ] +reg byte x [ init::ss#2 init::ss#1 ] +reg byte x [ plexInit::i#2 plexInit::i#1 ] +reg byte a [ loop::plexShowNextYpos1_return#0 ] +zp ZP_BYTE:9 [ loop::rasterY#0 ] +reg byte y [ plexShowSprite::plex_sprite_idx2#0 ] +reg byte x [ plexShowSprite::xpos_idx#0 ] +reg byte a [ plexShowSprite::$2 ] +reg byte a [ plexShowSprite::$3 ] +reg byte a [ plexShowSprite::$5 ] +reg byte a [ plexShowSprite::$6 ] +reg byte x [ plexSort::s#2 ] +reg byte a [ init::$6 ]