mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-08-03 01:29:04 +00:00
Added data alignment directive for arrays/strings.
This commit is contained in:
parent
39925809e3
commit
694fb66379
@ -32,9 +32,9 @@ public class Compiler {
|
|||||||
|
|
||||||
public Program compile(String fileName) throws IOException {
|
public Program compile(String fileName) throws IOException {
|
||||||
try {
|
try {
|
||||||
StatementSequenceGenerator statementSequenceGenerator = new StatementSequenceGenerator(program);
|
Pass0GenerateStatementSequence pass0GenerateStatementSequence = new Pass0GenerateStatementSequence(program);
|
||||||
loadAndParseFile(fileName, program, statementSequenceGenerator);
|
loadAndParseFile(fileName, program, pass0GenerateStatementSequence);
|
||||||
StatementSequence sequence = statementSequenceGenerator.getSequence();
|
StatementSequence sequence = pass0GenerateStatementSequence.getSequence();
|
||||||
sequence.addStatement(new StatementCall(null, "main", new ArrayList<>()));
|
sequence.addStatement(new StatementCall(null, "main", new ArrayList<>()));
|
||||||
program.setStatementSequence(sequence);
|
program.setStatementSequence(sequence);
|
||||||
pass1GenerateSSA();
|
pass1GenerateSSA();
|
||||||
@ -50,7 +50,7 @@ public class Compiler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void loadAndParseFile(String fileName, Program program, StatementSequenceGenerator statementSequenceGenerator) {
|
public static void loadAndParseFile(String fileName, Program program, Pass0GenerateStatementSequence pass0GenerateStatementSequence) {
|
||||||
try {
|
try {
|
||||||
File file = loadFile(fileName, program);
|
File file = loadFile(fileName, program);
|
||||||
List<String> imported = program.getImported();
|
List<String> imported = program.getImported();
|
||||||
@ -76,7 +76,7 @@ public class Compiler {
|
|||||||
throw new CompileError("Error parsing file " + fileStream.getSourceName() + "\n - Line: " + line + "\n - Message: " + msg);
|
throw new CompileError("Error parsing file " + fileStream.getSourceName() + "\n - Line: " + line + "\n - Message: " + msg);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
statementSequenceGenerator.generate(parser.file());
|
pass0GenerateStatementSequence.generate(parser.file());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new CompileError("Error loading file " + fileName, e);
|
throw new CompileError("Error loading file " + fileName, e);
|
||||||
}
|
}
|
||||||
|
41
src/main/java/dk/camelot64/kickc/asm/AsmDataAlignment.java
Normal file
41
src/main/java/dk/camelot64/kickc/asm/AsmDataAlignment.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package dk.camelot64.kickc.asm;
|
||||||
|
|
||||||
|
/** Data alignment directive. */
|
||||||
|
public class AsmDataAlignment implements AsmLine {
|
||||||
|
|
||||||
|
private String alignment;
|
||||||
|
private int index;
|
||||||
|
|
||||||
|
public AsmDataAlignment(String alignment) {
|
||||||
|
this.alignment = alignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLineBytes() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getLineCycles() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsm() {
|
||||||
|
StringBuilder asm = new StringBuilder();
|
||||||
|
asm.append(".align ");
|
||||||
|
asm.append(alignment);
|
||||||
|
return asm.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIndex() {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setIndex(int index) {
|
||||||
|
this.index = index;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,7 @@
|
|||||||
package dk.camelot64.kickc.asm;
|
package dk.camelot64.kickc.asm;
|
||||||
|
|
||||||
|
import dk.camelot64.kickc.fragment.AsmFragment;
|
||||||
|
|
||||||
/** A labelled numeric data directive. */
|
/** A labelled numeric data directive. */
|
||||||
public class AsmDataFill implements AsmLine {
|
public class AsmDataFill implements AsmLine {
|
||||||
|
|
||||||
@ -36,7 +38,7 @@ public class AsmDataFill implements AsmLine {
|
|||||||
StringBuilder asm = new StringBuilder();
|
StringBuilder asm = new StringBuilder();
|
||||||
asm.append(label+": ");
|
asm.append(label+": ");
|
||||||
asm.append(".fill ");
|
asm.append(".fill ");
|
||||||
asm.append(size*type.bytes);
|
asm.append(AsmFragment.getAsmNumber(size*type.bytes));
|
||||||
asm.append(", ");
|
asm.append(", ");
|
||||||
asm.append(fillValue);
|
asm.append(fillValue);
|
||||||
return asm.toString();
|
return asm.toString();
|
||||||
|
@ -103,9 +103,8 @@ public class AsmProgram {
|
|||||||
addLine(new AsmDataFill(label, type, size, fillValue));
|
addLine(new AsmDataFill(label, type, size, fillValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a string data declaration tot the ASM
|
* Add a string data declaration to the ASM
|
||||||
* @param label The label of the data
|
* @param label The label of the data
|
||||||
* @param value The value of the string
|
* @param value The value of the string
|
||||||
*/
|
*/
|
||||||
@ -113,6 +112,14 @@ public class AsmProgram {
|
|||||||
addLine(new AsmDataString(label, value));
|
addLine(new AsmDataString(label, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add data alignment to the ASM
|
||||||
|
* @param alignment The number to align the address of the next data to
|
||||||
|
*/
|
||||||
|
public void addDataAlignment(String alignment) {
|
||||||
|
addLine(new AsmDataAlignment(alignment));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of bytes the segment occupies in memory.
|
* Get the number of bytes the segment occupies in memory.
|
||||||
|
@ -166,7 +166,7 @@ public class AsmSegment {
|
|||||||
printState.decIndent();
|
printState.decIndent();
|
||||||
}
|
}
|
||||||
out.append(printState.getIndent());
|
out.append(printState.getIndent());
|
||||||
if (line instanceof AsmComment || line instanceof AsmInstruction || line instanceof AsmLabelDecl || line instanceof AsmConstant || line instanceof AsmDataNumeric || line instanceof AsmDataFill || line instanceof AsmDataString) {
|
if (line instanceof AsmComment || line instanceof AsmInstruction || line instanceof AsmLabelDecl || line instanceof AsmConstant || line instanceof AsmDataNumeric || line instanceof AsmDataFill || line instanceof AsmDataString|| line instanceof AsmDataAlignment) {
|
||||||
out.append(" ");
|
out.append(" ");
|
||||||
}
|
}
|
||||||
out.append(line.getAsm() + "\n");
|
out.append(line.getAsm() + "\n");
|
||||||
|
@ -21,6 +21,8 @@ public class ConstantVar implements Symbol {
|
|||||||
/** A short name used for the variable in ASM code. If possible variable names of ZP variables are shortened in ASM code. This is possible, when all versions of the var use the same register. */
|
/** A short name used for the variable in ASM code. If possible variable names of ZP variables are shortened in ASM code. This is possible, when all versions of the var use the same register. */
|
||||||
private String asmName;
|
private String asmName;
|
||||||
|
|
||||||
|
/** Specifies that the variable must be aligned in memory. Only allowed for arrays & strings. */
|
||||||
|
private Integer declaredAlignment;
|
||||||
|
|
||||||
public ConstantVar(String name, Scope scope, SymbolType type, ConstantValue value) {
|
public ConstantVar(String name, Scope scope, SymbolType type, ConstantValue value) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@ -51,7 +53,6 @@ public class ConstantVar implements Symbol {
|
|||||||
this.asmName = asmName;
|
this.asmName = asmName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SymbolType getType() {
|
public SymbolType getType() {
|
||||||
return type;
|
return type;
|
||||||
@ -88,6 +89,13 @@ public class ConstantVar implements Symbol {
|
|||||||
return new ConstantRef(this);
|
return new ConstantRef(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getDeclaredAlignment() {
|
||||||
|
return declaredAlignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeclaredAlignment(Integer declaredAlignment) {
|
||||||
|
this.declaredAlignment = declaredAlignment;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(Program program) {
|
public String toString(Program program) {
|
||||||
|
@ -24,9 +24,12 @@ public abstract class Variable implements Symbol {
|
|||||||
/** A short name used for the variable in ASM code. If possible variable names of ZP variables are shortened in ASM code. This is possible, when all versions of the var use the same register. */
|
/** A short name used for the variable in ASM code. If possible variable names of ZP variables are shortened in ASM code. This is possible, when all versions of the var use the same register. */
|
||||||
private String asmName;
|
private String asmName;
|
||||||
|
|
||||||
/** Speciies that the variableis declared a constant. It willb replaced by a ConstantVar when possible. */
|
/** Specifies that the variable is declared a constant. It will be replaced by a ConstantVar when possible. */
|
||||||
private boolean declaredConstant;
|
private boolean declaredConstant;
|
||||||
|
|
||||||
|
/** Specifies that the variable must be aligned in memory. Only allowed for arrays & strings. */
|
||||||
|
private Integer declaredAlignment;
|
||||||
|
|
||||||
public Variable(String name, Scope scope, SymbolType type) {
|
public Variable(String name, Scope scope, SymbolType type) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.scope = scope;
|
this.scope = scope;
|
||||||
@ -126,6 +129,14 @@ public abstract class Variable implements Symbol {
|
|||||||
this.declaredConstant = declaredConstant;
|
this.declaredConstant = declaredConstant;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getDeclaredAlignment() {
|
||||||
|
return declaredAlignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeclaredAlignment(Integer declaredAlignment) {
|
||||||
|
this.declaredAlignment = declaredAlignment;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return toString(null);
|
return toString(null);
|
||||||
|
@ -5,9 +5,7 @@ package dk.camelot64.kickc.model;
|
|||||||
*/
|
*/
|
||||||
public class VariableUnversioned extends Variable {
|
public class VariableUnversioned extends Variable {
|
||||||
|
|
||||||
/**
|
/** The number of the next version */
|
||||||
* The number of the next version
|
|
||||||
*/
|
|
||||||
private Integer nextVersionNumber;
|
private Integer nextVersionNumber;
|
||||||
|
|
||||||
public VariableUnversioned(
|
public VariableUnversioned(
|
||||||
|
@ -11,6 +11,7 @@ public class VariableVersion extends Variable {
|
|||||||
|
|
||||||
public VariableVersion(VariableUnversioned versionOf, int version) {
|
public VariableVersion(VariableUnversioned versionOf, int version) {
|
||||||
super(versionOf.getLocalName()+"#"+version, versionOf.getScope(), versionOf.getType());
|
super(versionOf.getLocalName()+"#"+version, versionOf.getScope(), versionOf.getType());
|
||||||
|
this.setDeclaredAlignment(versionOf.getDeclaredAlignment());
|
||||||
this.versionOfName = versionOf.getLocalName();
|
this.versionOfName = versionOf.getLocalName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,16 @@ parameterDecl
|
|||||||
: typeDecl NAME ;
|
: typeDecl NAME ;
|
||||||
|
|
||||||
declVar
|
declVar
|
||||||
: ('const')? typeDecl NAME ('=' expr)? ';'
|
: directives? typeDecl directives? NAME ('=' expr)? ';'
|
||||||
|
;
|
||||||
|
|
||||||
|
directives
|
||||||
|
: directive+
|
||||||
|
;
|
||||||
|
|
||||||
|
directive
|
||||||
|
: 'const' #directiveConst
|
||||||
|
| 'align' '(' NUMBER ')' #directiveAlign
|
||||||
;
|
;
|
||||||
|
|
||||||
stmtSeq
|
stmtSeq
|
||||||
|
@ -46,70 +46,72 @@ T__44=45
|
|||||||
T__45=46
|
T__45=46
|
||||||
T__46=47
|
T__46=47
|
||||||
T__47=48
|
T__47=48
|
||||||
MNEMONIC=49
|
T__48=49
|
||||||
SIMPLETYPE=50
|
MNEMONIC=50
|
||||||
STRING=51
|
SIMPLETYPE=51
|
||||||
CHAR=52
|
STRING=52
|
||||||
BOOLEAN=53
|
CHAR=53
|
||||||
NUMBER=54
|
BOOLEAN=54
|
||||||
NUMFLOAT=55
|
NUMBER=55
|
||||||
BINFLOAT=56
|
NUMFLOAT=56
|
||||||
DECFLOAT=57
|
BINFLOAT=57
|
||||||
HEXFLOAT=58
|
DECFLOAT=58
|
||||||
NUMINT=59
|
HEXFLOAT=59
|
||||||
BININTEGER=60
|
NUMINT=60
|
||||||
DECINTEGER=61
|
BININTEGER=61
|
||||||
HEXINTEGER=62
|
DECINTEGER=62
|
||||||
NAME=63
|
HEXINTEGER=63
|
||||||
ASMREL=64
|
NAME=64
|
||||||
WS=65
|
ASMREL=65
|
||||||
COMMENT_LINE=66
|
WS=66
|
||||||
COMMENT_BLOCK=67
|
COMMENT_LINE=67
|
||||||
|
COMMENT_BLOCK=68
|
||||||
'import'=1
|
'import'=1
|
||||||
'('=2
|
'('=2
|
||||||
')'=3
|
')'=3
|
||||||
'{'=4
|
'{'=4
|
||||||
'}'=5
|
'}'=5
|
||||||
','=6
|
','=6
|
||||||
'const'=7
|
'='=7
|
||||||
'='=8
|
';'=8
|
||||||
';'=9
|
'const'=9
|
||||||
'if'=10
|
'align'=10
|
||||||
'else'=11
|
'if'=11
|
||||||
'while'=12
|
'else'=12
|
||||||
'do'=13
|
'while'=13
|
||||||
'for'=14
|
'do'=14
|
||||||
'return'=15
|
'for'=15
|
||||||
'asm'=16
|
'return'=16
|
||||||
':'=17
|
'asm'=17
|
||||||
'..'=18
|
':'=18
|
||||||
'signed'=19
|
'..'=19
|
||||||
'*'=20
|
'signed'=20
|
||||||
'['=21
|
'*'=21
|
||||||
']'=22
|
'['=22
|
||||||
'--'=23
|
']'=23
|
||||||
'++'=24
|
'--'=24
|
||||||
'+'=25
|
'++'=25
|
||||||
'-'=26
|
'+'=26
|
||||||
'!'=27
|
'-'=27
|
||||||
'&'=28
|
'!'=28
|
||||||
'~'=29
|
'&'=29
|
||||||
'>>'=30
|
'~'=30
|
||||||
'<<'=31
|
'>>'=31
|
||||||
'/'=32
|
'<<'=32
|
||||||
'%'=33
|
'/'=33
|
||||||
'<'=34
|
'%'=34
|
||||||
'>'=35
|
'<'=35
|
||||||
'=='=36
|
'>'=36
|
||||||
'!='=37
|
'=='=37
|
||||||
'<>'=38
|
'!='=38
|
||||||
'<='=39
|
'<>'=39
|
||||||
'=<'=40
|
'<='=40
|
||||||
'>='=41
|
'=<'=41
|
||||||
'=>'=42
|
'>='=42
|
||||||
'^'=43
|
'=>'=43
|
||||||
'|'=44
|
'^'=44
|
||||||
'&&'=45
|
'|'=45
|
||||||
'||'=46
|
'&&'=46
|
||||||
'.byte'=47
|
'||'=47
|
||||||
'#'=48
|
'.byte'=48
|
||||||
|
'#'=49
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Generated from /Users/jespergravgaard/c64/src/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;
|
package dk.camelot64.kickc.parser;
|
||||||
|
|
||||||
import org.antlr.v4.runtime.ParserRuleContext;
|
import org.antlr.v4.runtime.ParserRuleContext;
|
||||||
@ -131,6 +131,42 @@ public class KickCBaseListener implements KickCListener {
|
|||||||
* <p>The default implementation does nothing.</p>
|
* <p>The default implementation does nothing.</p>
|
||||||
*/
|
*/
|
||||||
@Override public void exitDeclVar(KickCParser.DeclVarContext ctx) { }
|
@Override public void exitDeclVar(KickCParser.DeclVarContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterDirectives(KickCParser.DirectivesContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitDirectives(KickCParser.DirectivesContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterDirectiveConst(KickCParser.DirectiveConstContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitDirectiveConst(KickCParser.DirectiveConstContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void enterDirectiveAlign(KickCParser.DirectiveAlignContext ctx) { }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation does nothing.</p>
|
||||||
|
*/
|
||||||
|
@Override public void exitDirectiveAlign(KickCParser.DirectiveAlignContext ctx) { }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Generated from /Users/jespergravgaard/c64/src/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;
|
package dk.camelot64.kickc.parser;
|
||||||
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
|
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
|
||||||
|
|
||||||
@ -81,6 +81,27 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
|||||||
* {@link #visitChildren} on {@code ctx}.</p>
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
*/
|
*/
|
||||||
@Override public T visitDeclVar(KickCParser.DeclVarContext ctx) { return visitChildren(ctx); }
|
@Override public T visitDeclVar(KickCParser.DeclVarContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitDirectives(KickCParser.DirectivesContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitDirectiveConst(KickCParser.DirectiveConstContext ctx) { return visitChildren(ctx); }
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>The default implementation returns the result of calling
|
||||||
|
* {@link #visitChildren} on {@code ctx}.</p>
|
||||||
|
*/
|
||||||
|
@Override public T visitDirectiveAlign(KickCParser.DirectiveAlignContext ctx) { return visitChildren(ctx); }
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Generated from /Users/jespergravgaard/c64/src/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;
|
package dk.camelot64.kickc.parser;
|
||||||
import org.antlr.v4.runtime.Lexer;
|
import org.antlr.v4.runtime.Lexer;
|
||||||
import org.antlr.v4.runtime.CharStream;
|
import org.antlr.v4.runtime.CharStream;
|
||||||
@ -23,10 +23,10 @@ public class KickCLexer extends Lexer {
|
|||||||
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
|
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
|
||||||
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
|
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
|
||||||
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
|
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
|
||||||
T__45=46, T__46=47, T__47=48, MNEMONIC=49, SIMPLETYPE=50, STRING=51, CHAR=52,
|
T__45=46, T__46=47, T__47=48, T__48=49, MNEMONIC=50, SIMPLETYPE=51, STRING=52,
|
||||||
BOOLEAN=53, NUMBER=54, NUMFLOAT=55, BINFLOAT=56, DECFLOAT=57, HEXFLOAT=58,
|
CHAR=53, BOOLEAN=54, NUMBER=55, NUMFLOAT=56, BINFLOAT=57, DECFLOAT=58,
|
||||||
NUMINT=59, BININTEGER=60, DECINTEGER=61, HEXINTEGER=62, NAME=63, ASMREL=64,
|
HEXFLOAT=59, NUMINT=60, BININTEGER=61, DECINTEGER=62, HEXINTEGER=63, NAME=64,
|
||||||
WS=65, COMMENT_LINE=66, COMMENT_BLOCK=67;
|
ASMREL=65, WS=66, COMMENT_LINE=67, COMMENT_BLOCK=68;
|
||||||
public static String[] channelNames = {
|
public static String[] channelNames = {
|
||||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||||
};
|
};
|
||||||
@ -41,16 +41,16 @@ public class KickCLexer extends Lexer {
|
|||||||
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
|
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
|
||||||
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
|
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
|
||||||
"T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
|
"T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
|
||||||
"T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "MNEMONIC",
|
"T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48",
|
||||||
"SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT",
|
"MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT",
|
||||||
"DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER",
|
"BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER",
|
||||||
"BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR",
|
"HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START",
|
||||||
"ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
"NAME_CHAR", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final String[] _LITERAL_NAMES = {
|
private static final String[] _LITERAL_NAMES = {
|
||||||
null, "'import'", "'('", "')'", "'{'", "'}'", "','", "'const'", "'='",
|
null, "'import'", "'('", "')'", "'{'", "'}'", "','", "'='", "';'", "'const'",
|
||||||
"';'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'",
|
"'align'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'",
|
||||||
"':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'",
|
"':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'",
|
||||||
"'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'",
|
"'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'",
|
||||||
"'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'",
|
"'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'",
|
||||||
@ -61,7 +61,7 @@ public class KickCLexer extends Lexer {
|
|||||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
null, 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", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER",
|
null, null, "MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER",
|
||||||
"NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER",
|
"NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER",
|
||||||
"DECINTEGER", "HEXINTEGER", "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
"DECINTEGER", "HEXINTEGER", "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
|
||||||
};
|
};
|
||||||
@ -123,7 +123,7 @@ public class KickCLexer extends Lexer {
|
|||||||
public ATN getATN() { return _ATN; }
|
public ATN getATN() { return _ATN; }
|
||||||
|
|
||||||
public static final String _serializedATN =
|
public static final String _serializedATN =
|
||||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2E\u02d0\b\1\4\2\t"+
|
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2F\u02d8\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"+
|
"\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"+
|
"\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"+
|
"\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"+
|
||||||
@ -132,267 +132,270 @@ public class KickCLexer extends Lexer {
|
|||||||
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
|
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
|
||||||
"\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="+
|
"\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"+
|
"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
|
||||||
"\tI\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"+
|
"\tI\4J\tJ\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"+
|
||||||
"\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f"+
|
"\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3"+
|
||||||
"\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3"+
|
"\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16"+
|
||||||
"\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\22\3\22\3\23\3"+
|
"\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
|
||||||
"\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3"+
|
"\3\22\3\22\3\22\3\22\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25"+
|
||||||
"\27\3\30\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3"+
|
"\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\32"+
|
||||||
"\35\3\36\3\36\3\37\3\37\3\37\3 \3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%"+
|
"\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3 \3!\3!\3!\3"+
|
||||||
"\3%\3&\3&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-"+
|
"\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3*\3*"+
|
||||||
"\3-\3.\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\62\3\62"+
|
"\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"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\61\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\5\62\u0204\n\62\3\63"+
|
"\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
|
||||||
"\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63"+
|
"\63\3\63\3\63\3\63\5\63\u020c\n\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+
|
||||||
"\3\63\3\63\3\63\3\63\5\63\u0219\n\63\3\64\3\64\3\64\3\64\7\64\u021f\n"+
|
"\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\5\64\u0221"+
|
||||||
"\64\f\64\16\64\u0222\13\64\3\64\3\64\3\65\3\65\3\65\3\65\5\65\u022a\n"+
|
"\n\64\3\65\3\65\3\65\3\65\7\65\u0227\n\65\f\65\16\65\u022a\13\65\3\65"+
|
||||||
"\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\5\66\u0237"+
|
"\3\65\3\66\3\66\3\66\3\66\5\66\u0232\n\66\3\66\3\66\3\67\3\67\3\67\3\67"+
|
||||||
"\n\66\3\67\3\67\5\67\u023b\n\67\38\38\38\58\u0240\n8\39\39\39\39\39\5"+
|
"\3\67\3\67\3\67\3\67\3\67\5\67\u023f\n\67\38\38\58\u0243\n8\39\39\39\5"+
|
||||||
"9\u0247\n9\39\79\u024a\n9\f9\169\u024d\139\39\39\69\u0251\n9\r9\169\u0252"+
|
"9\u0248\n9\3:\3:\3:\3:\3:\5:\u024f\n:\3:\7:\u0252\n:\f:\16:\u0255\13:"+
|
||||||
"\3:\7:\u0256\n:\f:\16:\u0259\13:\3:\3:\6:\u025d\n:\r:\16:\u025e\3;\3;"+
|
"\3:\3:\6:\u0259\n:\r:\16:\u025a\3;\7;\u025e\n;\f;\16;\u0261\13;\3;\3;"+
|
||||||
"\3;\3;\3;\5;\u0266\n;\3;\7;\u0269\n;\f;\16;\u026c\13;\3;\3;\6;\u0270\n"+
|
"\6;\u0265\n;\r;\16;\u0266\3<\3<\3<\3<\3<\5<\u026e\n<\3<\7<\u0271\n<\f"+
|
||||||
";\r;\16;\u0271\3<\3<\3<\5<\u0277\n<\3=\3=\3=\6=\u027c\n=\r=\16=\u027d"+
|
"<\16<\u0274\13<\3<\3<\6<\u0278\n<\r<\16<\u0279\3=\3=\3=\5=\u027f\n=\3"+
|
||||||
"\3=\3=\6=\u0282\n=\r=\16=\u0283\5=\u0286\n=\3>\6>\u0289\n>\r>\16>\u028a"+
|
">\3>\3>\6>\u0284\n>\r>\16>\u0285\3>\3>\6>\u028a\n>\r>\16>\u028b\5>\u028e"+
|
||||||
"\3?\3?\3?\3?\3?\5?\u0292\n?\3?\6?\u0295\n?\r?\16?\u0296\3@\3@\3A\3A\3"+
|
"\n>\3?\6?\u0291\n?\r?\16?\u0292\3@\3@\3@\3@\3@\5@\u029a\n@\3@\6@\u029d"+
|
||||||
"B\3B\3C\3C\7C\u02a1\nC\fC\16C\u02a4\13C\3D\3D\3E\3E\3F\3F\7F\u02ac\nF"+
|
"\n@\r@\16@\u029e\3A\3A\3B\3B\3C\3C\3D\3D\7D\u02a9\nD\fD\16D\u02ac\13D"+
|
||||||
"\fF\16F\u02af\13F\3G\6G\u02b2\nG\rG\16G\u02b3\3G\3G\3H\3H\3H\3H\7H\u02bc"+
|
"\3E\3E\3F\3F\3G\3G\7G\u02b4\nG\fG\16G\u02b7\13G\3H\6H\u02ba\nH\rH\16H"+
|
||||||
"\nH\fH\16H\u02bf\13H\3H\3H\3I\3I\3I\3I\7I\u02c7\nI\fI\16I\u02ca\13I\3"+
|
"\u02bb\3H\3H\3I\3I\3I\3I\7I\u02c4\nI\fI\16I\u02c7\13I\3I\3I\3J\3J\3J\3"+
|
||||||
"I\3I\3I\3I\3I\3\u02c8\2J\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f"+
|
"J\7J\u02cf\nJ\fJ\16J\u02d2\13J\3J\3J\3J\3J\3J\3\u02d0\2K\3\3\5\4\7\5\t"+
|
||||||
"\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63"+
|
"\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"+
|
||||||
"\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62"+
|
"%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G"+
|
||||||
"c\63e\64g\65i\66k\67m8o9q:s;u<w=y>{?}@\177\2\u0081\2\u0083\2\u0085A\u0087"+
|
"%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u<w=y>{"+
|
||||||
"\2\u0089\2\u008bB\u008dC\u008fD\u0091E\3\2\r\3\2$$\3\2))\4\2DDdd\3\2\62"+
|
"?}@\177A\u0081\2\u0083\2\u0085\2\u0087B\u0089\2\u008b\2\u008dC\u008fD"+
|
||||||
"\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\4\2--//\5\2\13\f\17"+
|
"\u0091E\u0093F\3\2\r\3\2$$\3\2))\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHc"+
|
||||||
"\17\"\"\4\2\f\f\17\17\2\u0335\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t"+
|
"h\5\2C\\aac|\6\2\62;C\\aac|\4\2--//\5\2\13\f\17\17\"\"\4\2\f\f\17\17\2"+
|
||||||
"\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"+
|
"\u033d\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"+\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#\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"+
|
||||||
"\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\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"+
|
||||||
"C\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;\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\2"+
|
||||||
"\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"+
|
"G\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]\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\2"+
|
"\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"+
|
||||||
"i\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\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2"+
|
||||||
"\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\u0085\3\2\2\2\2\u008b"+
|
"m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3"+
|
||||||
"\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\3\u0093\3\2\2"+
|
"\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0087\3\2\2\2\2\u008d\3\2"+
|
||||||
"\2\5\u009a\3\2\2\2\7\u009c\3\2\2\2\t\u009e\3\2\2\2\13\u00a0\3\2\2\2\r"+
|
"\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\3\u0095\3\2\2\2\5"+
|
||||||
"\u00a2\3\2\2\2\17\u00a4\3\2\2\2\21\u00aa\3\2\2\2\23\u00ac\3\2\2\2\25\u00ae"+
|
"\u009c\3\2\2\2\7\u009e\3\2\2\2\t\u00a0\3\2\2\2\13\u00a2\3\2\2\2\r\u00a4"+
|
||||||
"\3\2\2\2\27\u00b1\3\2\2\2\31\u00b6\3\2\2\2\33\u00bc\3\2\2\2\35\u00bf\3"+
|
"\3\2\2\2\17\u00a6\3\2\2\2\21\u00a8\3\2\2\2\23\u00aa\3\2\2\2\25\u00b0\3"+
|
||||||
"\2\2\2\37\u00c3\3\2\2\2!\u00ca\3\2\2\2#\u00ce\3\2\2\2%\u00d0\3\2\2\2\'"+
|
"\2\2\2\27\u00b6\3\2\2\2\31\u00b9\3\2\2\2\33\u00be\3\2\2\2\35\u00c4\3\2"+
|
||||||
"\u00d3\3\2\2\2)\u00da\3\2\2\2+\u00dc\3\2\2\2-\u00de\3\2\2\2/\u00e0\3\2"+
|
"\2\2\37\u00c7\3\2\2\2!\u00cb\3\2\2\2#\u00d2\3\2\2\2%\u00d6\3\2\2\2\'\u00d8"+
|
||||||
"\2\2\61\u00e3\3\2\2\2\63\u00e6\3\2\2\2\65\u00e8\3\2\2\2\67\u00ea\3\2\2"+
|
"\3\2\2\2)\u00db\3\2\2\2+\u00e2\3\2\2\2-\u00e4\3\2\2\2/\u00e6\3\2\2\2\61"+
|
||||||
"\29\u00ec\3\2\2\2;\u00ee\3\2\2\2=\u00f0\3\2\2\2?\u00f3\3\2\2\2A\u00f6"+
|
"\u00e8\3\2\2\2\63\u00eb\3\2\2\2\65\u00ee\3\2\2\2\67\u00f0\3\2\2\29\u00f2"+
|
||||||
"\3\2\2\2C\u00f8\3\2\2\2E\u00fa\3\2\2\2G\u00fc\3\2\2\2I\u00fe\3\2\2\2K"+
|
"\3\2\2\2;\u00f4\3\2\2\2=\u00f6\3\2\2\2?\u00f8\3\2\2\2A\u00fb\3\2\2\2C"+
|
||||||
"\u0101\3\2\2\2M\u0104\3\2\2\2O\u0107\3\2\2\2Q\u010a\3\2\2\2S\u010d\3\2"+
|
"\u00fe\3\2\2\2E\u0100\3\2\2\2G\u0102\3\2\2\2I\u0104\3\2\2\2K\u0106\3\2"+
|
||||||
"\2\2U\u0110\3\2\2\2W\u0113\3\2\2\2Y\u0115\3\2\2\2[\u0117\3\2\2\2]\u011a"+
|
"\2\2M\u0109\3\2\2\2O\u010c\3\2\2\2Q\u010f\3\2\2\2S\u0112\3\2\2\2U\u0115"+
|
||||||
"\3\2\2\2_\u011d\3\2\2\2a\u0123\3\2\2\2c\u0203\3\2\2\2e\u0218\3\2\2\2g"+
|
"\3\2\2\2W\u0118\3\2\2\2Y\u011b\3\2\2\2[\u011d\3\2\2\2]\u011f\3\2\2\2_"+
|
||||||
"\u021a\3\2\2\2i\u0225\3\2\2\2k\u0236\3\2\2\2m\u023a\3\2\2\2o\u023f\3\2"+
|
"\u0122\3\2\2\2a\u0125\3\2\2\2c\u012b\3\2\2\2e\u020b\3\2\2\2g\u0220\3\2"+
|
||||||
"\2\2q\u0246\3\2\2\2s\u0257\3\2\2\2u\u0265\3\2\2\2w\u0276\3\2\2\2y\u0285"+
|
"\2\2i\u0222\3\2\2\2k\u022d\3\2\2\2m\u023e\3\2\2\2o\u0242\3\2\2\2q\u0247"+
|
||||||
"\3\2\2\2{\u0288\3\2\2\2}\u0291\3\2\2\2\177\u0298\3\2\2\2\u0081\u029a\3"+
|
"\3\2\2\2s\u024e\3\2\2\2u\u025f\3\2\2\2w\u026d\3\2\2\2y\u027e\3\2\2\2{"+
|
||||||
"\2\2\2\u0083\u029c\3\2\2\2\u0085\u029e\3\2\2\2\u0087\u02a5\3\2\2\2\u0089"+
|
"\u028d\3\2\2\2}\u0290\3\2\2\2\177\u0299\3\2\2\2\u0081\u02a0\3\2\2\2\u0083"+
|
||||||
"\u02a7\3\2\2\2\u008b\u02a9\3\2\2\2\u008d\u02b1\3\2\2\2\u008f\u02b7\3\2"+
|
"\u02a2\3\2\2\2\u0085\u02a4\3\2\2\2\u0087\u02a6\3\2\2\2\u0089\u02ad\3\2"+
|
||||||
"\2\2\u0091\u02c2\3\2\2\2\u0093\u0094\7k\2\2\u0094\u0095\7o\2\2\u0095\u0096"+
|
"\2\2\u008b\u02af\3\2\2\2\u008d\u02b1\3\2\2\2\u008f\u02b9\3\2\2\2\u0091"+
|
||||||
"\7r\2\2\u0096\u0097\7q\2\2\u0097\u0098\7t\2\2\u0098\u0099\7v\2\2\u0099"+
|
"\u02bf\3\2\2\2\u0093\u02ca\3\2\2\2\u0095\u0096\7k\2\2\u0096\u0097\7o\2"+
|
||||||
"\4\3\2\2\2\u009a\u009b\7*\2\2\u009b\6\3\2\2\2\u009c\u009d\7+\2\2\u009d"+
|
"\2\u0097\u0098\7r\2\2\u0098\u0099\7q\2\2\u0099\u009a\7t\2\2\u009a\u009b"+
|
||||||
"\b\3\2\2\2\u009e\u009f\7}\2\2\u009f\n\3\2\2\2\u00a0\u00a1\7\177\2\2\u00a1"+
|
"\7v\2\2\u009b\4\3\2\2\2\u009c\u009d\7*\2\2\u009d\6\3\2\2\2\u009e\u009f"+
|
||||||
"\f\3\2\2\2\u00a2\u00a3\7.\2\2\u00a3\16\3\2\2\2\u00a4\u00a5\7e\2\2\u00a5"+
|
"\7+\2\2\u009f\b\3\2\2\2\u00a0\u00a1\7}\2\2\u00a1\n\3\2\2\2\u00a2\u00a3"+
|
||||||
"\u00a6\7q\2\2\u00a6\u00a7\7p\2\2\u00a7\u00a8\7u\2\2\u00a8\u00a9\7v\2\2"+
|
"\7\177\2\2\u00a3\f\3\2\2\2\u00a4\u00a5\7.\2\2\u00a5\16\3\2\2\2\u00a6\u00a7"+
|
||||||
"\u00a9\20\3\2\2\2\u00aa\u00ab\7?\2\2\u00ab\22\3\2\2\2\u00ac\u00ad\7=\2"+
|
"\7?\2\2\u00a7\20\3\2\2\2\u00a8\u00a9\7=\2\2\u00a9\22\3\2\2\2\u00aa\u00ab"+
|
||||||
"\2\u00ad\24\3\2\2\2\u00ae\u00af\7k\2\2\u00af\u00b0\7h\2\2\u00b0\26\3\2"+
|
"\7e\2\2\u00ab\u00ac\7q\2\2\u00ac\u00ad\7p\2\2\u00ad\u00ae\7u\2\2\u00ae"+
|
||||||
"\2\2\u00b1\u00b2\7g\2\2\u00b2\u00b3\7n\2\2\u00b3\u00b4\7u\2\2\u00b4\u00b5"+
|
"\u00af\7v\2\2\u00af\24\3\2\2\2\u00b0\u00b1\7c\2\2\u00b1\u00b2\7n\2\2\u00b2"+
|
||||||
"\7g\2\2\u00b5\30\3\2\2\2\u00b6\u00b7\7y\2\2\u00b7\u00b8\7j\2\2\u00b8\u00b9"+
|
"\u00b3\7k\2\2\u00b3\u00b4\7i\2\2\u00b4\u00b5\7p\2\2\u00b5\26\3\2\2\2\u00b6"+
|
||||||
"\7k\2\2\u00b9\u00ba\7n\2\2\u00ba\u00bb\7g\2\2\u00bb\32\3\2\2\2\u00bc\u00bd"+
|
"\u00b7\7k\2\2\u00b7\u00b8\7h\2\2\u00b8\30\3\2\2\2\u00b9\u00ba\7g\2\2\u00ba"+
|
||||||
"\7f\2\2\u00bd\u00be\7q\2\2\u00be\34\3\2\2\2\u00bf\u00c0\7h\2\2\u00c0\u00c1"+
|
"\u00bb\7n\2\2\u00bb\u00bc\7u\2\2\u00bc\u00bd\7g\2\2\u00bd\32\3\2\2\2\u00be"+
|
||||||
"\7q\2\2\u00c1\u00c2\7t\2\2\u00c2\36\3\2\2\2\u00c3\u00c4\7t\2\2\u00c4\u00c5"+
|
"\u00bf\7y\2\2\u00bf\u00c0\7j\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2\7n\2\2"+
|
||||||
"\7g\2\2\u00c5\u00c6\7v\2\2\u00c6\u00c7\7w\2\2\u00c7\u00c8\7t\2\2\u00c8"+
|
"\u00c2\u00c3\7g\2\2\u00c3\34\3\2\2\2\u00c4\u00c5\7f\2\2\u00c5\u00c6\7"+
|
||||||
"\u00c9\7p\2\2\u00c9 \3\2\2\2\u00ca\u00cb\7c\2\2\u00cb\u00cc\7u\2\2\u00cc"+
|
"q\2\2\u00c6\36\3\2\2\2\u00c7\u00c8\7h\2\2\u00c8\u00c9\7q\2\2\u00c9\u00ca"+
|
||||||
"\u00cd\7o\2\2\u00cd\"\3\2\2\2\u00ce\u00cf\7<\2\2\u00cf$\3\2\2\2\u00d0"+
|
"\7t\2\2\u00ca \3\2\2\2\u00cb\u00cc\7t\2\2\u00cc\u00cd\7g\2\2\u00cd\u00ce"+
|
||||||
"\u00d1\7\60\2\2\u00d1\u00d2\7\60\2\2\u00d2&\3\2\2\2\u00d3\u00d4\7u\2\2"+
|
"\7v\2\2\u00ce\u00cf\7w\2\2\u00cf\u00d0\7t\2\2\u00d0\u00d1\7p\2\2\u00d1"+
|
||||||
"\u00d4\u00d5\7k\2\2\u00d5\u00d6\7i\2\2\u00d6\u00d7\7p\2\2\u00d7\u00d8"+
|
"\"\3\2\2\2\u00d2\u00d3\7c\2\2\u00d3\u00d4\7u\2\2\u00d4\u00d5\7o\2\2\u00d5"+
|
||||||
"\7g\2\2\u00d8\u00d9\7f\2\2\u00d9(\3\2\2\2\u00da\u00db\7,\2\2\u00db*\3"+
|
"$\3\2\2\2\u00d6\u00d7\7<\2\2\u00d7&\3\2\2\2\u00d8\u00d9\7\60\2\2\u00d9"+
|
||||||
"\2\2\2\u00dc\u00dd\7]\2\2\u00dd,\3\2\2\2\u00de\u00df\7_\2\2\u00df.\3\2"+
|
"\u00da\7\60\2\2\u00da(\3\2\2\2\u00db\u00dc\7u\2\2\u00dc\u00dd\7k\2\2\u00dd"+
|
||||||
"\2\2\u00e0\u00e1\7/\2\2\u00e1\u00e2\7/\2\2\u00e2\60\3\2\2\2\u00e3\u00e4"+
|
"\u00de\7i\2\2\u00de\u00df\7p\2\2\u00df\u00e0\7g\2\2\u00e0\u00e1\7f\2\2"+
|
||||||
"\7-\2\2\u00e4\u00e5\7-\2\2\u00e5\62\3\2\2\2\u00e6\u00e7\7-\2\2\u00e7\64"+
|
"\u00e1*\3\2\2\2\u00e2\u00e3\7,\2\2\u00e3,\3\2\2\2\u00e4\u00e5\7]\2\2\u00e5"+
|
||||||
"\3\2\2\2\u00e8\u00e9\7/\2\2\u00e9\66\3\2\2\2\u00ea\u00eb\7#\2\2\u00eb"+
|
".\3\2\2\2\u00e6\u00e7\7_\2\2\u00e7\60\3\2\2\2\u00e8\u00e9\7/\2\2\u00e9"+
|
||||||
"8\3\2\2\2\u00ec\u00ed\7(\2\2\u00ed:\3\2\2\2\u00ee\u00ef\7\u0080\2\2\u00ef"+
|
"\u00ea\7/\2\2\u00ea\62\3\2\2\2\u00eb\u00ec\7-\2\2\u00ec\u00ed\7-\2\2\u00ed"+
|
||||||
"<\3\2\2\2\u00f0\u00f1\7@\2\2\u00f1\u00f2\7@\2\2\u00f2>\3\2\2\2\u00f3\u00f4"+
|
"\64\3\2\2\2\u00ee\u00ef\7-\2\2\u00ef\66\3\2\2\2\u00f0\u00f1\7/\2\2\u00f1"+
|
||||||
"\7>\2\2\u00f4\u00f5\7>\2\2\u00f5@\3\2\2\2\u00f6\u00f7\7\61\2\2\u00f7B"+
|
"8\3\2\2\2\u00f2\u00f3\7#\2\2\u00f3:\3\2\2\2\u00f4\u00f5\7(\2\2\u00f5<"+
|
||||||
"\3\2\2\2\u00f8\u00f9\7\'\2\2\u00f9D\3\2\2\2\u00fa\u00fb\7>\2\2\u00fbF"+
|
"\3\2\2\2\u00f6\u00f7\7\u0080\2\2\u00f7>\3\2\2\2\u00f8\u00f9\7@\2\2\u00f9"+
|
||||||
"\3\2\2\2\u00fc\u00fd\7@\2\2\u00fdH\3\2\2\2\u00fe\u00ff\7?\2\2\u00ff\u0100"+
|
"\u00fa\7@\2\2\u00fa@\3\2\2\2\u00fb\u00fc\7>\2\2\u00fc\u00fd\7>\2\2\u00fd"+
|
||||||
"\7?\2\2\u0100J\3\2\2\2\u0101\u0102\7#\2\2\u0102\u0103\7?\2\2\u0103L\3"+
|
"B\3\2\2\2\u00fe\u00ff\7\61\2\2\u00ffD\3\2\2\2\u0100\u0101\7\'\2\2\u0101"+
|
||||||
"\2\2\2\u0104\u0105\7>\2\2\u0105\u0106\7@\2\2\u0106N\3\2\2\2\u0107\u0108"+
|
"F\3\2\2\2\u0102\u0103\7>\2\2\u0103H\3\2\2\2\u0104\u0105\7@\2\2\u0105J"+
|
||||||
"\7>\2\2\u0108\u0109\7?\2\2\u0109P\3\2\2\2\u010a\u010b\7?\2\2\u010b\u010c"+
|
"\3\2\2\2\u0106\u0107\7?\2\2\u0107\u0108\7?\2\2\u0108L\3\2\2\2\u0109\u010a"+
|
||||||
"\7>\2\2\u010cR\3\2\2\2\u010d\u010e\7@\2\2\u010e\u010f\7?\2\2\u010fT\3"+
|
"\7#\2\2\u010a\u010b\7?\2\2\u010bN\3\2\2\2\u010c\u010d\7>\2\2\u010d\u010e"+
|
||||||
"\2\2\2\u0110\u0111\7?\2\2\u0111\u0112\7@\2\2\u0112V\3\2\2\2\u0113\u0114"+
|
"\7@\2\2\u010eP\3\2\2\2\u010f\u0110\7>\2\2\u0110\u0111\7?\2\2\u0111R\3"+
|
||||||
"\7`\2\2\u0114X\3\2\2\2\u0115\u0116\7~\2\2\u0116Z\3\2\2\2\u0117\u0118\7"+
|
"\2\2\2\u0112\u0113\7?\2\2\u0113\u0114\7>\2\2\u0114T\3\2\2\2\u0115\u0116"+
|
||||||
"(\2\2\u0118\u0119\7(\2\2\u0119\\\3\2\2\2\u011a\u011b\7~\2\2\u011b\u011c"+
|
"\7@\2\2\u0116\u0117\7?\2\2\u0117V\3\2\2\2\u0118\u0119\7?\2\2\u0119\u011a"+
|
||||||
"\7~\2\2\u011c^\3\2\2\2\u011d\u011e\7\60\2\2\u011e\u011f\7d\2\2\u011f\u0120"+
|
"\7@\2\2\u011aX\3\2\2\2\u011b\u011c\7`\2\2\u011cZ\3\2\2\2\u011d\u011e\7"+
|
||||||
"\7{\2\2\u0120\u0121\7v\2\2\u0121\u0122\7g\2\2\u0122`\3\2\2\2\u0123\u0124"+
|
"~\2\2\u011e\\\3\2\2\2\u011f\u0120\7(\2\2\u0120\u0121\7(\2\2\u0121^\3\2"+
|
||||||
"\7%\2\2\u0124b\3\2\2\2\u0125\u0126\7d\2\2\u0126\u0127\7t\2\2\u0127\u0204"+
|
"\2\2\u0122\u0123\7~\2\2\u0123\u0124\7~\2\2\u0124`\3\2\2\2\u0125\u0126"+
|
||||||
"\7m\2\2\u0128\u0129\7q\2\2\u0129\u012a\7t\2\2\u012a\u0204\7c\2\2\u012b"+
|
"\7\60\2\2\u0126\u0127\7d\2\2\u0127\u0128\7{\2\2\u0128\u0129\7v\2\2\u0129"+
|
||||||
"\u012c\7m\2\2\u012c\u012d\7k\2\2\u012d\u0204\7n\2\2\u012e\u012f\7u\2\2"+
|
"\u012a\7g\2\2\u012ab\3\2\2\2\u012b\u012c\7%\2\2\u012cd\3\2\2\2\u012d\u012e"+
|
||||||
"\u012f\u0130\7n\2\2\u0130\u0204\7q\2\2\u0131\u0132\7p\2\2\u0132\u0133"+
|
"\7d\2\2\u012e\u012f\7t\2\2\u012f\u020c\7m\2\2\u0130\u0131\7q\2\2\u0131"+
|
||||||
"\7q\2\2\u0133\u0204\7r\2\2\u0134\u0135\7c\2\2\u0135\u0136\7u\2\2\u0136"+
|
"\u0132\7t\2\2\u0132\u020c\7c\2\2\u0133\u0134\7m\2\2\u0134\u0135\7k\2\2"+
|
||||||
"\u0204\7n\2\2\u0137\u0138\7r\2\2\u0138\u0139\7j\2\2\u0139\u0204\7r\2\2"+
|
"\u0135\u020c\7n\2\2\u0136\u0137\7u\2\2\u0137\u0138\7n\2\2\u0138\u020c"+
|
||||||
"\u013a\u013b\7c\2\2\u013b\u013c\7p\2\2\u013c\u0204\7e\2\2\u013d\u013e"+
|
"\7q\2\2\u0139\u013a\7p\2\2\u013a\u013b\7q\2\2\u013b\u020c\7r\2\2\u013c"+
|
||||||
"\7d\2\2\u013e\u013f\7r\2\2\u013f\u0204\7n\2\2\u0140\u0141\7e\2\2\u0141"+
|
"\u013d\7c\2\2\u013d\u013e\7u\2\2\u013e\u020c\7n\2\2\u013f\u0140\7r\2\2"+
|
||||||
"\u0142\7n\2\2\u0142\u0204\7e\2\2\u0143\u0144\7l\2\2\u0144\u0145\7u\2\2"+
|
"\u0140\u0141\7j\2\2\u0141\u020c\7r\2\2\u0142\u0143\7c\2\2\u0143\u0144"+
|
||||||
"\u0145\u0204\7t\2\2\u0146\u0147\7c\2\2\u0147\u0148\7p\2\2\u0148\u0204"+
|
"\7p\2\2\u0144\u020c\7e\2\2\u0145\u0146\7d\2\2\u0146\u0147\7r\2\2\u0147"+
|
||||||
"\7f\2\2\u0149\u014a\7t\2\2\u014a\u014b\7n\2\2\u014b\u0204\7c\2\2\u014c"+
|
"\u020c\7n\2\2\u0148\u0149\7e\2\2\u0149\u014a\7n\2\2\u014a\u020c\7e\2\2"+
|
||||||
"\u014d\7d\2\2\u014d\u014e\7k\2\2\u014e\u0204\7v\2\2\u014f\u0150\7t\2\2"+
|
"\u014b\u014c\7l\2\2\u014c\u014d\7u\2\2\u014d\u020c\7t\2\2\u014e\u014f"+
|
||||||
"\u0150\u0151\7q\2\2\u0151\u0204\7n\2\2\u0152\u0153\7r\2\2\u0153\u0154"+
|
"\7c\2\2\u014f\u0150\7p\2\2\u0150\u020c\7f\2\2\u0151\u0152\7t\2\2\u0152"+
|
||||||
"\7n\2\2\u0154\u0204\7c\2\2\u0155\u0156\7r\2\2\u0156\u0157\7n\2\2\u0157"+
|
"\u0153\7n\2\2\u0153\u020c\7c\2\2\u0154\u0155\7d\2\2\u0155\u0156\7k\2\2"+
|
||||||
"\u0204\7r\2\2\u0158\u0159\7d\2\2\u0159\u015a\7o\2\2\u015a\u0204\7k\2\2"+
|
"\u0156\u020c\7v\2\2\u0157\u0158\7t\2\2\u0158\u0159\7q\2\2\u0159\u020c"+
|
||||||
"\u015b\u015c\7u\2\2\u015c\u015d\7g\2\2\u015d\u0204\7e\2\2\u015e\u015f"+
|
"\7n\2\2\u015a\u015b\7r\2\2\u015b\u015c\7n\2\2\u015c\u020c\7c\2\2\u015d"+
|
||||||
"\7t\2\2\u015f\u0160\7v\2\2\u0160\u0204\7k\2\2\u0161\u0162\7g\2\2\u0162"+
|
"\u015e\7r\2\2\u015e\u015f\7n\2\2\u015f\u020c\7r\2\2\u0160\u0161\7d\2\2"+
|
||||||
"\u0163\7q\2\2\u0163\u0204\7t\2\2\u0164\u0165\7u\2\2\u0165\u0166\7t\2\2"+
|
"\u0161\u0162\7o\2\2\u0162\u020c\7k\2\2\u0163\u0164\7u\2\2\u0164\u0165"+
|
||||||
"\u0166\u0204\7g\2\2\u0167\u0168\7n\2\2\u0168\u0169\7u\2\2\u0169\u0204"+
|
"\7g\2\2\u0165\u020c\7e\2\2\u0166\u0167\7t\2\2\u0167\u0168\7v\2\2\u0168"+
|
||||||
"\7t\2\2\u016a\u016b\7r\2\2\u016b\u016c\7j\2\2\u016c\u0204\7c\2\2\u016d"+
|
"\u020c\7k\2\2\u0169\u016a\7g\2\2\u016a\u016b\7q\2\2\u016b\u020c\7t\2\2"+
|
||||||
"\u016e\7c\2\2\u016e\u016f\7n\2\2\u016f\u0204\7t\2\2\u0170\u0171\7l\2\2"+
|
"\u016c\u016d\7u\2\2\u016d\u016e\7t\2\2\u016e\u020c\7g\2\2\u016f\u0170"+
|
||||||
"\u0171\u0172\7o\2\2\u0172\u0204\7r\2\2\u0173\u0174\7d\2\2\u0174\u0175"+
|
"\7n\2\2\u0170\u0171\7u\2\2\u0171\u020c\7t\2\2\u0172\u0173\7r\2\2\u0173"+
|
||||||
"\7x\2\2\u0175\u0204\7e\2\2\u0176\u0177\7e\2\2\u0177\u0178\7n\2\2\u0178"+
|
"\u0174\7j\2\2\u0174\u020c\7c\2\2\u0175\u0176\7c\2\2\u0176\u0177\7n\2\2"+
|
||||||
"\u0204\7k\2\2\u0179\u017a\7t\2\2\u017a\u017b\7v\2\2\u017b\u0204\7u\2\2"+
|
"\u0177\u020c\7t\2\2\u0178\u0179\7l\2\2\u0179\u017a\7o\2\2\u017a\u020c"+
|
||||||
"\u017c\u017d\7c\2\2\u017d\u017e\7f\2\2\u017e\u0204\7e\2\2\u017f\u0180"+
|
"\7r\2\2\u017b\u017c\7d\2\2\u017c\u017d\7x\2\2\u017d\u020c\7e\2\2\u017e"+
|
||||||
"\7t\2\2\u0180\u0181\7t\2\2\u0181\u0204\7c\2\2\u0182\u0183\7d\2\2\u0183"+
|
"\u017f\7e\2\2\u017f\u0180\7n\2\2\u0180\u020c\7k\2\2\u0181\u0182\7t\2\2"+
|
||||||
"\u0184\7x\2\2\u0184\u0204\7u\2\2\u0185\u0186\7u\2\2\u0186\u0187\7g\2\2"+
|
"\u0182\u0183\7v\2\2\u0183\u020c\7u\2\2\u0184\u0185\7c\2\2\u0185\u0186"+
|
||||||
"\u0187\u0204\7k\2\2\u0188\u0189\7u\2\2\u0189\u018a\7c\2\2\u018a\u0204"+
|
"\7f\2\2\u0186\u020c\7e\2\2\u0187\u0188\7t\2\2\u0188\u0189\7t\2\2\u0189"+
|
||||||
"\7z\2\2\u018b\u018c\7u\2\2\u018c\u018d\7v\2\2\u018d\u0204\7{\2\2\u018e"+
|
"\u020c\7c\2\2\u018a\u018b\7d\2\2\u018b\u018c\7x\2\2\u018c\u020c\7u\2\2"+
|
||||||
"\u018f\7u\2\2\u018f\u0190\7v\2\2\u0190\u0204\7c\2\2\u0191\u0192\7u\2\2"+
|
"\u018d\u018e\7u\2\2\u018e\u018f\7g\2\2\u018f\u020c\7k\2\2\u0190\u0191"+
|
||||||
"\u0192\u0193\7v\2\2\u0193\u0204\7z\2\2\u0194\u0195\7f\2\2\u0195\u0196"+
|
"\7u\2\2\u0191\u0192\7c\2\2\u0192\u020c\7z\2\2\u0193\u0194\7u\2\2\u0194"+
|
||||||
"\7g\2\2\u0196\u0204\7{\2\2\u0197\u0198\7v\2\2\u0198\u0199\7z\2\2\u0199"+
|
"\u0195\7v\2\2\u0195\u020c\7{\2\2\u0196\u0197\7u\2\2\u0197\u0198\7v\2\2"+
|
||||||
"\u0204\7c\2\2\u019a\u019b\7z\2\2\u019b\u019c\7c\2\2\u019c\u0204\7c\2\2"+
|
"\u0198\u020c\7c\2\2\u0199\u019a\7u\2\2\u019a\u019b\7v\2\2\u019b\u020c"+
|
||||||
"\u019d\u019e\7d\2\2\u019e\u019f\7e\2\2\u019f\u0204\7e\2\2\u01a0\u01a1"+
|
"\7z\2\2\u019c\u019d\7f\2\2\u019d\u019e\7g\2\2\u019e\u020c\7{\2\2\u019f"+
|
||||||
"\7c\2\2\u01a1\u01a2\7j\2\2\u01a2\u0204\7z\2\2\u01a3\u01a4\7v\2\2\u01a4"+
|
"\u01a0\7v\2\2\u01a0\u01a1\7z\2\2\u01a1\u020c\7c\2\2\u01a2\u01a3\7z\2\2"+
|
||||||
"\u01a5\7{\2\2\u01a5\u0204\7c\2\2\u01a6\u01a7\7v\2\2\u01a7\u01a8\7z\2\2"+
|
"\u01a3\u01a4\7c\2\2\u01a4\u020c\7c\2\2\u01a5\u01a6\7d\2\2\u01a6\u01a7"+
|
||||||
"\u01a8\u0204\7u\2\2\u01a9\u01aa\7v\2\2\u01aa\u01ab\7c\2\2\u01ab\u0204"+
|
"\7e\2\2\u01a7\u020c\7e\2\2\u01a8\u01a9\7c\2\2\u01a9\u01aa\7j\2\2\u01aa"+
|
||||||
"\7u\2\2\u01ac\u01ad\7u\2\2\u01ad\u01ae\7j\2\2\u01ae\u0204\7{\2\2\u01af"+
|
"\u020c\7z\2\2\u01ab\u01ac\7v\2\2\u01ac\u01ad\7{\2\2\u01ad\u020c\7c\2\2"+
|
||||||
"\u01b0\7u\2\2\u01b0\u01b1\7j\2\2\u01b1\u0204\7z\2\2\u01b2\u01b3\7n\2\2"+
|
"\u01ae\u01af\7v\2\2\u01af\u01b0\7z\2\2\u01b0\u020c\7u\2\2\u01b1\u01b2"+
|
||||||
"\u01b3\u01b4\7f\2\2\u01b4\u0204\7{\2\2\u01b5\u01b6\7n\2\2\u01b6\u01b7"+
|
"\7v\2\2\u01b2\u01b3\7c\2\2\u01b3\u020c\7u\2\2\u01b4\u01b5\7u\2\2\u01b5"+
|
||||||
"\7f\2\2\u01b7\u0204\7c\2\2\u01b8\u01b9\7n\2\2\u01b9\u01ba\7f\2\2\u01ba"+
|
"\u01b6\7j\2\2\u01b6\u020c\7{\2\2\u01b7\u01b8\7u\2\2\u01b8\u01b9\7j\2\2"+
|
||||||
"\u0204\7z\2\2\u01bb\u01bc\7n\2\2\u01bc\u01bd\7c\2\2\u01bd\u0204\7z\2\2"+
|
"\u01b9\u020c\7z\2\2\u01ba\u01bb\7n\2\2\u01bb\u01bc\7f\2\2\u01bc\u020c"+
|
||||||
"\u01be\u01bf\7v\2\2\u01bf\u01c0\7c\2\2\u01c0\u0204\7{\2\2\u01c1\u01c2"+
|
"\7{\2\2\u01bd\u01be\7n\2\2\u01be\u01bf\7f\2\2\u01bf\u020c\7c\2\2\u01c0"+
|
||||||
"\7v\2\2\u01c2\u01c3\7c\2\2\u01c3\u0204\7z\2\2\u01c4\u01c5\7d\2\2\u01c5"+
|
"\u01c1\7n\2\2\u01c1\u01c2\7f\2\2\u01c2\u020c\7z\2\2\u01c3\u01c4\7n\2\2"+
|
||||||
"\u01c6\7e\2\2\u01c6\u0204\7u\2\2\u01c7\u01c8\7e\2\2\u01c8\u01c9\7n\2\2"+
|
"\u01c4\u01c5\7c\2\2\u01c5\u020c\7z\2\2\u01c6\u01c7\7v\2\2\u01c7\u01c8"+
|
||||||
"\u01c9\u0204\7x\2\2\u01ca\u01cb\7v\2\2\u01cb\u01cc\7u\2\2\u01cc\u0204"+
|
"\7c\2\2\u01c8\u020c\7{\2\2\u01c9\u01ca\7v\2\2\u01ca\u01cb\7c\2\2\u01cb"+
|
||||||
"\7z\2\2\u01cd\u01ce\7n\2\2\u01ce\u01cf\7c\2\2\u01cf\u0204\7u\2\2\u01d0"+
|
"\u020c\7z\2\2\u01cc\u01cd\7d\2\2\u01cd\u01ce\7e\2\2\u01ce\u020c\7u\2\2"+
|
||||||
"\u01d1\7e\2\2\u01d1\u01d2\7r\2\2\u01d2\u0204\7{\2\2\u01d3\u01d4\7e\2\2"+
|
"\u01cf\u01d0\7e\2\2\u01d0\u01d1\7n\2\2\u01d1\u020c\7x\2\2\u01d2\u01d3"+
|
||||||
"\u01d4\u01d5\7o\2\2\u01d5\u0204\7r\2\2\u01d6\u01d7\7e\2\2\u01d7\u01d8"+
|
"\7v\2\2\u01d3\u01d4\7u\2\2\u01d4\u020c\7z\2\2\u01d5\u01d6\7n\2\2\u01d6"+
|
||||||
"\7r\2\2\u01d8\u0204\7z\2\2\u01d9\u01da\7f\2\2\u01da\u01db\7e\2\2\u01db"+
|
"\u01d7\7c\2\2\u01d7\u020c\7u\2\2\u01d8\u01d9\7e\2\2\u01d9\u01da\7r\2\2"+
|
||||||
"\u0204\7r\2\2\u01dc\u01dd\7f\2\2\u01dd\u01de\7g\2\2\u01de\u0204\7e\2\2"+
|
"\u01da\u020c\7{\2\2\u01db\u01dc\7e\2\2\u01dc\u01dd\7o\2\2\u01dd\u020c"+
|
||||||
"\u01df\u01e0\7k\2\2\u01e0\u01e1\7p\2\2\u01e1\u0204\7e\2\2\u01e2\u01e3"+
|
"\7r\2\2\u01de\u01df\7e\2\2\u01df\u01e0\7r\2\2\u01e0\u020c\7z\2\2\u01e1"+
|
||||||
"\7c\2\2\u01e3\u01e4\7z\2\2\u01e4\u0204\7u\2\2\u01e5\u01e6\7d\2\2\u01e6"+
|
"\u01e2\7f\2\2\u01e2\u01e3\7e\2\2\u01e3\u020c\7r\2\2\u01e4\u01e5\7f\2\2"+
|
||||||
"\u01e7\7p\2\2\u01e7\u0204\7g\2\2\u01e8\u01e9\7e\2\2\u01e9\u01ea\7n\2\2"+
|
"\u01e5\u01e6\7g\2\2\u01e6\u020c\7e\2\2\u01e7\u01e8\7k\2\2\u01e8\u01e9"+
|
||||||
"\u01ea\u0204\7f\2\2\u01eb\u01ec\7u\2\2\u01ec\u01ed\7d\2\2\u01ed\u0204"+
|
"\7p\2\2\u01e9\u020c\7e\2\2\u01ea\u01eb\7c\2\2\u01eb\u01ec\7z\2\2\u01ec"+
|
||||||
"\7e\2\2\u01ee\u01ef\7k\2\2\u01ef\u01f0\7u\2\2\u01f0\u0204\7e\2\2\u01f1"+
|
"\u020c\7u\2\2\u01ed\u01ee\7d\2\2\u01ee\u01ef\7p\2\2\u01ef\u020c\7g\2\2"+
|
||||||
"\u01f2\7k\2\2\u01f2\u01f3\7p\2\2\u01f3\u0204\7z\2\2\u01f4\u01f5\7d\2\2"+
|
"\u01f0\u01f1\7e\2\2\u01f1\u01f2\7n\2\2\u01f2\u020c\7f\2\2\u01f3\u01f4"+
|
||||||
"\u01f5\u01f6\7g\2\2\u01f6\u0204\7s\2\2\u01f7\u01f8\7u\2\2\u01f8\u01f9"+
|
"\7u\2\2\u01f4\u01f5\7d\2\2\u01f5\u020c\7e\2\2\u01f6\u01f7\7k\2\2\u01f7"+
|
||||||
"\7g\2\2\u01f9\u0204\7f\2\2\u01fa\u01fb\7f\2\2\u01fb\u01fc\7g\2\2\u01fc"+
|
"\u01f8\7u\2\2\u01f8\u020c\7e\2\2\u01f9\u01fa\7k\2\2\u01fa\u01fb\7p\2\2"+
|
||||||
"\u0204\7z\2\2\u01fd\u01fe\7k\2\2\u01fe\u01ff\7p\2\2\u01ff\u0204\7{\2\2"+
|
"\u01fb\u020c\7z\2\2\u01fc\u01fd\7d\2\2\u01fd\u01fe\7g\2\2\u01fe\u020c"+
|
||||||
"\u0200\u0201\7t\2\2\u0201\u0202\7q\2\2\u0202\u0204\7t\2\2\u0203\u0125"+
|
"\7s\2\2\u01ff\u0200\7u\2\2\u0200\u0201\7g\2\2\u0201\u020c\7f\2\2\u0202"+
|
||||||
"\3\2\2\2\u0203\u0128\3\2\2\2\u0203\u012b\3\2\2\2\u0203\u012e\3\2\2\2\u0203"+
|
"\u0203\7f\2\2\u0203\u0204\7g\2\2\u0204\u020c\7z\2\2\u0205\u0206\7k\2\2"+
|
||||||
"\u0131\3\2\2\2\u0203\u0134\3\2\2\2\u0203\u0137\3\2\2\2\u0203\u013a\3\2"+
|
"\u0206\u0207\7p\2\2\u0207\u020c\7{\2\2\u0208\u0209\7t\2\2\u0209\u020a"+
|
||||||
"\2\2\u0203\u013d\3\2\2\2\u0203\u0140\3\2\2\2\u0203\u0143\3\2\2\2\u0203"+
|
"\7q\2\2\u020a\u020c\7t\2\2\u020b\u012d\3\2\2\2\u020b\u0130\3\2\2\2\u020b"+
|
||||||
"\u0146\3\2\2\2\u0203\u0149\3\2\2\2\u0203\u014c\3\2\2\2\u0203\u014f\3\2"+
|
"\u0133\3\2\2\2\u020b\u0136\3\2\2\2\u020b\u0139\3\2\2\2\u020b\u013c\3\2"+
|
||||||
"\2\2\u0203\u0152\3\2\2\2\u0203\u0155\3\2\2\2\u0203\u0158\3\2\2\2\u0203"+
|
"\2\2\u020b\u013f\3\2\2\2\u020b\u0142\3\2\2\2\u020b\u0145\3\2\2\2\u020b"+
|
||||||
"\u015b\3\2\2\2\u0203\u015e\3\2\2\2\u0203\u0161\3\2\2\2\u0203\u0164\3\2"+
|
"\u0148\3\2\2\2\u020b\u014b\3\2\2\2\u020b\u014e\3\2\2\2\u020b\u0151\3\2"+
|
||||||
"\2\2\u0203\u0167\3\2\2\2\u0203\u016a\3\2\2\2\u0203\u016d\3\2\2\2\u0203"+
|
"\2\2\u020b\u0154\3\2\2\2\u020b\u0157\3\2\2\2\u020b\u015a\3\2\2\2\u020b"+
|
||||||
"\u0170\3\2\2\2\u0203\u0173\3\2\2\2\u0203\u0176\3\2\2\2\u0203\u0179\3\2"+
|
"\u015d\3\2\2\2\u020b\u0160\3\2\2\2\u020b\u0163\3\2\2\2\u020b\u0166\3\2"+
|
||||||
"\2\2\u0203\u017c\3\2\2\2\u0203\u017f\3\2\2\2\u0203\u0182\3\2\2\2\u0203"+
|
"\2\2\u020b\u0169\3\2\2\2\u020b\u016c\3\2\2\2\u020b\u016f\3\2\2\2\u020b"+
|
||||||
"\u0185\3\2\2\2\u0203\u0188\3\2\2\2\u0203\u018b\3\2\2\2\u0203\u018e\3\2"+
|
"\u0172\3\2\2\2\u020b\u0175\3\2\2\2\u020b\u0178\3\2\2\2\u020b\u017b\3\2"+
|
||||||
"\2\2\u0203\u0191\3\2\2\2\u0203\u0194\3\2\2\2\u0203\u0197\3\2\2\2\u0203"+
|
"\2\2\u020b\u017e\3\2\2\2\u020b\u0181\3\2\2\2\u020b\u0184\3\2\2\2\u020b"+
|
||||||
"\u019a\3\2\2\2\u0203\u019d\3\2\2\2\u0203\u01a0\3\2\2\2\u0203\u01a3\3\2"+
|
"\u0187\3\2\2\2\u020b\u018a\3\2\2\2\u020b\u018d\3\2\2\2\u020b\u0190\3\2"+
|
||||||
"\2\2\u0203\u01a6\3\2\2\2\u0203\u01a9\3\2\2\2\u0203\u01ac\3\2\2\2\u0203"+
|
"\2\2\u020b\u0193\3\2\2\2\u020b\u0196\3\2\2\2\u020b\u0199\3\2\2\2\u020b"+
|
||||||
"\u01af\3\2\2\2\u0203\u01b2\3\2\2\2\u0203\u01b5\3\2\2\2\u0203\u01b8\3\2"+
|
"\u019c\3\2\2\2\u020b\u019f\3\2\2\2\u020b\u01a2\3\2\2\2\u020b\u01a5\3\2"+
|
||||||
"\2\2\u0203\u01bb\3\2\2\2\u0203\u01be\3\2\2\2\u0203\u01c1\3\2\2\2\u0203"+
|
"\2\2\u020b\u01a8\3\2\2\2\u020b\u01ab\3\2\2\2\u020b\u01ae\3\2\2\2\u020b"+
|
||||||
"\u01c4\3\2\2\2\u0203\u01c7\3\2\2\2\u0203\u01ca\3\2\2\2\u0203\u01cd\3\2"+
|
"\u01b1\3\2\2\2\u020b\u01b4\3\2\2\2\u020b\u01b7\3\2\2\2\u020b\u01ba\3\2"+
|
||||||
"\2\2\u0203\u01d0\3\2\2\2\u0203\u01d3\3\2\2\2\u0203\u01d6\3\2\2\2\u0203"+
|
"\2\2\u020b\u01bd\3\2\2\2\u020b\u01c0\3\2\2\2\u020b\u01c3\3\2\2\2\u020b"+
|
||||||
"\u01d9\3\2\2\2\u0203\u01dc\3\2\2\2\u0203\u01df\3\2\2\2\u0203\u01e2\3\2"+
|
"\u01c6\3\2\2\2\u020b\u01c9\3\2\2\2\u020b\u01cc\3\2\2\2\u020b\u01cf\3\2"+
|
||||||
"\2\2\u0203\u01e5\3\2\2\2\u0203\u01e8\3\2\2\2\u0203\u01eb\3\2\2\2\u0203"+
|
"\2\2\u020b\u01d2\3\2\2\2\u020b\u01d5\3\2\2\2\u020b\u01d8\3\2\2\2\u020b"+
|
||||||
"\u01ee\3\2\2\2\u0203\u01f1\3\2\2\2\u0203\u01f4\3\2\2\2\u0203\u01f7\3\2"+
|
"\u01db\3\2\2\2\u020b\u01de\3\2\2\2\u020b\u01e1\3\2\2\2\u020b\u01e4\3\2"+
|
||||||
"\2\2\u0203\u01fa\3\2\2\2\u0203\u01fd\3\2\2\2\u0203\u0200\3\2\2\2\u0204"+
|
"\2\2\u020b\u01e7\3\2\2\2\u020b\u01ea\3\2\2\2\u020b\u01ed\3\2\2\2\u020b"+
|
||||||
"d\3\2\2\2\u0205\u0206\7d\2\2\u0206\u0207\7{\2\2\u0207\u0208\7v\2\2\u0208"+
|
"\u01f0\3\2\2\2\u020b\u01f3\3\2\2\2\u020b\u01f6\3\2\2\2\u020b\u01f9\3\2"+
|
||||||
"\u0219\7g\2\2\u0209\u020a\7y\2\2\u020a\u020b\7q\2\2\u020b\u020c\7t\2\2"+
|
"\2\2\u020b\u01fc\3\2\2\2\u020b\u01ff\3\2\2\2\u020b\u0202\3\2\2\2\u020b"+
|
||||||
"\u020c\u0219\7f\2\2\u020d\u020e\7d\2\2\u020e\u020f\7q\2\2\u020f\u0210"+
|
"\u0205\3\2\2\2\u020b\u0208\3\2\2\2\u020cf\3\2\2\2\u020d\u020e\7d\2\2\u020e"+
|
||||||
"\7q\2\2\u0210\u0211\7n\2\2\u0211\u0212\7g\2\2\u0212\u0213\7c\2\2\u0213"+
|
"\u020f\7{\2\2\u020f\u0210\7v\2\2\u0210\u0221\7g\2\2\u0211\u0212\7y\2\2"+
|
||||||
"\u0219\7p\2\2\u0214\u0215\7x\2\2\u0215\u0216\7q\2\2\u0216\u0217\7k\2\2"+
|
"\u0212\u0213\7q\2\2\u0213\u0214\7t\2\2\u0214\u0221\7f\2\2\u0215\u0216"+
|
||||||
"\u0217\u0219\7f\2\2\u0218\u0205\3\2\2\2\u0218\u0209\3\2\2\2\u0218\u020d"+
|
"\7d\2\2\u0216\u0217\7q\2\2\u0217\u0218\7q\2\2\u0218\u0219\7n\2\2\u0219"+
|
||||||
"\3\2\2\2\u0218\u0214\3\2\2\2\u0219f\3\2\2\2\u021a\u0220\7$\2\2\u021b\u021c"+
|
"\u021a\7g\2\2\u021a\u021b\7c\2\2\u021b\u0221\7p\2\2\u021c\u021d\7x\2\2"+
|
||||||
"\7^\2\2\u021c\u021f\7$\2\2\u021d\u021f\n\2\2\2\u021e\u021b\3\2\2\2\u021e"+
|
"\u021d\u021e\7q\2\2\u021e\u021f\7k\2\2\u021f\u0221\7f\2\2\u0220\u020d"+
|
||||||
"\u021d\3\2\2\2\u021f\u0222\3\2\2\2\u0220\u021e\3\2\2\2\u0220\u0221\3\2"+
|
"\3\2\2\2\u0220\u0211\3\2\2\2\u0220\u0215\3\2\2\2\u0220\u021c\3\2\2\2\u0221"+
|
||||||
"\2\2\u0221\u0223\3\2\2\2\u0222\u0220\3\2\2\2\u0223\u0224\7$\2\2\u0224"+
|
"h\3\2\2\2\u0222\u0228\7$\2\2\u0223\u0224\7^\2\2\u0224\u0227\7$\2\2\u0225"+
|
||||||
"h\3\2\2\2\u0225\u0229\7)\2\2\u0226\u0227\7^\2\2\u0227\u022a\7)\2\2\u0228"+
|
"\u0227\n\2\2\2\u0226\u0223\3\2\2\2\u0226\u0225\3\2\2\2\u0227\u022a\3\2"+
|
||||||
"\u022a\n\3\2\2\u0229\u0226\3\2\2\2\u0229\u0228\3\2\2\2\u022a\u022b\3\2"+
|
"\2\2\u0228\u0226\3\2\2\2\u0228\u0229\3\2\2\2\u0229\u022b\3\2\2\2\u022a"+
|
||||||
"\2\2\u022b\u022c\7)\2\2\u022cj\3\2\2\2\u022d\u022e\7v\2\2\u022e\u022f"+
|
"\u0228\3\2\2\2\u022b\u022c\7$\2\2\u022cj\3\2\2\2\u022d\u0231\7)\2\2\u022e"+
|
||||||
"\7t\2\2\u022f\u0230\7w\2\2\u0230\u0237\7g\2\2\u0231\u0232\7h\2\2\u0232"+
|
"\u022f\7^\2\2\u022f\u0232\7)\2\2\u0230\u0232\n\3\2\2\u0231\u022e\3\2\2"+
|
||||||
"\u0233\7c\2\2\u0233\u0234\7n\2\2\u0234\u0235\7u\2\2\u0235\u0237\7g\2\2"+
|
"\2\u0231\u0230\3\2\2\2\u0232\u0233\3\2\2\2\u0233\u0234\7)\2\2\u0234l\3"+
|
||||||
"\u0236\u022d\3\2\2\2\u0236\u0231\3\2\2\2\u0237l\3\2\2\2\u0238\u023b\5"+
|
"\2\2\2\u0235\u0236\7v\2\2\u0236\u0237\7t\2\2\u0237\u0238\7w\2\2\u0238"+
|
||||||
"o8\2\u0239\u023b\5w<\2\u023a\u0238\3\2\2\2\u023a\u0239\3\2\2\2\u023bn"+
|
"\u023f\7g\2\2\u0239\u023a\7h\2\2\u023a\u023b\7c\2\2\u023b\u023c\7n\2\2"+
|
||||||
"\3\2\2\2\u023c\u0240\5q9\2\u023d\u0240\5s:\2\u023e\u0240\5u;\2\u023f\u023c"+
|
"\u023c\u023d\7u\2\2\u023d\u023f\7g\2\2\u023e\u0235\3\2\2\2\u023e\u0239"+
|
||||||
"\3\2\2\2\u023f\u023d\3\2\2\2\u023f\u023e\3\2\2\2\u0240p\3\2\2\2\u0241"+
|
"\3\2\2\2\u023fn\3\2\2\2\u0240\u0243\5q9\2\u0241\u0243\5y=\2\u0242\u0240"+
|
||||||
"\u0247\7\'\2\2\u0242\u0243\7\62\2\2\u0243\u0247\7d\2\2\u0244\u0245\7\62"+
|
"\3\2\2\2\u0242\u0241\3\2\2\2\u0243p\3\2\2\2\u0244\u0248\5s:\2\u0245\u0248"+
|
||||||
"\2\2\u0245\u0247\7D\2\2\u0246\u0241\3\2\2\2\u0246\u0242\3\2\2\2\u0246"+
|
"\5u;\2\u0246\u0248\5w<\2\u0247\u0244\3\2\2\2\u0247\u0245\3\2\2\2\u0247"+
|
||||||
"\u0244\3\2\2\2\u0247\u024b\3\2\2\2\u0248\u024a\5\177@\2\u0249\u0248\3"+
|
"\u0246\3\2\2\2\u0248r\3\2\2\2\u0249\u024f\7\'\2\2\u024a\u024b\7\62\2\2"+
|
||||||
"\2\2\2\u024a\u024d\3\2\2\2\u024b\u0249\3\2\2\2\u024b\u024c\3\2\2\2\u024c"+
|
"\u024b\u024f\7d\2\2\u024c\u024d\7\62\2\2\u024d\u024f\7D\2\2\u024e\u0249"+
|
||||||
"\u024e\3\2\2\2\u024d\u024b\3\2\2\2\u024e\u0250\7\60\2\2\u024f\u0251\5"+
|
"\3\2\2\2\u024e\u024a\3\2\2\2\u024e\u024c\3\2\2\2\u024f\u0253\3\2\2\2\u0250"+
|
||||||
"\177@\2\u0250\u024f\3\2\2\2\u0251\u0252\3\2\2\2\u0252\u0250\3\2\2\2\u0252"+
|
"\u0252\5\u0081A\2\u0251\u0250\3\2\2\2\u0252\u0255\3\2\2\2\u0253\u0251"+
|
||||||
"\u0253\3\2\2\2\u0253r\3\2\2\2\u0254\u0256\5\u0081A\2\u0255\u0254\3\2\2"+
|
"\3\2\2\2\u0253\u0254\3\2\2\2\u0254\u0256\3\2\2\2\u0255\u0253\3\2\2\2\u0256"+
|
||||||
"\2\u0256\u0259\3\2\2\2\u0257\u0255\3\2\2\2\u0257\u0258\3\2\2\2\u0258\u025a"+
|
"\u0258\7\60\2\2\u0257\u0259\5\u0081A\2\u0258\u0257\3\2\2\2\u0259\u025a"+
|
||||||
"\3\2\2\2\u0259\u0257\3\2\2\2\u025a\u025c\7\60\2\2\u025b\u025d\5\u0081"+
|
"\3\2\2\2\u025a\u0258\3\2\2\2\u025a\u025b\3\2\2\2\u025bt\3\2\2\2\u025c"+
|
||||||
"A\2\u025c\u025b\3\2\2\2\u025d\u025e\3\2\2\2\u025e\u025c\3\2\2\2\u025e"+
|
"\u025e\5\u0083B\2\u025d\u025c\3\2\2\2\u025e\u0261\3\2\2\2\u025f\u025d"+
|
||||||
"\u025f\3\2\2\2\u025ft\3\2\2\2\u0260\u0266\7&\2\2\u0261\u0262\7\62\2\2"+
|
"\3\2\2\2\u025f\u0260\3\2\2\2\u0260\u0262\3\2\2\2\u0261\u025f\3\2\2\2\u0262"+
|
||||||
"\u0262\u0266\7z\2\2\u0263\u0264\7\62\2\2\u0264\u0266\7Z\2\2\u0265\u0260"+
|
"\u0264\7\60\2\2\u0263\u0265\5\u0083B\2\u0264\u0263\3\2\2\2\u0265\u0266"+
|
||||||
"\3\2\2\2\u0265\u0261\3\2\2\2\u0265\u0263\3\2\2\2\u0266\u026a\3\2\2\2\u0267"+
|
"\3\2\2\2\u0266\u0264\3\2\2\2\u0266\u0267\3\2\2\2\u0267v\3\2\2\2\u0268"+
|
||||||
"\u0269\5\u0083B\2\u0268\u0267\3\2\2\2\u0269\u026c\3\2\2\2\u026a\u0268"+
|
"\u026e\7&\2\2\u0269\u026a\7\62\2\2\u026a\u026e\7z\2\2\u026b\u026c\7\62"+
|
||||||
"\3\2\2\2\u026a\u026b\3\2\2\2\u026b\u026d\3\2\2\2\u026c\u026a\3\2\2\2\u026d"+
|
"\2\2\u026c\u026e\7Z\2\2\u026d\u0268\3\2\2\2\u026d\u0269\3\2\2\2\u026d"+
|
||||||
"\u026f\7\60\2\2\u026e\u0270\5\u0083B\2\u026f\u026e\3\2\2\2\u0270\u0271"+
|
"\u026b\3\2\2\2\u026e\u0272\3\2\2\2\u026f\u0271\5\u0085C\2\u0270\u026f"+
|
||||||
"\3\2\2\2\u0271\u026f\3\2\2\2\u0271\u0272\3\2\2\2\u0272v\3\2\2\2\u0273"+
|
"\3\2\2\2\u0271\u0274\3\2\2\2\u0272\u0270\3\2\2\2\u0272\u0273\3\2\2\2\u0273"+
|
||||||
"\u0277\5{>\2\u0274\u0277\5}?\2\u0275\u0277\5y=\2\u0276\u0273\3\2\2\2\u0276"+
|
"\u0275\3\2\2\2\u0274\u0272\3\2\2\2\u0275\u0277\7\60\2\2\u0276\u0278\5"+
|
||||||
"\u0274\3\2\2\2\u0276\u0275\3\2\2\2\u0277x\3\2\2\2\u0278\u0279\7\62\2\2"+
|
"\u0085C\2\u0277\u0276\3\2\2\2\u0278\u0279\3\2\2\2\u0279\u0277\3\2\2\2"+
|
||||||
"\u0279\u027b\t\4\2\2\u027a\u027c\5\177@\2\u027b\u027a\3\2\2\2\u027c\u027d"+
|
"\u0279\u027a\3\2\2\2\u027ax\3\2\2\2\u027b\u027f\5}?\2\u027c\u027f\5\177"+
|
||||||
"\3\2\2\2\u027d\u027b\3\2\2\2\u027d\u027e\3\2\2\2\u027e\u0286\3\2\2\2\u027f"+
|
"@\2\u027d\u027f\5{>\2\u027e\u027b\3\2\2\2\u027e\u027c\3\2\2\2\u027e\u027d"+
|
||||||
"\u0281\7\'\2\2\u0280\u0282\5\177@\2\u0281\u0280\3\2\2\2\u0282\u0283\3"+
|
"\3\2\2\2\u027fz\3\2\2\2\u0280\u0281\7\62\2\2\u0281\u0283\t\4\2\2\u0282"+
|
||||||
"\2\2\2\u0283\u0281\3\2\2\2\u0283\u0284\3\2\2\2\u0284\u0286\3\2\2\2\u0285"+
|
"\u0284\5\u0081A\2\u0283\u0282\3\2\2\2\u0284\u0285\3\2\2\2\u0285\u0283"+
|
||||||
"\u0278\3\2\2\2\u0285\u027f\3\2\2\2\u0286z\3\2\2\2\u0287\u0289\5\u0081"+
|
"\3\2\2\2\u0285\u0286\3\2\2\2\u0286\u028e\3\2\2\2\u0287\u0289\7\'\2\2\u0288"+
|
||||||
"A\2\u0288\u0287\3\2\2\2\u0289\u028a\3\2\2\2\u028a\u0288\3\2\2\2\u028a"+
|
"\u028a\5\u0081A\2\u0289\u0288\3\2\2\2\u028a\u028b\3\2\2\2\u028b\u0289"+
|
||||||
"\u028b\3\2\2\2\u028b|\3\2\2\2\u028c\u0292\7&\2\2\u028d\u028e\7\62\2\2"+
|
"\3\2\2\2\u028b\u028c\3\2\2\2\u028c\u028e\3\2\2\2\u028d\u0280\3\2\2\2\u028d"+
|
||||||
"\u028e\u0292\7z\2\2\u028f\u0290\7\62\2\2\u0290\u0292\7Z\2\2\u0291\u028c"+
|
"\u0287\3\2\2\2\u028e|\3\2\2\2\u028f\u0291\5\u0083B\2\u0290\u028f\3\2\2"+
|
||||||
"\3\2\2\2\u0291\u028d\3\2\2\2\u0291\u028f\3\2\2\2\u0292\u0294\3\2\2\2\u0293"+
|
"\2\u0291\u0292\3\2\2\2\u0292\u0290\3\2\2\2\u0292\u0293\3\2\2\2\u0293~"+
|
||||||
"\u0295\5\u0083B\2\u0294\u0293\3\2\2\2\u0295\u0296\3\2\2\2\u0296\u0294"+
|
"\3\2\2\2\u0294\u029a\7&\2\2\u0295\u0296\7\62\2\2\u0296\u029a\7z\2\2\u0297"+
|
||||||
"\3\2\2\2\u0296\u0297\3\2\2\2\u0297~\3\2\2\2\u0298\u0299\t\5\2\2\u0299"+
|
"\u0298\7\62\2\2\u0298\u029a\7Z\2\2\u0299\u0294\3\2\2\2\u0299\u0295\3\2"+
|
||||||
"\u0080\3\2\2\2\u029a\u029b\t\6\2\2\u029b\u0082\3\2\2\2\u029c\u029d\t\7"+
|
"\2\2\u0299\u0297\3\2\2\2\u029a\u029c\3\2\2\2\u029b\u029d\5\u0085C\2\u029c"+
|
||||||
"\2\2\u029d\u0084\3\2\2\2\u029e\u02a2\5\u0087D\2\u029f\u02a1\5\u0089E\2"+
|
"\u029b\3\2\2\2\u029d\u029e\3\2\2\2\u029e\u029c\3\2\2\2\u029e\u029f\3\2"+
|
||||||
"\u02a0\u029f\3\2\2\2\u02a1\u02a4\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a2\u02a3"+
|
"\2\2\u029f\u0080\3\2\2\2\u02a0\u02a1\t\5\2\2\u02a1\u0082\3\2\2\2\u02a2"+
|
||||||
"\3\2\2\2\u02a3\u0086\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a5\u02a6\t\b\2\2\u02a6"+
|
"\u02a3\t\6\2\2\u02a3\u0084\3\2\2\2\u02a4\u02a5\t\7\2\2\u02a5\u0086\3\2"+
|
||||||
"\u0088\3\2\2\2\u02a7\u02a8\t\t\2\2\u02a8\u008a\3\2\2\2\u02a9\u02ad\7#"+
|
"\2\2\u02a6\u02aa\5\u0089E\2\u02a7\u02a9\5\u008bF\2\u02a8\u02a7\3\2\2\2"+
|
||||||
"\2\2\u02aa\u02ac\t\n\2\2\u02ab\u02aa\3\2\2\2\u02ac\u02af\3\2\2\2\u02ad"+
|
"\u02a9\u02ac\3\2\2\2\u02aa\u02a8\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab\u0088"+
|
||||||
"\u02ab\3\2\2\2\u02ad\u02ae\3\2\2\2\u02ae\u008c\3\2\2\2\u02af\u02ad\3\2"+
|
"\3\2\2\2\u02ac\u02aa\3\2\2\2\u02ad\u02ae\t\b\2\2\u02ae\u008a\3\2\2\2\u02af"+
|
||||||
"\2\2\u02b0\u02b2\t\13\2\2\u02b1\u02b0\3\2\2\2\u02b2\u02b3\3\2\2\2\u02b3"+
|
"\u02b0\t\t\2\2\u02b0\u008c\3\2\2\2\u02b1\u02b5\7#\2\2\u02b2\u02b4\t\n"+
|
||||||
"\u02b1\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02b5\3\2\2\2\u02b5\u02b6\bG"+
|
"\2\2\u02b3\u02b2\3\2\2\2\u02b4\u02b7\3\2\2\2\u02b5\u02b3\3\2\2\2\u02b5"+
|
||||||
"\2\2\u02b6\u008e\3\2\2\2\u02b7\u02b8\7\61\2\2\u02b8\u02b9\7\61\2\2\u02b9"+
|
"\u02b6\3\2\2\2\u02b6\u008e\3\2\2\2\u02b7\u02b5\3\2\2\2\u02b8\u02ba\t\13"+
|
||||||
"\u02bd\3\2\2\2\u02ba\u02bc\n\f\2\2\u02bb\u02ba\3\2\2\2\u02bc\u02bf\3\2"+
|
"\2\2\u02b9\u02b8\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bb\u02b9\3\2\2\2\u02bb"+
|
||||||
"\2\2\u02bd\u02bb\3\2\2\2\u02bd\u02be\3\2\2\2\u02be\u02c0\3\2\2\2\u02bf"+
|
"\u02bc\3\2\2\2\u02bc\u02bd\3\2\2\2\u02bd\u02be\bH\2\2\u02be\u0090\3\2"+
|
||||||
"\u02bd\3\2\2\2\u02c0\u02c1\bH\2\2\u02c1\u0090\3\2\2\2\u02c2\u02c3\7\61"+
|
"\2\2\u02bf\u02c0\7\61\2\2\u02c0\u02c1\7\61\2\2\u02c1\u02c5\3\2\2\2\u02c2"+
|
||||||
"\2\2\u02c3\u02c4\7,\2\2\u02c4\u02c8\3\2\2\2\u02c5\u02c7\13\2\2\2\u02c6"+
|
"\u02c4\n\f\2\2\u02c3\u02c2\3\2\2\2\u02c4\u02c7\3\2\2\2\u02c5\u02c3\3\2"+
|
||||||
"\u02c5\3\2\2\2\u02c7\u02ca\3\2\2\2\u02c8\u02c9\3\2\2\2\u02c8\u02c6\3\2"+
|
"\2\2\u02c5\u02c6\3\2\2\2\u02c6\u02c8\3\2\2\2\u02c7\u02c5\3\2\2\2\u02c8"+
|
||||||
"\2\2\u02c9\u02cb\3\2\2\2\u02ca\u02c8\3\2\2\2\u02cb\u02cc\7,\2\2\u02cc"+
|
"\u02c9\bI\2\2\u02c9\u0092\3\2\2\2\u02ca\u02cb\7\61\2\2\u02cb\u02cc\7,"+
|
||||||
"\u02cd\7\61\2\2\u02cd\u02ce\3\2\2\2\u02ce\u02cf\bI\2\2\u02cf\u0092\3\2"+
|
"\2\2\u02cc\u02d0\3\2\2\2\u02cd\u02cf\13\2\2\2\u02ce\u02cd\3\2\2\2\u02cf"+
|
||||||
"\2\2\37\2\u0203\u0218\u021e\u0220\u0229\u0236\u023a\u023f\u0246\u024b"+
|
"\u02d2\3\2\2\2\u02d0\u02d1\3\2\2\2\u02d0\u02ce\3\2\2\2\u02d1\u02d3\3\2"+
|
||||||
"\u0252\u0257\u025e\u0265\u026a\u0271\u0276\u027d\u0283\u0285\u028a\u0291"+
|
"\2\2\u02d2\u02d0\3\2\2\2\u02d3\u02d4\7,\2\2\u02d4\u02d5\7\61\2\2\u02d5"+
|
||||||
"\u0296\u02a2\u02ad\u02b3\u02bd\u02c8\3\b\2\2";
|
"\u02d6\3\2\2\2\u02d6\u02d7\bJ\2\2\u02d7\u0094\3\2\2\2\37\2\u020b\u0220"+
|
||||||
|
"\u0226\u0228\u0231\u023e\u0242\u0247\u024e\u0253\u025a\u025f\u0266\u026d"+
|
||||||
|
"\u0272\u0279\u027e\u0285\u028b\u028d\u0292\u0299\u029e\u02aa\u02b5\u02bb"+
|
||||||
|
"\u02c5\u02d0\3\b\2\2";
|
||||||
public static final ATN _ATN =
|
public static final ATN _ATN =
|
||||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||||
static {
|
static {
|
||||||
|
@ -46,70 +46,72 @@ T__44=45
|
|||||||
T__45=46
|
T__45=46
|
||||||
T__46=47
|
T__46=47
|
||||||
T__47=48
|
T__47=48
|
||||||
MNEMONIC=49
|
T__48=49
|
||||||
SIMPLETYPE=50
|
MNEMONIC=50
|
||||||
STRING=51
|
SIMPLETYPE=51
|
||||||
CHAR=52
|
STRING=52
|
||||||
BOOLEAN=53
|
CHAR=53
|
||||||
NUMBER=54
|
BOOLEAN=54
|
||||||
NUMFLOAT=55
|
NUMBER=55
|
||||||
BINFLOAT=56
|
NUMFLOAT=56
|
||||||
DECFLOAT=57
|
BINFLOAT=57
|
||||||
HEXFLOAT=58
|
DECFLOAT=58
|
||||||
NUMINT=59
|
HEXFLOAT=59
|
||||||
BININTEGER=60
|
NUMINT=60
|
||||||
DECINTEGER=61
|
BININTEGER=61
|
||||||
HEXINTEGER=62
|
DECINTEGER=62
|
||||||
NAME=63
|
HEXINTEGER=63
|
||||||
ASMREL=64
|
NAME=64
|
||||||
WS=65
|
ASMREL=65
|
||||||
COMMENT_LINE=66
|
WS=66
|
||||||
COMMENT_BLOCK=67
|
COMMENT_LINE=67
|
||||||
|
COMMENT_BLOCK=68
|
||||||
'import'=1
|
'import'=1
|
||||||
'('=2
|
'('=2
|
||||||
')'=3
|
')'=3
|
||||||
'{'=4
|
'{'=4
|
||||||
'}'=5
|
'}'=5
|
||||||
','=6
|
','=6
|
||||||
'const'=7
|
'='=7
|
||||||
'='=8
|
';'=8
|
||||||
';'=9
|
'const'=9
|
||||||
'if'=10
|
'align'=10
|
||||||
'else'=11
|
'if'=11
|
||||||
'while'=12
|
'else'=12
|
||||||
'do'=13
|
'while'=13
|
||||||
'for'=14
|
'do'=14
|
||||||
'return'=15
|
'for'=15
|
||||||
'asm'=16
|
'return'=16
|
||||||
':'=17
|
'asm'=17
|
||||||
'..'=18
|
':'=18
|
||||||
'signed'=19
|
'..'=19
|
||||||
'*'=20
|
'signed'=20
|
||||||
'['=21
|
'*'=21
|
||||||
']'=22
|
'['=22
|
||||||
'--'=23
|
']'=23
|
||||||
'++'=24
|
'--'=24
|
||||||
'+'=25
|
'++'=25
|
||||||
'-'=26
|
'+'=26
|
||||||
'!'=27
|
'-'=27
|
||||||
'&'=28
|
'!'=28
|
||||||
'~'=29
|
'&'=29
|
||||||
'>>'=30
|
'~'=30
|
||||||
'<<'=31
|
'>>'=31
|
||||||
'/'=32
|
'<<'=32
|
||||||
'%'=33
|
'/'=33
|
||||||
'<'=34
|
'%'=34
|
||||||
'>'=35
|
'<'=35
|
||||||
'=='=36
|
'>'=36
|
||||||
'!='=37
|
'=='=37
|
||||||
'<>'=38
|
'!='=38
|
||||||
'<='=39
|
'<>'=39
|
||||||
'=<'=40
|
'<='=40
|
||||||
'>='=41
|
'=<'=41
|
||||||
'=>'=42
|
'>='=42
|
||||||
'^'=43
|
'=>'=43
|
||||||
'|'=44
|
'^'=44
|
||||||
'&&'=45
|
'|'=45
|
||||||
'||'=46
|
'&&'=46
|
||||||
'.byte'=47
|
'||'=47
|
||||||
'#'=48
|
'.byte'=48
|
||||||
|
'#'=49
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Generated from /Users/jespergravgaard/c64/src/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;
|
package dk.camelot64.kickc.parser;
|
||||||
import org.antlr.v4.runtime.tree.ParseTreeListener;
|
import org.antlr.v4.runtime.tree.ParseTreeListener;
|
||||||
|
|
||||||
@ -111,6 +111,40 @@ public interface KickCListener extends ParseTreeListener {
|
|||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
*/
|
*/
|
||||||
void exitDeclVar(KickCParser.DeclVarContext ctx);
|
void exitDeclVar(KickCParser.DeclVarContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by {@link KickCParser#directives}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterDirectives(KickCParser.DirectivesContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by {@link KickCParser#directives}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitDirectives(KickCParser.DirectivesContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by the {@code directiveConst}
|
||||||
|
* labeled alternative in {@link KickCParser#directive}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterDirectiveConst(KickCParser.DirectiveConstContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by the {@code directiveConst}
|
||||||
|
* labeled alternative in {@link KickCParser#directive}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitDirectiveConst(KickCParser.DirectiveConstContext ctx);
|
||||||
|
/**
|
||||||
|
* Enter a parse tree produced by the {@code directiveAlign}
|
||||||
|
* labeled alternative in {@link KickCParser#directive}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void enterDirectiveAlign(KickCParser.DirectiveAlignContext ctx);
|
||||||
|
/**
|
||||||
|
* Exit a parse tree produced by the {@code directiveAlign}
|
||||||
|
* labeled alternative in {@link KickCParser#directive}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
*/
|
||||||
|
void exitDirectiveAlign(KickCParser.DirectiveAlignContext ctx);
|
||||||
/**
|
/**
|
||||||
* Enter a parse tree produced by {@link KickCParser#stmtSeq}.
|
* Enter a parse tree produced by {@link KickCParser#stmtSeq}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
// Generated from /Users/jespergravgaard/c64/src/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;
|
package dk.camelot64.kickc.parser;
|
||||||
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
|
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
|
||||||
|
|
||||||
@ -72,6 +72,26 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
|||||||
* @return the visitor result
|
* @return the visitor result
|
||||||
*/
|
*/
|
||||||
T visitDeclVar(KickCParser.DeclVarContext ctx);
|
T visitDeclVar(KickCParser.DeclVarContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by {@link KickCParser#directives}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitDirectives(KickCParser.DirectivesContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by the {@code directiveConst}
|
||||||
|
* labeled alternative in {@link KickCParser#directive}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitDirectiveConst(KickCParser.DirectiveConstContext ctx);
|
||||||
|
/**
|
||||||
|
* Visit a parse tree produced by the {@code directiveAlign}
|
||||||
|
* labeled alternative in {@link KickCParser#directive}.
|
||||||
|
* @param ctx the parse tree
|
||||||
|
* @return the visitor result
|
||||||
|
*/
|
||||||
|
T visitDirectiveAlign(KickCParser.DirectiveAlignContext ctx);
|
||||||
/**
|
/**
|
||||||
* Visit a parse tree produced by {@link KickCParser#stmtSeq}.
|
* Visit a parse tree produced by {@link KickCParser#stmtSeq}.
|
||||||
* @param ctx the parse tree
|
* @param ctx the parse tree
|
||||||
|
@ -9,19 +9,20 @@ import org.antlr.v4.runtime.ParserRuleContext;
|
|||||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates program SSA form by visiting the ANTLR4 parse tree
|
* Generates program SSA form by visiting the ANTLR4 parse tree
|
||||||
*/
|
*/
|
||||||
public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
|
||||||
|
|
||||||
private Program program;
|
private Program program;
|
||||||
private Stack<Scope> scopeStack;
|
private Stack<Scope> scopeStack;
|
||||||
private StatementSequence sequence;
|
private StatementSequence sequence;
|
||||||
|
|
||||||
public StatementSequenceGenerator(Program program) {
|
public Pass0GenerateStatementSequence(Program program) {
|
||||||
this.program = program;
|
this.program = program;
|
||||||
this.scopeStack = new Stack<>();
|
this.scopeStack = new Stack<>();
|
||||||
scopeStack.push(program.getScope());
|
scopeStack.push(program.getScope());
|
||||||
@ -139,9 +140,25 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
|||||||
SymbolType type = (SymbolType) visit(ctx.typeDecl());
|
SymbolType type = (SymbolType) visit(ctx.typeDecl());
|
||||||
String varName = ctx.NAME().getText();
|
String varName = ctx.NAME().getText();
|
||||||
VariableUnversioned lValue = getCurrentSymbols().addVariable(varName, type);
|
VariableUnversioned lValue = getCurrentSymbols().addVariable(varName, type);
|
||||||
if(ctx.getChild(0).getText().equals("const")) {
|
|
||||||
lValue.setDeclaredConstant(true);
|
List<Directive> directives = new ArrayList<>();
|
||||||
|
for(KickCParser.DirectivesContext directivesContext : ctx.directives()) {
|
||||||
|
directives.addAll((Collection<? extends Directive>) this.visit(directivesContext));
|
||||||
}
|
}
|
||||||
|
for(Directive directive : directives) {
|
||||||
|
if(directive instanceof DirectiveConst) {
|
||||||
|
lValue.setDeclaredConstant(true);
|
||||||
|
} else if(directive instanceof DirectiveAlign) {
|
||||||
|
if(type instanceof SymbolTypeArray || type.equals(SymbolType.STRING)) {
|
||||||
|
lValue.setDeclaredAlignment(((DirectiveAlign) directive).getAlignment());
|
||||||
|
} else {
|
||||||
|
throw new CompileError("Error! Cannot align variable that is not a string or an array " +lValue.toString(program));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new CompileError("Unknown directive " + directive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Array / String variables are implicitly constant
|
||||||
if(type instanceof SymbolTypeArray || type.equals(SymbolType.STRING)) {
|
if(type instanceof SymbolTypeArray || type.equals(SymbolType.STRING)) {
|
||||||
lValue.setDeclaredConstant(true);
|
lValue.setDeclaredConstant(true);
|
||||||
}
|
}
|
||||||
@ -152,8 +169,8 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
|||||||
// Add an zero-array initializer
|
// Add an zero-array initializer
|
||||||
SymbolTypeArray typeArray = (SymbolTypeArray) type;
|
SymbolTypeArray typeArray = (SymbolTypeArray) type;
|
||||||
Integer size = typeArray.getSize();
|
Integer size = typeArray.getSize();
|
||||||
if(size==null) {
|
if(size == null) {
|
||||||
throw new CompileError("Error! Cannot determine array size. "+lValue.toString(program));
|
throw new CompileError("Error! Cannot determine array size. " + lValue.toString(program));
|
||||||
}
|
}
|
||||||
Statement stmt = new StatementAssignment(lValue, new ConstantArrayFilled(typeArray.getElementType(), size));
|
Statement stmt = new StatementAssignment(lValue, new ConstantArrayFilled(typeArray.getElementType(), size));
|
||||||
sequence.addStatement(stmt);
|
sequence.addStatement(stmt);
|
||||||
@ -161,6 +178,45 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** A declaration directive.*/
|
||||||
|
private interface Directive {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Directive> visitDirectives(KickCParser.DirectivesContext ctx) {
|
||||||
|
ArrayList<Directive> directives = new ArrayList<>();
|
||||||
|
for(KickCParser.DirectiveContext directiveContext : ctx.directive()) {
|
||||||
|
directives.add((Directive) this.visit(directiveContext));
|
||||||
|
}
|
||||||
|
return directives;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Variable declared constant. */
|
||||||
|
private static class DirectiveConst implements Directive { }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Directive visitDirectiveConst(KickCParser.DirectiveConstContext ctx) {
|
||||||
|
return new DirectiveConst();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Variable memory alignment. */
|
||||||
|
private static class DirectiveAlign implements Directive {
|
||||||
|
private int alignment;
|
||||||
|
|
||||||
|
public DirectiveAlign(int alignment) {
|
||||||
|
this.alignment = alignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAlignment() {
|
||||||
|
return alignment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Directive visitDirectiveAlign(KickCParser.DirectiveAlignContext ctx) {
|
||||||
|
Number alignment = NumberParser.parseLiteral(ctx.NUMBER().getText());
|
||||||
|
return new DirectiveAlign(alignment.intValue());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitStmtSeq(KickCParser.StmtSeqContext ctx) {
|
public Void visitStmtSeq(KickCParser.StmtSeqContext ctx) {
|
||||||
for(int i = 0; i < ctx.getChildCount(); i++) {
|
for(int i = 0; i < ctx.getChildCount(); i++) {
|
||||||
@ -599,9 +655,9 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
|||||||
|
|
||||||
private List<PrePostModifier> postMods;
|
private List<PrePostModifier> postMods;
|
||||||
private List<PrePostModifier> preMods;
|
private List<PrePostModifier> preMods;
|
||||||
private StatementSequenceGenerator mainParser;
|
private Pass0GenerateStatementSequence mainParser;
|
||||||
|
|
||||||
public PrePostModifierHandler(StatementSequenceGenerator mainParser) {
|
public PrePostModifierHandler(Pass0GenerateStatementSequence mainParser) {
|
||||||
this.mainParser = mainParser;
|
this.mainParser = mainParser;
|
||||||
preMods = new ArrayList<>();
|
preMods = new ArrayList<>();
|
||||||
postMods = new ArrayList<>();
|
postMods = new ArrayList<>();
|
||||||
@ -615,14 +671,14 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
|||||||
return postMods;
|
return postMods;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addPostModifiers(StatementSequenceGenerator parser, ParserRuleContext ctx) {
|
public static void addPostModifiers(Pass0GenerateStatementSequence parser, ParserRuleContext ctx) {
|
||||||
PrePostModifierHandler prePostModifierHandler = new PrePostModifierHandler(parser);
|
PrePostModifierHandler prePostModifierHandler = new PrePostModifierHandler(parser);
|
||||||
prePostModifierHandler.visit(ctx);
|
prePostModifierHandler.visit(ctx);
|
||||||
List<PrePostModifier> modifiers = prePostModifierHandler.getPostMods();
|
List<PrePostModifier> modifiers = prePostModifierHandler.getPostMods();
|
||||||
addModifierStatements(parser, modifiers);
|
addModifierStatements(parser, modifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addPreModifiers(StatementSequenceGenerator parser, ParserRuleContext ctx) {
|
public static void addPreModifiers(Pass0GenerateStatementSequence parser, ParserRuleContext ctx) {
|
||||||
PrePostModifierHandler modifierHandler = new PrePostModifierHandler(parser);
|
PrePostModifierHandler modifierHandler = new PrePostModifierHandler(parser);
|
||||||
modifierHandler.visit(ctx);
|
modifierHandler.visit(ctx);
|
||||||
List<PrePostModifier> modifiers = modifierHandler.getPreMods();
|
List<PrePostModifier> modifiers = modifierHandler.getPreMods();
|
||||||
@ -630,7 +686,7 @@ public class StatementSequenceGenerator extends KickCBaseVisitor<Object> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void addModifierStatements(
|
private static void addModifierStatements(
|
||||||
StatementSequenceGenerator parser,
|
Pass0GenerateStatementSequence parser,
|
||||||
List<PrePostModifier> modifiers) {
|
List<PrePostModifier> modifiers) {
|
||||||
for(PrePostModifier mod : modifiers) {
|
for(PrePostModifier mod : modifiers) {
|
||||||
Statement stmt = new StatementAssignment((LValue) mod.child, mod.operator, mod.child);
|
Statement stmt = new StatementAssignment((LValue) mod.child, mod.operator, mod.child);
|
@ -53,6 +53,7 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
|||||||
constScope,
|
constScope,
|
||||||
constType,
|
constType,
|
||||||
constVal);
|
constVal);
|
||||||
|
constantVar.setDeclaredAlignment(variable.getDeclaredAlignment());
|
||||||
constScope.remove(variable);
|
constScope.remove(variable);
|
||||||
constScope.add(constantVar);
|
constScope.add(constantVar);
|
||||||
constAliases.put(constRef, constantVar.getRef());
|
constAliases.put(constRef, constantVar.getRef());
|
||||||
|
@ -44,7 +44,6 @@ public class Pass4CodeGeneration {
|
|||||||
asm.startSegment(null, "Global Constants & labels");
|
asm.startSegment(null, "Global Constants & labels");
|
||||||
addConstants(asm, currentScope);
|
addConstants(asm, currentScope);
|
||||||
addZpLabels(asm, currentScope);
|
addZpLabels(asm, currentScope);
|
||||||
addData(asm, currentScope);
|
|
||||||
for (ControlFlowBlock block : getGraph().getAllBlocks()) {
|
for (ControlFlowBlock block : getGraph().getAllBlocks()) {
|
||||||
if (!block.getScope().equals(currentScope)) {
|
if (!block.getScope().equals(currentScope)) {
|
||||||
if (!ScopeRef.ROOT.equals(currentScope)) {
|
if (!ScopeRef.ROOT.equals(currentScope)) {
|
||||||
@ -90,6 +89,7 @@ public class Pass4CodeGeneration {
|
|||||||
addData(asm, currentScope);
|
addData(asm, currentScope);
|
||||||
asm.addScopeEnd();
|
asm.addScopeEnd();
|
||||||
}
|
}
|
||||||
|
addData(asm, ScopeRef.ROOT);
|
||||||
program.setAsm(asm);
|
program.setAsm(asm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,6 +125,11 @@ public class Pass4CodeGeneration {
|
|||||||
Collection<ConstantVar> scopeConstants = scope.getAllConstants(false);
|
Collection<ConstantVar> scopeConstants = scope.getAllConstants(false);
|
||||||
Set<String> added = new LinkedHashSet<>();
|
Set<String> added = new LinkedHashSet<>();
|
||||||
for (ConstantVar constantVar : scopeConstants) {
|
for (ConstantVar constantVar : scopeConstants) {
|
||||||
|
Integer declaredAlignment = constantVar.getDeclaredAlignment();
|
||||||
|
if(declaredAlignment !=null) {
|
||||||
|
String alignment = AsmFragment.getAsmNumber(declaredAlignment);
|
||||||
|
asm.addDataAlignment(alignment);
|
||||||
|
}
|
||||||
if(constantVar.getValue() instanceof ConstantArrayList) {
|
if(constantVar.getValue() instanceof ConstantArrayList) {
|
||||||
ConstantArrayList constantArrayList = (ConstantArrayList) constantVar.getValue();
|
ConstantArrayList constantArrayList = (ConstantArrayList) constantVar.getValue();
|
||||||
String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName();
|
String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName();
|
||||||
|
@ -36,7 +36,7 @@ public class Pass5DoubleJumpElimination extends Pass5AsmOptimization {
|
|||||||
currentLabel = ((AsmLabel) line).getLabel();
|
currentLabel = ((AsmLabel) line).getLabel();
|
||||||
} else if (line instanceof AsmComment || line instanceof AsmConstant || line instanceof AsmLabelDecl) {
|
} else if (line instanceof AsmComment || line instanceof AsmConstant || line instanceof AsmLabelDecl) {
|
||||||
// ignore
|
// ignore
|
||||||
} else if (line instanceof AsmBasicUpstart || line instanceof AsmDataNumeric || line instanceof AsmDataFill || line instanceof AsmDataString || line instanceof AsmSetPc) {
|
} else if (line instanceof AsmBasicUpstart || line instanceof AsmDataNumeric || line instanceof AsmDataFill || line instanceof AsmDataString || line instanceof AsmDataAlignment || line instanceof AsmSetPc) {
|
||||||
currentLabel = null;
|
currentLabel = null;
|
||||||
} else if (line instanceof AsmInstruction) {
|
} else if (line instanceof AsmInstruction) {
|
||||||
if (currentLabel != null) {
|
if (currentLabel != null) {
|
||||||
|
@ -22,6 +22,10 @@ public class TestPrograms extends TestCase {
|
|||||||
helper = new ReferenceHelper("dk/camelot64/kickc/test/ref/");
|
helper = new ReferenceHelper("dk/camelot64/kickc/test/ref/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testMemAlignment() throws IOException, URISyntaxException {
|
||||||
|
compileAndCompare("mem-alignment");
|
||||||
|
}
|
||||||
|
|
||||||
public void testMultiply() throws IOException, URISyntaxException {
|
public void testMultiply() throws IOException, URISyntaxException {
|
||||||
compileAndCompare("multiply");
|
compileAndCompare("multiply");
|
||||||
}
|
}
|
||||||
@ -363,6 +367,10 @@ public class TestPrograms extends TestCase {
|
|||||||
assertError("string-length-mismatch", "Array length mismatch");
|
assertError("string-length-mismatch", "Array length mismatch");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIllegalAlignment() throws IOException, URISyntaxException {
|
||||||
|
assertError("illegal-alignment", "Cannot align variable");
|
||||||
|
}
|
||||||
|
|
||||||
private void assertError(String kcFile, String expectError) throws IOException, URISyntaxException {
|
private void assertError(String kcFile, String expectError) throws IOException, URISyntaxException {
|
||||||
try {
|
try {
|
||||||
compileAndCompare(kcFile);
|
compileAndCompare(kcFile);
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
byte align($100) b;
|
||||||
|
|
16
src/test/java/dk/camelot64/kickc/test/mem-alignment.kc
Normal file
16
src/test/java/dk/camelot64/kickc/test/mem-alignment.kc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Test that memory alignment of arrays work
|
||||||
|
|
||||||
|
byte[$100] align($100) bs;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
byte[$100] align($100) cs;
|
||||||
|
for( byte i: 0..255) {
|
||||||
|
bs[i] = i;
|
||||||
|
}
|
||||||
|
byte j=255;
|
||||||
|
for( i: 0..255) {
|
||||||
|
cs[i] = bs[j--];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -14,13 +14,13 @@ void main() {
|
|||||||
|
|
||||||
// mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
|
// mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
|
||||||
// <f(x) = <(( x * x )/4)
|
// <f(x) = <(( x * x )/4)
|
||||||
byte[512] mul_sqr1_lo;
|
byte[512] align($100) mul_sqr1_lo;
|
||||||
// >f(x) = >(( x * x )/4)
|
// >f(x) = >(( x * x )/4)
|
||||||
byte[512] mul_sqr1_hi;
|
byte[512] align($100) mul_sqr1_hi;
|
||||||
// <g(x) = <((( x - 255) * ( x - 255 ))/4)
|
// <g(x) = <((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] mul_sqr2_lo;
|
byte[512] align($100) mul_sqr2_lo;
|
||||||
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
|
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] mul_sqr2_hi;
|
byte[512] align($100) mul_sqr2_hi;
|
||||||
|
|
||||||
// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4)
|
// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4)
|
||||||
void init_mul_tables() {
|
void init_mul_tables() {
|
||||||
@ -58,13 +58,13 @@ void init_mul_tables() {
|
|||||||
|
|
||||||
// ASM based multiplication tables
|
// ASM based multiplication tables
|
||||||
// <(( x * x )/4)
|
// <(( x * x )/4)
|
||||||
byte[512] asm_mul_sqr1_lo;
|
byte[512] align($100) asm_mul_sqr1_lo;
|
||||||
// >(( x * x )/4)
|
// >(( x * x )/4)
|
||||||
byte[512] asm_mul_sqr1_hi;
|
byte[512] align($100) asm_mul_sqr1_hi;
|
||||||
// <((( x - 255) * ( x - 255 ))/4)
|
// <((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] asm_mul_sqr2_lo;
|
byte[512] align($100) asm_mul_sqr2_lo;
|
||||||
// >((( x - 255) * ( x - 255 ))/4)
|
// >((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] asm_mul_sqr2_hi;
|
byte[512] align($100) asm_mul_sqr2_hi;
|
||||||
// Initialize the multiplication tables using ASM code from
|
// Initialize the multiplication tables using ASM code from
|
||||||
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
||||||
void init_mul_tables_asm() {
|
void init_mul_tables_asm() {
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
:BasicUpstart(main)
|
:BasicUpstart(main)
|
||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
b: .fill 3, 0
|
|
||||||
c: .byte 'c', 'm', 'l'
|
|
||||||
d: .text "cml"
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
lda #'c'
|
lda #'c'
|
||||||
@ -16,3 +13,6 @@ main: {
|
|||||||
sta SCREEN+2
|
sta SCREEN+2
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
b: .fill 3, 0
|
||||||
|
c: .byte 'c', 'm', 'l'
|
||||||
|
d: .text "cml"
|
||||||
|
@ -213,9 +213,6 @@ INITIAL ASM
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
b: .fill 3, 0
|
|
||||||
c: .byte 'c', 'm', 'l'
|
|
||||||
d: .text "cml"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -250,6 +247,9 @@ main: {
|
|||||||
//SEG14 [8] return [ ] ( main:2 [ ] )
|
//SEG14 [8] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
b: .fill 3, 0
|
||||||
|
c: .byte 'c', 'm', 'l'
|
||||||
|
d: .text "cml"
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [4] *((const byte[3]) b#0+(byte/signed byte/word/signed word) 0) ← (byte) 'c' [ ] ( main:2 [ ] ) always clobbers reg byte a
|
Statement [4] *((const byte[3]) b#0+(byte/signed byte/word/signed word) 0) ← (byte) 'c' [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||||
@ -271,9 +271,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
b: .fill 3, 0
|
|
||||||
c: .byte 'c', 'm', 'l'
|
|
||||||
d: .text "cml"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -308,6 +305,9 @@ main: {
|
|||||||
//SEG14 [8] return [ ] ( main:2 [ ] )
|
//SEG14 [8] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
b: .fill 3, 0
|
||||||
|
c: .byte 'c', 'm', 'l'
|
||||||
|
d: .text "cml"
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b1
|
Removing instruction jmp b1
|
||||||
@ -349,9 +349,6 @@ FINAL ASSEMBLER
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
b: .fill 3, 0
|
|
||||||
c: .byte 'c', 'm', 'l'
|
|
||||||
d: .text "cml"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
//SEG4 @1
|
//SEG4 @1
|
||||||
@ -376,4 +373,7 @@ main: {
|
|||||||
//SEG14 [8] return [ ] ( main:2 [ ] )
|
//SEG14 [8] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
b: .fill 3, 0
|
||||||
|
c: .byte 'c', 'm', 'l'
|
||||||
|
d: .text "cml"
|
||||||
|
|
||||||
|
@ -11,13 +11,6 @@
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const lines_cnt = 8
|
.const lines_cnt = 8
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
|
||||||
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
lda #0
|
lda #0
|
||||||
@ -444,3 +437,10 @@ init_screen: {
|
|||||||
bne b2
|
bne b2
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
||||||
|
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
||||||
|
@ -4321,13 +4321,6 @@ INITIAL ASM
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const lines_cnt = 8
|
.const lines_cnt = 8
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
|
||||||
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
||||||
@ -5340,6 +5333,13 @@ init_screen: {
|
|||||||
//SEG355 [190] return [ ] ( main:2::init_screen:8 [ ] )
|
//SEG355 [190] return [ ] ( main:2::init_screen:8 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
||||||
|
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Equivalence Class zp ZP_BYTE:63 [ init_plot_tables::$7 ] has ALU potential.
|
Equivalence Class zp ZP_BYTE:63 [ init_plot_tables::$7 ] has ALU potential.
|
||||||
@ -5688,13 +5688,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const lines_cnt = 8
|
.const lines_cnt = 8
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
|
||||||
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
||||||
@ -6629,6 +6622,13 @@ init_screen: {
|
|||||||
//SEG355 [190] return [ ] ( main:2::init_screen:8 [ ] )
|
//SEG355 [190] return [ ] ( main:2::init_screen:8 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
||||||
|
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b10
|
Removing instruction jmp b10
|
||||||
@ -7150,13 +7150,6 @@ FINAL ASSEMBLER
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const lines_cnt = 8
|
.const lines_cnt = 8
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
|
||||||
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
||||||
//SEG4 @10
|
//SEG4 @10
|
||||||
@ -7943,4 +7936,11 @@ init_screen: {
|
|||||||
//SEG355 [190] return [ ] ( main:2::init_screen:8 [ ] )
|
//SEG355 [190] return [ ] ( main:2::init_screen:8 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
lines_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28, $3c
|
||||||
|
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
|
||||||
|
|
||||||
|
@ -12,13 +12,6 @@
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const plots_cnt = 8
|
.const plots_cnt = 8
|
||||||
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
|
||||||
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
lda #0
|
lda #0
|
||||||
@ -179,3 +172,10 @@ init_screen: {
|
|||||||
bne b2
|
bne b2
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
||||||
|
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
@ -1757,13 +1757,6 @@ INITIAL ASM
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const plots_cnt = 8
|
.const plots_cnt = 8
|
||||||
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
|
||||||
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
||||||
@ -2166,6 +2159,13 @@ init_screen: {
|
|||||||
//SEG123 [72] return [ ] ( main:2::init_screen:8 [ ] )
|
//SEG123 [72] return [ ] ( main:2::init_screen:8 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
||||||
|
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Equivalence Class zp ZP_BYTE:31 [ init_plot_tables::$7 ] has ALU potential.
|
Equivalence Class zp ZP_BYTE:31 [ init_plot_tables::$7 ] has ALU potential.
|
||||||
@ -2295,13 +2295,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const plots_cnt = 8
|
.const plots_cnt = 8
|
||||||
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
|
||||||
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
||||||
@ -2651,6 +2644,13 @@ init_screen: {
|
|||||||
//SEG123 [72] return [ ] ( main:2::init_screen:8 [ ] )
|
//SEG123 [72] return [ ] ( main:2::init_screen:8 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
||||||
|
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b5
|
Removing instruction jmp b5
|
||||||
@ -2890,13 +2890,6 @@ FINAL ASSEMBLER
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const BITMAP = $2000
|
.const BITMAP = $2000
|
||||||
.const plots_cnt = 8
|
.const plots_cnt = 8
|
||||||
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
|
||||||
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
|
||||||
plot_xlo: .fill 256, 0
|
|
||||||
plot_xhi: .fill 256, 0
|
|
||||||
plot_ylo: .fill 256, 0
|
|
||||||
plot_yhi: .fill 256, 0
|
|
||||||
plot_bit: .fill 256, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
||||||
//SEG4 @5
|
//SEG4 @5
|
||||||
@ -3179,4 +3172,11 @@ init_screen: {
|
|||||||
//SEG123 [72] return [ ] ( main:2::init_screen:8 [ ] )
|
//SEG123 [72] return [ ] ( main:2::init_screen:8 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
plots_x: .byte $3c, $50, $6e, $50, $3c, $28, $a, $28
|
||||||
|
plots_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28
|
||||||
|
plot_xlo: .fill $100, 0
|
||||||
|
plot_xhi: .fill $100, 0
|
||||||
|
plot_ylo: .fill $100, 0
|
||||||
|
plot_yhi: .fill $100, 0
|
||||||
|
plot_bit: .fill $100, 0
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
buffer1: .fill 256, 0
|
|
||||||
buffer2: .fill 256, 0
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
jsr prepare
|
jsr prepare
|
||||||
@ -100,3 +98,5 @@ prepare: {
|
|||||||
bne b1
|
bne b1
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
buffer1: .fill $100, 0
|
||||||
|
buffer2: .fill $100, 0
|
||||||
|
@ -1175,8 +1175,6 @@ INITIAL ASM
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
buffer1: .fill 256, 0
|
|
||||||
buffer2: .fill 256, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @4 [phi:@begin->@4]
|
//SEG3 [1] phi from @begin to @4 [phi:@begin->@4]
|
||||||
@ -1468,6 +1466,8 @@ prepare: {
|
|||||||
//SEG111 [49] return [ ] ( main:2::prepare:5 [ ] )
|
//SEG111 [49] return [ ] ( main:2::prepare:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
buffer1: .fill $100, 0
|
||||||
|
buffer2: .fill $100, 0
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@3 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a
|
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@3 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a
|
||||||
@ -1536,8 +1536,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
buffer1: .fill 256, 0
|
|
||||||
buffer2: .fill 256, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @4 [phi:@begin->@4]
|
//SEG3 [1] phi from @begin to @4 [phi:@begin->@4]
|
||||||
@ -1808,6 +1806,8 @@ prepare: {
|
|||||||
//SEG111 [49] return [ ] ( main:2::prepare:5 [ ] )
|
//SEG111 [49] return [ ] ( main:2::prepare:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
buffer1: .fill $100, 0
|
||||||
|
buffer2: .fill $100, 0
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b4
|
Removing instruction jmp b4
|
||||||
@ -1987,8 +1987,6 @@ FINAL ASSEMBLER
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
buffer1: .fill 256, 0
|
|
||||||
buffer2: .fill 256, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @4 [phi:@begin->@4]
|
//SEG3 [1] phi from @begin to @4 [phi:@begin->@4]
|
||||||
//SEG4 @4
|
//SEG4 @4
|
||||||
@ -2194,4 +2192,6 @@ prepare: {
|
|||||||
//SEG111 [49] return [ ] ( main:2::prepare:5 [ ] )
|
//SEG111 [49] return [ ] ( main:2::prepare:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
buffer1: .fill $100, 0
|
||||||
|
buffer2: .fill $100, 0
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
.const PROCPORT = 1
|
.const PROCPORT = 1
|
||||||
.const D018 = $d018
|
.const D018 = $d018
|
||||||
.const CHARSET4 = $2800
|
.const CHARSET4 = $2800
|
||||||
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
.label _1 = 6
|
.label _1 = 6
|
||||||
@ -144,3 +143,4 @@ main: {
|
|||||||
sta D018
|
sta D018
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
||||||
|
@ -1320,7 +1320,6 @@ INITIAL ASM
|
|||||||
.const PROCPORT = 1
|
.const PROCPORT = 1
|
||||||
.const D018 = $d018
|
.const D018 = $d018
|
||||||
.const CHARSET4 = $2800
|
.const CHARSET4 = $2800
|
||||||
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -1669,6 +1668,7 @@ main: {
|
|||||||
//SEG91 [59] return [ ] ( main:2 [ ] )
|
//SEG91 [59] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
Statement [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||||
@ -1848,7 +1848,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.const PROCPORT = 1
|
.const PROCPORT = 1
|
||||||
.const D018 = $d018
|
.const D018 = $d018
|
||||||
.const CHARSET4 = $2800
|
.const CHARSET4 = $2800
|
||||||
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -2121,6 +2120,7 @@ main: {
|
|||||||
//SEG91 [59] return [ ] ( main:2 [ ] )
|
//SEG91 [59] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b1
|
Removing instruction jmp b1
|
||||||
@ -2302,7 +2302,6 @@ FINAL ASSEMBLER
|
|||||||
.const PROCPORT = 1
|
.const PROCPORT = 1
|
||||||
.const D018 = $d018
|
.const D018 = $d018
|
||||||
.const CHARSET4 = $2800
|
.const CHARSET4 = $2800
|
||||||
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
//SEG4 @1
|
//SEG4 @1
|
||||||
@ -2530,4 +2529,5 @@ main: {
|
|||||||
//SEG91 [59] return [ ] ( main:2 [ ] )
|
//SEG91 [59] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
bits_count: .byte 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
.label line_cursor = 2
|
.label line_cursor = 2
|
||||||
txt: .text "camelot@"
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
jsr print_cls
|
jsr print_cls
|
||||||
@ -101,3 +100,4 @@ print_cls: {
|
|||||||
bne b1
|
bne b1
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
txt: .text "camelot@"
|
||||||
|
@ -887,7 +887,6 @@ INITIAL ASM
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label char_cursor = 7
|
.label char_cursor = 7
|
||||||
.label line_cursor = 3
|
.label line_cursor = 3
|
||||||
txt: .text "camelot@"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
||||||
@ -1093,6 +1092,7 @@ print_cls: {
|
|||||||
//SEG68 [32] return [ ] ( main:2::print_cls:5 [ ] )
|
//SEG68 [32] return [ ] ( main:2::print_cls:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
txt: .text "camelot@"
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [10] *((const string) txt#0+(byte/signed byte/word/signed word) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word) 1) [ main::i#2 line_cursor#1 ] ( main:2 [ main::i#2 line_cursor#1 ] ) always clobbers reg byte a
|
Statement [10] *((const string) txt#0+(byte/signed byte/word/signed word) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word) 1) [ main::i#2 line_cursor#1 ] ( main:2 [ main::i#2 line_cursor#1 ] ) always clobbers reg byte a
|
||||||
@ -1144,7 +1144,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
.label line_cursor = 2
|
.label line_cursor = 2
|
||||||
txt: .text "camelot@"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
||||||
@ -1347,6 +1346,7 @@ print_cls: {
|
|||||||
//SEG68 [32] return [ ] ( main:2::print_cls:5 [ ] )
|
//SEG68 [32] return [ ] ( main:2::print_cls:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
txt: .text "camelot@"
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b7
|
Removing instruction jmp b7
|
||||||
@ -1452,7 +1452,6 @@ FINAL ASSEMBLER
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
.label line_cursor = 2
|
.label line_cursor = 2
|
||||||
txt: .text "camelot@"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
||||||
//SEG4 @7
|
//SEG4 @7
|
||||||
@ -1617,4 +1616,5 @@ print_cls: {
|
|||||||
//SEG68 [32] return [ ] ( main:2::print_cls:5 [ ] )
|
//SEG68 [32] return [ ] ( main:2::print_cls:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
txt: .text "camelot@"
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
:BasicUpstart(main)
|
:BasicUpstart(main)
|
||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.label screen = 2
|
.label screen = 2
|
||||||
msg1: .text "message 1 @"
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
lda #<$400
|
lda #<$400
|
||||||
@ -50,3 +49,4 @@ print: {
|
|||||||
!:
|
!:
|
||||||
jmp b1
|
jmp b1
|
||||||
}
|
}
|
||||||
|
msg1: .text "message 1 @"
|
||||||
|
@ -443,7 +443,6 @@ INITIAL ASM
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label screen = 2
|
.label screen = 2
|
||||||
msg1: .text "message 1 @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||||
@ -554,6 +553,7 @@ print: {
|
|||||||
!:
|
!:
|
||||||
jmp b1_from_b2
|
jmp b1_from_b2
|
||||||
}
|
}
|
||||||
|
msg1: .text "message 1 @"
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y
|
Statement [13] if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) always clobbers reg byte a reg byte y
|
||||||
@ -577,7 +577,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label screen = 2
|
.label screen = 2
|
||||||
msg1: .text "message 1 @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||||
@ -688,6 +687,7 @@ print: {
|
|||||||
!:
|
!:
|
||||||
jmp b1_from_b2
|
jmp b1_from_b2
|
||||||
}
|
}
|
||||||
|
msg1: .text "message 1 @"
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b2
|
Removing instruction jmp b2
|
||||||
@ -758,7 +758,6 @@ FINAL ASSEMBLER
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label screen = 2
|
.label screen = 2
|
||||||
msg1: .text "message 1 @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||||
//SEG4 @2
|
//SEG4 @2
|
||||||
@ -844,4 +843,5 @@ print: {
|
|||||||
!:
|
!:
|
||||||
jmp b1
|
jmp b1
|
||||||
}
|
}
|
||||||
|
msg1: .text "message 1 @"
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
:BasicUpstart(main)
|
:BasicUpstart(main)
|
||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
ldx #0
|
ldx #0
|
||||||
@ -20,3 +19,4 @@ main: {
|
|||||||
bne b1
|
bne b1
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
||||||
|
@ -332,7 +332,6 @@ INITIAL ASM
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -409,6 +408,7 @@ main: {
|
|||||||
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||||
jmp b2
|
jmp b2
|
||||||
}
|
}
|
||||||
|
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) always clobbers reg byte a
|
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) always clobbers reg byte a
|
||||||
@ -432,7 +432,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -500,6 +499,7 @@ main: {
|
|||||||
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||||
jmp b2
|
jmp b2
|
||||||
}
|
}
|
||||||
|
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b1
|
Removing instruction jmp b1
|
||||||
@ -566,7 +566,6 @@ FINAL ASSEMBLER
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
//SEG4 @1
|
//SEG4 @1
|
||||||
@ -613,4 +612,5 @@ main: {
|
|||||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||||
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
//SEG30 [9] phi (byte) main::j#4 = (byte) main::j#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||||
}
|
}
|
||||||
|
TXT: .byte 3, 1, $d, 5, $c, $f, $14, $20
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
:BasicUpstart(main)
|
:BasicUpstart(main)
|
||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "camelot "
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
.label cursor = 2
|
.label cursor = 2
|
||||||
@ -34,3 +33,4 @@ main: {
|
|||||||
!:
|
!:
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "camelot "
|
||||||
|
@ -347,7 +347,6 @@ INITIAL ASM
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "camelot "
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -434,6 +433,7 @@ main: {
|
|||||||
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||||
jmp b2
|
jmp b2
|
||||||
}
|
}
|
||||||
|
TEXT: .text "camelot "
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y
|
Statement [6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y
|
||||||
@ -460,7 +460,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "camelot "
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -542,6 +541,7 @@ main: {
|
|||||||
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||||
jmp b2
|
jmp b2
|
||||||
}
|
}
|
||||||
|
TEXT: .text "camelot "
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b1
|
Removing instruction jmp b1
|
||||||
@ -609,7 +609,6 @@ FINAL ASSEMBLER
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "camelot "
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
//SEG4 @1
|
//SEG4 @1
|
||||||
@ -670,4 +669,5 @@ main: {
|
|||||||
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
//SEG29 [9] phi from main::@6 to main::@2 [phi:main::@6->main::@2]
|
||||||
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
//SEG30 [9] phi (byte) main::i#4 = (byte) main::i#1 [phi:main::@6->main::@2#0] -- register_copy
|
||||||
}
|
}
|
||||||
|
TEXT: .text "camelot "
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const char = 'a'
|
.const char = 'a'
|
||||||
.const num = 1
|
.const num = 1
|
||||||
nums: .byte 2, 3, 4, 5
|
|
||||||
str: .text "bc"+"d"+'e'
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
lda #char
|
lda #char
|
||||||
@ -23,3 +21,5 @@ main: {
|
|||||||
bne b1
|
bne b1
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
nums: .byte 2, 3, 4, 5
|
||||||
|
str: .text "bc"+"d"+'e'
|
||||||
|
@ -325,8 +325,6 @@ INITIAL ASM
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const char = 'a'
|
.const char = 'a'
|
||||||
.const num = 1
|
.const num = 1
|
||||||
nums: .byte 2, 3, 4, 5
|
|
||||||
str: .text "bc"+"d"+'e'
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -382,6 +380,8 @@ main: {
|
|||||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
nums: .byte 2, 3, 4, 5
|
||||||
|
str: .text "bc"+"d"+'e'
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [4] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 0) ← (const byte) char#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
Statement [4] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 0) ← (const byte) char#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
|
||||||
@ -411,8 +411,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const char = 'a'
|
.const char = 'a'
|
||||||
.const num = 1
|
.const num = 1
|
||||||
nums: .byte 2, 3, 4, 5
|
|
||||||
str: .text "bc"+"d"+'e'
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -463,6 +461,8 @@ main: {
|
|||||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
nums: .byte 2, 3, 4, 5
|
||||||
|
str: .text "bc"+"d"+'e'
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b1
|
Removing instruction jmp b1
|
||||||
@ -517,8 +517,6 @@ FINAL ASSEMBLER
|
|||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
.const char = 'a'
|
.const char = 'a'
|
||||||
.const num = 1
|
.const num = 1
|
||||||
nums: .byte 2, 3, 4, 5
|
|
||||||
str: .text "bc"+"d"+'e'
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
//SEG4 @1
|
//SEG4 @1
|
||||||
@ -556,4 +554,6 @@ main: {
|
|||||||
//SEG21 [11] return [ ] ( main:2 [ ] )
|
//SEG21 [11] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
nums: .byte 2, 3, 4, 5
|
||||||
|
str: .text "bc"+"d"+'e'
|
||||||
|
|
||||||
|
@ -3,14 +3,6 @@
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.const BGCOL = $d021
|
.const BGCOL = $d021
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
mul_sqr1_lo: .fill 512, 0
|
|
||||||
mul_sqr1_hi: .fill 512, 0
|
|
||||||
mul_sqr2_lo: .fill 512, 0
|
|
||||||
mul_sqr2_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr1_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr1_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr2_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr2_hi: .fill 512, 0
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
jsr init_mul_tables
|
jsr init_mul_tables
|
||||||
@ -322,3 +314,19 @@ init_mul_tables: {
|
|||||||
sta mul_sqr2_hi+$1ff
|
sta mul_sqr2_hi+$1ff
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_hi: .fill $200, 0
|
||||||
|
@ -15,13 +15,13 @@ void main() {
|
|||||||
|
|
||||||
// mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
|
// mul_sqr tables will contain f(x)=int(x*x/4) and g(x) = f(x-255).
|
||||||
// <f(x) = <(( x * x )/4)
|
// <f(x) = <(( x * x )/4)
|
||||||
byte[512] mul_sqr1_lo;
|
byte[512] align($100) mul_sqr1_lo;
|
||||||
// >f(x) = >(( x * x )/4)
|
// >f(x) = >(( x * x )/4)
|
||||||
byte[512] mul_sqr1_hi;
|
byte[512] align($100) mul_sqr1_hi;
|
||||||
// <g(x) = <((( x - 255) * ( x - 255 ))/4)
|
// <g(x) = <((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] mul_sqr2_lo;
|
byte[512] align($100) mul_sqr2_lo;
|
||||||
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
|
// >g(x) = >((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] mul_sqr2_hi;
|
byte[512] align($100) mul_sqr2_hi;
|
||||||
|
|
||||||
// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4)
|
// Initialize the mul_sqr multiplication tables with f(x)=int(x*x/4)
|
||||||
void init_mul_tables() {
|
void init_mul_tables() {
|
||||||
@ -59,13 +59,13 @@ void init_mul_tables() {
|
|||||||
|
|
||||||
// ASM based multiplication tables
|
// ASM based multiplication tables
|
||||||
// <(( x * x )/4)
|
// <(( x * x )/4)
|
||||||
byte[512] asm_mul_sqr1_lo;
|
byte[512] align($100) asm_mul_sqr1_lo;
|
||||||
// >(( x * x )/4)
|
// >(( x * x )/4)
|
||||||
byte[512] asm_mul_sqr1_hi;
|
byte[512] align($100) asm_mul_sqr1_hi;
|
||||||
// <((( x - 255) * ( x - 255 ))/4)
|
// <((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] asm_mul_sqr2_lo;
|
byte[512] align($100) asm_mul_sqr2_lo;
|
||||||
// >((( x - 255) * ( x - 255 ))/4)
|
// >((( x - 255) * ( x - 255 ))/4)
|
||||||
byte[512] asm_mul_sqr2_hi;
|
byte[512] align($100) asm_mul_sqr2_hi;
|
||||||
// Initialize the multiplication tables using ASM code from
|
// Initialize the multiplication tables using ASM code from
|
||||||
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
||||||
void init_mul_tables_asm() {
|
void init_mul_tables_asm() {
|
||||||
@ -2234,14 +2234,6 @@ INITIAL ASM
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const BGCOL = $d021
|
.const BGCOL = $d021
|
||||||
.label char_cursor = $a
|
.label char_cursor = $a
|
||||||
mul_sqr1_lo: .fill 512, 0
|
|
||||||
mul_sqr1_hi: .fill 512, 0
|
|
||||||
mul_sqr2_lo: .fill 512, 0
|
|
||||||
mul_sqr2_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr1_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr1_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr2_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr2_hi: .fill 512, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
||||||
@ -2869,6 +2861,22 @@ init_mul_tables: {
|
|||||||
//SEG193 [88] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy
|
//SEG193 [88] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy
|
||||||
jmp b4
|
jmp b4
|
||||||
}
|
}
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_hi: .fill $200, 0
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [11] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2::mul_tables_compare:9 [ ] ) always clobbers reg byte a
|
Statement [11] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 5 [ ] ( main:2::mul_tables_compare:9 [ ] ) always clobbers reg byte a
|
||||||
@ -3013,14 +3021,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const BGCOL = $d021
|
.const BGCOL = $d021
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
mul_sqr1_lo: .fill 512, 0
|
|
||||||
mul_sqr1_hi: .fill 512, 0
|
|
||||||
mul_sqr2_lo: .fill 512, 0
|
|
||||||
mul_sqr2_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr1_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr1_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr2_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr2_hi: .fill 512, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
||||||
@ -3621,6 +3621,22 @@ init_mul_tables: {
|
|||||||
//SEG193 [88] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy
|
//SEG193 [88] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy
|
||||||
jmp b4
|
jmp b4
|
||||||
}
|
}
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_hi: .fill $200, 0
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b10
|
Removing instruction jmp b10
|
||||||
@ -3903,14 +3919,6 @@ FINAL ASSEMBLER
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const BGCOL = $d021
|
.const BGCOL = $d021
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
mul_sqr1_lo: .fill 512, 0
|
|
||||||
mul_sqr1_hi: .fill 512, 0
|
|
||||||
mul_sqr2_lo: .fill 512, 0
|
|
||||||
mul_sqr2_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr1_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr1_hi: .fill 512, 0
|
|
||||||
asm_mul_sqr2_lo: .fill 512, 0
|
|
||||||
asm_mul_sqr2_hi: .fill 512, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
|
||||||
//SEG4 @10
|
//SEG4 @10
|
||||||
@ -4414,4 +4422,20 @@ init_mul_tables: {
|
|||||||
//SEG192 [88] phi from init_mul_tables::@12 to init_mul_tables::@4 [phi:init_mul_tables::@12->init_mul_tables::@4]
|
//SEG192 [88] phi from init_mul_tables::@12 to init_mul_tables::@4 [phi:init_mul_tables::@12->init_mul_tables::@4]
|
||||||
//SEG193 [88] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy
|
//SEG193 [88] phi (byte) init_mul_tables::dir#3 = (byte) init_mul_tables::dir#2 [phi:init_mul_tables::@12->init_mul_tables::@4#0] -- register_copy
|
||||||
}
|
}
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
mul_sqr2_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr1_hi: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_lo: .fill $200, 0
|
||||||
|
.align $100
|
||||||
|
asm_mul_sqr2_hi: .fill $200, 0
|
||||||
|
|
||||||
|
@ -3,9 +3,6 @@
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
.label line_cursor = 2
|
.label line_cursor = 2
|
||||||
msg: .text "hello world! @"
|
|
||||||
msg2: .text "hello c64! @"
|
|
||||||
msg3: .text "hello 2017! @"
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
lda #<$400
|
lda #<$400
|
||||||
@ -85,3 +82,6 @@ print_str: {
|
|||||||
!:
|
!:
|
||||||
jmp b1
|
jmp b1
|
||||||
}
|
}
|
||||||
|
msg: .text "hello world! @"
|
||||||
|
msg2: .text "hello c64! @"
|
||||||
|
msg3: .text "hello 2017! @"
|
||||||
|
@ -875,9 +875,6 @@ INITIAL ASM
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
.label line_cursor = 2
|
.label line_cursor = 2
|
||||||
msg: .text "hello world! @"
|
|
||||||
msg2: .text "hello c64! @"
|
|
||||||
msg3: .text "hello 2017! @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
||||||
@ -1058,6 +1055,9 @@ print_str: {
|
|||||||
!:
|
!:
|
||||||
jmp b1_from_b2
|
jmp b1_from_b2
|
||||||
}
|
}
|
||||||
|
msg: .text "hello world! @"
|
||||||
|
msg2: .text "hello c64! @"
|
||||||
|
msg3: .text "hello 2017! @"
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [8] (byte*~) char_cursor#31 ← (byte*) line_cursor#1 [ char_cursor#31 line_cursor#1 ] ( main:2 [ char_cursor#31 line_cursor#1 ] ) always clobbers reg byte a
|
Statement [8] (byte*~) char_cursor#31 ← (byte*) line_cursor#1 [ char_cursor#31 line_cursor#1 ] ( main:2 [ char_cursor#31 line_cursor#1 ] ) always clobbers reg byte a
|
||||||
@ -1089,9 +1089,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
.label line_cursor = 2
|
.label line_cursor = 2
|
||||||
msg: .text "hello world! @"
|
|
||||||
msg2: .text "hello c64! @"
|
|
||||||
msg3: .text "hello 2017! @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
||||||
@ -1272,6 +1269,9 @@ print_str: {
|
|||||||
!:
|
!:
|
||||||
jmp b1_from_b2
|
jmp b1_from_b2
|
||||||
}
|
}
|
||||||
|
msg: .text "hello world! @"
|
||||||
|
msg2: .text "hello c64! @"
|
||||||
|
msg3: .text "hello 2017! @"
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b7
|
Removing instruction jmp b7
|
||||||
@ -1374,9 +1374,6 @@ FINAL ASSEMBLER
|
|||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.label char_cursor = 6
|
.label char_cursor = 6
|
||||||
.label line_cursor = 2
|
.label line_cursor = 2
|
||||||
msg: .text "hello world! @"
|
|
||||||
msg2: .text "hello c64! @"
|
|
||||||
msg3: .text "hello 2017! @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
|
||||||
//SEG4 @7
|
//SEG4 @7
|
||||||
@ -1517,4 +1514,7 @@ print_str: {
|
|||||||
!:
|
!:
|
||||||
jmp b1
|
jmp b1
|
||||||
}
|
}
|
||||||
|
msg: .text "hello world! @"
|
||||||
|
msg2: .text "hello c64! @"
|
||||||
|
msg3: .text "hello 2017! @"
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
:BasicUpstart(main)
|
:BasicUpstart(main)
|
||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "01234567@"
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
.label nxt = 2
|
.label nxt = 2
|
||||||
@ -32,3 +31,4 @@ main: {
|
|||||||
!:
|
!:
|
||||||
jmp b1
|
jmp b1
|
||||||
}
|
}
|
||||||
|
TEXT: .text "01234567@"
|
||||||
|
@ -368,7 +368,6 @@ INITIAL ASM
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "01234567@"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -457,6 +456,7 @@ main: {
|
|||||||
//SEG33 [14] return [ ] ( main:2 [ ] )
|
//SEG33 [14] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "01234567@"
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [6] (byte) main::c#0 ← *((byte*) main::nxt#3) [ main::nxt#3 main::i#2 main::c#0 ] ( main:2 [ main::nxt#3 main::i#2 main::c#0 ] ) always clobbers reg byte a reg byte y
|
Statement [6] (byte) main::c#0 ← *((byte*) main::nxt#3) [ main::nxt#3 main::i#2 main::c#0 ] ( main:2 [ main::nxt#3 main::i#2 main::c#0 ] ) always clobbers reg byte a reg byte y
|
||||||
@ -482,7 +482,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "01234567@"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -565,6 +564,7 @@ main: {
|
|||||||
//SEG33 [14] return [ ] ( main:2 [ ] )
|
//SEG33 [14] return [ ] ( main:2 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "01234567@"
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b1
|
Removing instruction jmp b1
|
||||||
@ -633,7 +633,6 @@ FINAL ASSEMBLER
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
//SEG1 Global Constants & labels
|
//SEG1 Global Constants & labels
|
||||||
.const SCREEN = $400
|
.const SCREEN = $400
|
||||||
TEXT: .text "01234567@"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
//SEG4 @1
|
//SEG4 @1
|
||||||
@ -695,4 +694,5 @@ main: {
|
|||||||
//SEG32 main::@return
|
//SEG32 main::@return
|
||||||
//SEG33 [14] return [ ] ( main:2 [ ] )
|
//SEG33 [14] return [ ] ( main:2 [ ] )
|
||||||
}
|
}
|
||||||
|
TEXT: .text "01234567@"
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const BGCOL = $d020
|
.const BGCOL = $d020
|
||||||
.const SCROLL = $d016
|
.const SCROLL = $d016
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
.const line = SCREEN+$28
|
.const line = SCREEN+$28
|
||||||
@ -82,3 +81,4 @@ fillscreen: {
|
|||||||
!:
|
!:
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
@ -1033,7 +1033,6 @@ INITIAL ASM
|
|||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const BGCOL = $d020
|
.const BGCOL = $d020
|
||||||
.const SCROLL = $d016
|
.const SCROLL = $d016
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||||
@ -1236,6 +1235,7 @@ fillscreen: {
|
|||||||
//SEG71 [32] return [ ] ( main:2::fillscreen:5 [ ] )
|
//SEG71 [32] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@2 [ main::scroll#7 main::nxt#9 ] ( main:2 [ main::scroll#7 main::nxt#9 ] ) always clobbers reg byte a
|
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@2 [ main::scroll#7 main::nxt#9 ] ( main:2 [ main::scroll#7 main::nxt#9 ] ) always clobbers reg byte a
|
||||||
@ -1279,7 +1279,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const BGCOL = $d020
|
.const BGCOL = $d020
|
||||||
.const SCROLL = $d016
|
.const SCROLL = $d016
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||||
@ -1469,6 +1468,7 @@ fillscreen: {
|
|||||||
//SEG71 [32] return [ ] ( main:2::fillscreen:5 [ ] )
|
//SEG71 [32] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b2
|
Removing instruction jmp b2
|
||||||
@ -1600,7 +1600,6 @@ FINAL ASSEMBLER
|
|||||||
.const RASTER = $d012
|
.const RASTER = $d012
|
||||||
.const BGCOL = $d020
|
.const BGCOL = $d020
|
||||||
.const SCROLL = $d016
|
.const SCROLL = $d016
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
//SEG3 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||||
//SEG4 @2
|
//SEG4 @2
|
||||||
@ -1747,4 +1746,5 @@ fillscreen: {
|
|||||||
//SEG71 [32] return [ ] ( main:2::fillscreen:5 [ ] )
|
//SEG71 [32] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
.label current_bit = 2
|
.label current_bit = 2
|
||||||
.label current_chargen = 3
|
.label current_chargen = 3
|
||||||
.label nxt = 7
|
.label nxt = 7
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
jsr fillscreen
|
jsr fillscreen
|
||||||
@ -187,3 +186,4 @@ fillscreen: {
|
|||||||
!:
|
!:
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
@ -2591,7 +2591,6 @@ INITIAL ASM
|
|||||||
.label current_bit = 3
|
.label current_bit = 3
|
||||||
.label current_chargen = 4
|
.label current_chargen = 4
|
||||||
.label nxt = $b
|
.label nxt = $b
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
|
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
|
||||||
@ -3044,6 +3043,7 @@ fillscreen: {
|
|||||||
//SEG150 [71] return [ ] ( main:2::fillscreen:5 [ ] )
|
//SEG150 [71] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ( main:2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ) always clobbers reg byte a
|
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ( main:2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ) always clobbers reg byte a
|
||||||
@ -3154,7 +3154,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.label current_bit = 2
|
.label current_bit = 2
|
||||||
.label current_chargen = 3
|
.label current_chargen = 3
|
||||||
.label nxt = 7
|
.label nxt = 7
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
|
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
|
||||||
@ -3559,6 +3558,7 @@ fillscreen: {
|
|||||||
//SEG150 [71] return [ ] ( main:2::fillscreen:5 [ ] )
|
//SEG150 [71] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b6
|
Removing instruction jmp b6
|
||||||
@ -3804,7 +3804,6 @@ FINAL ASSEMBLER
|
|||||||
.label current_bit = 2
|
.label current_bit = 2
|
||||||
.label current_chargen = 3
|
.label current_chargen = 3
|
||||||
.label nxt = 7
|
.label nxt = 7
|
||||||
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
|
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
|
||||||
//SEG4 @6
|
//SEG4 @6
|
||||||
@ -4132,4 +4131,5 @@ fillscreen: {
|
|||||||
//SEG150 [71] return [ ] ( main:2::fillscreen:5 [ ] )
|
//SEG150 [71] return [ ] ( main:2::fillscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @"
|
||||||
|
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
.label progress_cursor = $a
|
.label progress_cursor = $a
|
||||||
.label sin_idx_x = 2
|
.label sin_idx_x = 2
|
||||||
.label sin_idx_y = 3
|
.label sin_idx_y = 3
|
||||||
sintab_x: .fill 221, 0
|
|
||||||
sintab_y: .fill 197, 0
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
jsr init
|
jsr init
|
||||||
@ -571,3 +569,5 @@ place_sprites: {
|
|||||||
bne b1
|
bne b1
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
sintab_x: .fill $dd, 0
|
||||||
|
sintab_y: .fill $c5, 0
|
||||||
|
@ -6118,8 +6118,6 @@ INITIAL ASM
|
|||||||
.label progress_cursor = $13
|
.label progress_cursor = $13
|
||||||
.label sin_idx_x = 2
|
.label sin_idx_x = 2
|
||||||
.label sin_idx_y = 3
|
.label sin_idx_y = 3
|
||||||
sintab_x: .fill 221, 0
|
|
||||||
sintab_y: .fill 197, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @43 [phi:@begin->@43]
|
//SEG3 [1] phi from @begin to @43 [phi:@begin->@43]
|
||||||
@ -7522,6 +7520,8 @@ place_sprites: {
|
|||||||
//SEG481 [231] return [ ] ( main:2::init:5::place_sprites:54 [ ] )
|
//SEG481 [231] return [ ] ( main:2::init:5::place_sprites:54 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
sintab_x: .fill $dd, 0
|
||||||
|
sintab_y: .fill $c5, 0
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Equivalence Class zp ZP_BYTE:53 [ anim::$3 ] has ALU potential.
|
Equivalence Class zp ZP_BYTE:53 [ anim::$3 ] has ALU potential.
|
||||||
@ -7897,8 +7897,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.label progress_cursor = $a
|
.label progress_cursor = $a
|
||||||
.label sin_idx_x = 2
|
.label sin_idx_x = 2
|
||||||
.label sin_idx_y = 3
|
.label sin_idx_y = 3
|
||||||
sintab_x: .fill 221, 0
|
|
||||||
sintab_y: .fill 197, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @43 [phi:@begin->@43]
|
//SEG3 [1] phi from @begin to @43 [phi:@begin->@43]
|
||||||
@ -9206,6 +9204,8 @@ place_sprites: {
|
|||||||
//SEG481 [231] return [ ] ( main:2::init:5::place_sprites:54 [ ] )
|
//SEG481 [231] return [ ] ( main:2::init:5::place_sprites:54 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
sintab_x: .fill $dd, 0
|
||||||
|
sintab_y: .fill $c5, 0
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b43
|
Removing instruction jmp b43
|
||||||
@ -9896,8 +9896,6 @@ FINAL ASSEMBLER
|
|||||||
.label progress_cursor = $a
|
.label progress_cursor = $a
|
||||||
.label sin_idx_x = 2
|
.label sin_idx_x = 2
|
||||||
.label sin_idx_y = 3
|
.label sin_idx_y = 3
|
||||||
sintab_x: .fill 221, 0
|
|
||||||
sintab_y: .fill 197, 0
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @43 [phi:@begin->@43]
|
//SEG3 [1] phi from @begin to @43 [phi:@begin->@43]
|
||||||
//SEG4 @43
|
//SEG4 @43
|
||||||
@ -10930,4 +10928,6 @@ place_sprites: {
|
|||||||
//SEG481 [231] return [ ] ( main:2::init:5::place_sprites:54 [ ] )
|
//SEG481 [231] return [ ] ( main:2::init:5::place_sprites:54 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
sintab_x: .fill $dd, 0
|
||||||
|
sintab_y: .fill $c5, 0
|
||||||
|
|
||||||
|
@ -5,9 +5,6 @@
|
|||||||
.const COLORS = $d800
|
.const COLORS = $d800
|
||||||
.const FILL = $e6
|
.const FILL = $e6
|
||||||
.const numpoints = 6
|
.const numpoints = 6
|
||||||
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
|
||||||
YPOS: .byte 5, 8, $e, 2, $11, $16
|
|
||||||
COLS: .byte 1, 2, 3, 4, 5, 7
|
|
||||||
jsr main
|
jsr main
|
||||||
main: {
|
main: {
|
||||||
jsr initscreen
|
jsr initscreen
|
||||||
@ -203,3 +200,6 @@ initscreen: {
|
|||||||
!:
|
!:
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
||||||
|
YPOS: .byte 5, 8, $e, 2, $11, $16
|
||||||
|
COLS: .byte 1, 2, 3, 4, 5, 7
|
||||||
|
@ -1992,9 +1992,6 @@ INITIAL ASM
|
|||||||
.const COLORS = $d800
|
.const COLORS = $d800
|
||||||
.const FILL = $e6
|
.const FILL = $e6
|
||||||
.const numpoints = 6
|
.const numpoints = 6
|
||||||
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
|
||||||
YPOS: .byte 5, 8, $e, 2, $11, $16
|
|
||||||
COLS: .byte 1, 2, 3, 4, 5, 7
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
||||||
@ -2489,6 +2486,9 @@ initscreen: {
|
|||||||
//SEG153 [83] return [ ] ( main:2::initscreen:5 [ ] )
|
//SEG153 [83] return [ ] ( main:2::initscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
||||||
|
YPOS: .byte 5, 8, $e, 2, $11, $16
|
||||||
|
COLS: .byte 1, 2, 3, 4, 5, 7
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) always clobbers reg byte a
|
Statement [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) always clobbers reg byte a
|
||||||
@ -2633,9 +2633,6 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.const COLORS = $d800
|
.const COLORS = $d800
|
||||||
.const FILL = $e6
|
.const FILL = $e6
|
||||||
.const numpoints = 6
|
.const numpoints = 6
|
||||||
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
|
||||||
YPOS: .byte 5, 8, $e, 2, $11, $16
|
|
||||||
COLS: .byte 1, 2, 3, 4, 5, 7
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
bbegin:
|
bbegin:
|
||||||
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
||||||
@ -3075,6 +3072,9 @@ initscreen: {
|
|||||||
//SEG153 [83] return [ ] ( main:2::initscreen:5 [ ] )
|
//SEG153 [83] return [ ] ( main:2::initscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
||||||
|
YPOS: .byte 5, 8, $e, 2, $11, $16
|
||||||
|
COLS: .byte 1, 2, 3, 4, 5, 7
|
||||||
|
|
||||||
ASSEMBLER OPTIMIZATIONS
|
ASSEMBLER OPTIMIZATIONS
|
||||||
Removing instruction jmp b5
|
Removing instruction jmp b5
|
||||||
@ -3327,9 +3327,6 @@ FINAL ASSEMBLER
|
|||||||
.const COLORS = $d800
|
.const COLORS = $d800
|
||||||
.const FILL = $e6
|
.const FILL = $e6
|
||||||
.const numpoints = 6
|
.const numpoints = 6
|
||||||
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
|
||||||
YPOS: .byte 5, 8, $e, 2, $11, $16
|
|
||||||
COLS: .byte 1, 2, 3, 4, 5, 7
|
|
||||||
//SEG2 @begin
|
//SEG2 @begin
|
||||||
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
|
||||||
//SEG4 @5
|
//SEG4 @5
|
||||||
@ -3680,4 +3677,7 @@ initscreen: {
|
|||||||
//SEG153 [83] return [ ] ( main:2::initscreen:5 [ ] )
|
//SEG153 [83] return [ ] ( main:2::initscreen:5 [ ] )
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
XPOS: .byte 5, $f, 6, $22, $15, $1f
|
||||||
|
YPOS: .byte 5, 8, $e, 2, $11, $16
|
||||||
|
COLS: .byte 1, 2, 3, 4, 5, 7
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user