diff --git a/src/main/fragment/6502X/vbuz1=vbuaa_band_vbuxx.asm b/src/main/fragment/6502X/vbuz1=vbuaa_band_vbuxx.asm new file mode 100644 index 000000000..124679d63 --- /dev/null +++ b/src/main/fragment/6502X/vbuz1=vbuaa_band_vbuxx.asm @@ -0,0 +1 @@ +sax {z1} \ No newline at end of file diff --git a/src/main/fragment/vbuz1=vbuaa_band_vbuxx.asm b/src/main/fragment/vbuz1=vbuaa_band_vbuxx.asm index 124679d63..7e48cbb1f 100644 --- a/src/main/fragment/vbuz1=vbuaa_band_vbuxx.asm +++ b/src/main/fragment/vbuz1=vbuaa_band_vbuxx.asm @@ -1 +1,3 @@ -sax {z1} \ No newline at end of file +stx {z1} +and {z1} +sta {z1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 00c68057c..2ca45ec93 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -75,6 +75,15 @@ public class Compiler { program.setTargetPlatform(targetPlatform); } + void setTargetCpu(TargetCpu targetCpu) { + program.setTargetCpu(targetCpu); + } + + TargetCpu getTargetCpu() { + return program.getTargetCpu(); + } + + public void setLog(CompileLog compileLog) { program.setLog(compileLog); } @@ -489,7 +498,7 @@ public class Compiler { new Pass4CodeGeneration(program, false, warnFragmentMissing).generate(); new Pass4AssertNoCpuClobber(program).check(); getLog().append("\nINITIAL ASM"); - getLog().append("Target platform is " + program.getTargetPlatform().getName()); + getLog().append("Target platform is " + program.getTargetPlatform().getName() + " / " +program.getTargetCpu().getName()); getLog().append(program.getAsm().toString(new AsmProgram.AsmPrintState(true), program)); // Find potential registers for each live range equivalence class - based on clobbering of fragments diff --git a/src/main/java/dk/camelot64/kickc/KickC.java b/src/main/java/dk/camelot64/kickc/KickC.java index 375b6ea01..8de2999b0 100644 --- a/src/main/java/dk/camelot64/kickc/KickC.java +++ b/src/main/java/dk/camelot64/kickc/KickC.java @@ -6,6 +6,7 @@ import dk.camelot64.kickc.fragment.AsmFragmentTemplateSynthesizer; import dk.camelot64.kickc.fragment.AsmFragmentTemplateUsages; import dk.camelot64.kickc.model.CompileError; import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.TargetCpu; import dk.camelot64.kickc.model.TargetPlatform; import kickass.KickAssembler; import kickass.nonasm.c64.CharToPetsciiConverter; @@ -129,6 +130,9 @@ public class KickC implements Callable { @CommandLine.Option(names = {"-t", "-target"}, description = "The target system. Default is C64 with BASIC upstart. ") private String target = TargetPlatform.C64BASIC.getName(); + @CommandLine.Option(names = {"-cpu"}, description = "The target CPU. Default is 6502 with illegal opcodes. ") + private String cpu = TargetCpu.MOS6502X.getName(); + @CommandLine.Option(names = {"-T", "-link"}, description = "Link using a linker script in KickAss segment format.") private String linkScript = null; @@ -162,6 +166,21 @@ public class KickC implements Callable { compiler.setTargetPlatform(targetPlatform); } + if(cpu!=null) { + TargetCpu targetCpu = TargetCpu.getTargetCpu(cpu); + if(targetCpu==null) { + System.err.println("Unknown target CPU "+cpu); + StringBuffer supported = new StringBuffer(); + supported.append("The supported target CPUs are: "); + for(TargetCpu value : TargetCpu.values()) { + supported.append(value.getName()).append(" "); + } + System.err.println(supported); + System.exit(COMPILE_ERROR); + } + compiler.setTargetCpu(targetCpu); + } + if(libDir != null) { for(Path libPath : libDir) { compiler.addImportPath(libPath.toString()); @@ -172,6 +191,8 @@ public class KickC implements Callable { fragmentDir = new File("fragment/").toPath(); } + Path fragmentCpuDir = fragmentDir.resolve(compiler.getTargetCpu().getName()); + Path fragmentCacheDir = null; if(optimizeFragmentCache) { if(outputDir != null) { @@ -183,7 +204,7 @@ public class KickC implements Callable { configVerbosity(compiler); - AsmFragmentTemplateSynthesizer.initialize(fragmentDir, fragmentCacheDir, compiler.getLog()); + AsmFragmentTemplateSynthesizer.initialize(fragmentDir, fragmentCpuDir, fragmentCacheDir, compiler.getLog()); if(fragment != null) { if(verbose) { diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java index 1bd0bd33f..71436c8c3 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java @@ -28,8 +28,8 @@ public class AsmFragmentTemplateSynthesizer { static AsmFragmentTemplateSynthesizer SYNTHESIZER = null; /** Initialize the fragment template synthesizer. */ - public static void initialize(Path fragmentFolder, Path cacheFolder, CompileLog log) { - SYNTHESIZER = new AsmFragmentTemplateSynthesizer(fragmentFolder, cacheFolder, log); + public static void initialize(Path fragmentFolder, Path fragmentCpuFolder, Path cacheFolder, CompileLog log) { + SYNTHESIZER = new AsmFragmentTemplateSynthesizer(fragmentFolder, fragmentCpuFolder, cacheFolder, log); } /** Finalize the fragment template synthesizer. */ @@ -38,8 +38,9 @@ public class AsmFragmentTemplateSynthesizer { } /** Create synthesizer. */ - private AsmFragmentTemplateSynthesizer(Path fragmentFolder, Path cacheFolder, CompileLog log) { - this.fragmentFolder = fragmentFolder; + private AsmFragmentTemplateSynthesizer(Path defaultFragmentFolder, Path cpuFragmentFolder, Path cacheFolder, CompileLog log) { + this.defaultFragmentFolder = defaultFragmentFolder; + this.cpuFragmentFolder = cpuFragmentFolder; this.cacheFolder = cacheFolder; this.synthesisGraph = new LinkedHashMap<>(); this.bestTemplateUpdate = new ArrayDeque<>(); @@ -49,8 +50,11 @@ public class AsmFragmentTemplateSynthesizer { } - /** The folder containing fragment files. */ - private Path fragmentFolder; + /** The folder containing generic fragment files. */ + private Path defaultFragmentFolder; + + /** The folder containing CPU-specific fragment files. */ + private Path cpuFragmentFolder; /** The folder containing cached fragment files. */ private Path cacheFolder; @@ -184,9 +188,9 @@ public class AsmFragmentTemplateSynthesizer { log.append("Loaded cached fragments " + bestFragmentCache.size() + " from " + cacheFile.getPath()); return bestFragmentCache; } catch(IOException e) { - throw new RuntimeException("Error loading fragment cache file " + fragmentFolder, e); + throw new RuntimeException("Error loading fragment cache file " + defaultFragmentFolder, e); } catch(StringIndexOutOfBoundsException e) { - throw new RuntimeException("Problem reading fragment file " + fragmentFolder, e); + throw new RuntimeException("Problem reading fragment file " + defaultFragmentFolder, e); } } @@ -205,7 +209,7 @@ public class AsmFragmentTemplateSynthesizer { for(String signature : this.bestFragmentCache.keySet()) { AsmFragmentTemplate fragmentTemplate = this.bestFragmentCache.get(signature); fragmentFilePrint.println("//FRAGMENT " + signature); - if(fragmentTemplate.getBody()!=null) + if(fragmentTemplate.getBody() != null) fragmentFilePrint.println(fragmentTemplate.getBody()); } fragmentFilePrint.close(); @@ -255,8 +259,8 @@ public class AsmFragmentTemplateSynthesizer { /** Options for synthesizing the other templates from this template using a specific synthesis rule. Backward edges in the synthesis graph. */ private Set parentOptions; - /** The template loaded from a file, if it exists. null if no file exists for the signature. */ - private AsmFragmentTemplate fileTemplate; + /** The templates loaded from a file. Empty if no file exists for the signature. */ + private List fileTemplates; /** * Create a new synthesis @@ -268,6 +272,7 @@ public class AsmFragmentTemplateSynthesizer { this.bestTemplates = new LinkedHashMap<>(); this.synthesisOptions = new LinkedHashSet<>(); this.parentOptions = new LinkedHashSet<>(); + this.fileTemplates = new ArrayList<>(); } /** @@ -298,12 +303,12 @@ public class AsmFragmentTemplateSynthesizer { this.parentOptions.add(synthesisOption); } - public void setFileTemplate(AsmFragmentTemplate fileTemplate) { - this.fileTemplate = fileTemplate; + public void addFileTemplate(AsmFragmentTemplate fileTemplate) { + this.fileTemplates.add(fileTemplate); } - public AsmFragmentTemplate getFileTemplate() { - return fileTemplate; + public List getFileTemplates() { + return fileTemplates; } /** @@ -489,11 +494,13 @@ public class AsmFragmentTemplateSynthesizer { synthesisGraph.put(signature, synthesis); queueUpdateBestTemplate(synthesis); // Load the template from file - if it exists - AsmFragmentTemplate fileTemplate = loadFragmentTemplate(signature, log); - if(fileTemplate != null) { - synthesis.setFileTemplate(fileTemplate); - if(log.isVerboseFragmentLog()) { - log.append("New fragment synthesis " + signature + " - Successfully loaded " + signature + ".asm"); + List fileTemplates = loadFragmentTemplates(signature, log); + if(fileTemplates != null) { + for(AsmFragmentTemplate fileTemplate : fileTemplates) { + synthesis.addFileTemplate(fileTemplate); + if(log.isVerboseFragmentLog()) { + log.append("New fragment synthesis " + signature + " - Successfully loaded " + signature + ".asm"); + } } } // Populate with synthesis options @@ -538,8 +545,8 @@ public class AsmFragmentTemplateSynthesizer { AsmFragmentSynthesis synthesis = bestTemplateUpdate.pop(); boolean modified = false; // Check if the file template is best in class - AsmFragmentTemplate fileTemplate = synthesis.getFileTemplate(); - if(fileTemplate != null) { + List fileTemplates = synthesis.getFileTemplates(); + for(AsmFragmentTemplate fileTemplate : fileTemplates) { modified |= synthesis.bestTemplateCandidate(fileTemplate); } Collection synthesisOptions = synthesis.getSynthesisOptions(); @@ -586,18 +593,38 @@ public class AsmFragmentTemplateSynthesizer { } /** - * Attempt to load a fragment template from disk. + * Attempt to load a fragment template from disk. Also searches relevant fragment sub-folders specified by CPU and other options. * * @param signature The signature * @param log The compile log * @return The fragment template from a file. null if the template is not found as a file. */ - private AsmFragmentTemplate loadFragmentTemplate(String signature, CompileLog log) { - if(fragmentFolder == null) { - return null; + private List loadFragmentTemplates(String signature, CompileLog log) { + ArrayList fileTemplates = new ArrayList<>(); + if(defaultFragmentFolder != null) { + AsmFragmentTemplate fileFragment = loadFragmentTemplate(signature, defaultFragmentFolder); + if(fileFragment != null) + fileTemplates.add(fileFragment); } + if(cpuFragmentFolder != null) { + AsmFragmentTemplate fileFragment = loadFragmentTemplate(signature, cpuFragmentFolder); + if(fileFragment != null) + fileTemplates.add(fileFragment); + } + return fileTemplates; + } + + + /** + * Attempt to load a fragment template from a folder on disk + * + * @param signature The signature to search for + * @param fragmentFolder The folder to look in + * @return any fragment with the gicen signature found in the folder. null if not found. + */ + private AsmFragmentTemplate loadFragmentTemplate(String signature, Path fragmentFolder) { try { - File fragmentFile = this.fragmentFolder.resolve(signature + ".asm").toFile(); + File fragmentFile = fragmentFolder.resolve(signature + ".asm").toFile(); if(!fragmentFile.exists()) { return null; } @@ -635,7 +662,7 @@ public class AsmFragmentTemplateSynthesizer { } File[] allFragmentFiles() { - return fragmentFolder.toFile().listFiles((dir, name) -> name.endsWith(".asm")); + return defaultFragmentFolder.toFile().listFiles((dir, name) -> name.endsWith(".asm")); } diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index 060923bac..f9fbb2c13 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -27,13 +27,16 @@ public class Program { private List importPaths; /** Imported files. PASS 0 (STATIC) */ private List imported; + + /** The target platform that the program is being build for. PASS 0-5 (STATIC) */ + private TargetPlatform targetPlatform = TargetPlatform.DEFAULT; + /** The target CPU that the program is being build for. PASS 0-5 (STATIC) */ + private TargetCpu targetCpu = TargetCpu.DEFAULT; /** Path to any custom link script file used for linking (STATIC) */ private Path linkScriptFilePath; /** Body to any custom link script file used for linking (STATIC) */ private String linkScriptBody; - /** The target platform that the program is being build for. PASS 0-5 (STATIC) */ - private TargetPlatform targetPlatform = TargetPlatform.DEFAULT; /** Absolute start address of the code. Null to start ad 0x080d. PASS 0-5 (STATIC) */ private Number programPc; /** Reserved ZP addresses that the compiler cannot use. PASS 0-5 (STATIC) */ @@ -156,6 +159,14 @@ public class Program { this.asm = null; } + public TargetCpu getTargetCpu() { + return targetCpu; + } + + public void setTargetCpu(TargetCpu targetCpu) { + this.targetCpu = targetCpu; + } + public TargetPlatform getTargetPlatform() { return targetPlatform; } diff --git a/src/main/java/dk/camelot64/kickc/model/TargetCpu.java b/src/main/java/dk/camelot64/kickc/model/TargetCpu.java new file mode 100644 index 000000000..ae9758453 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/TargetCpu.java @@ -0,0 +1,42 @@ +package dk.camelot64.kickc.model; + +/** The target CPU variation of the compile. Controls which instructions are legal. */ +public enum TargetCpu { + /** Vanilla MOS 6502 CPU - without illegal opcodes. */ + MOS6502("6502"), + /** MOS 6502 CPU with support for illegal instructions. */ + MOS6502X("6502X"), + ///** 65C02 CPU - More addressing modes and instructions, no illegal instructions. http://westerndesigncenter.com/wdc/documentation/w65c02s.pdf */ + //WDC65C02("65C02"), + ///** 65CE02 CPU - Even more addressing modes and instructions. http://www.zimmers.net/anonftp/pub/cbm/documents/chipdata/65ce02.txt */ + //MOS65CE02("65CE02"), + ///** 65C186 CPU - 16-bit instructions, 24-bit addressing modes and more instructions. http://www.westerndesigncenter.com/wdc/documentation/w65c816s.pdf */ + //WDC65C186("65CE02"), + ; + + /** The default target CPU. */ + public static final TargetCpu DEFAULT = MOS6502X; + + private String name; + + TargetCpu(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + /** Get a target CPU by name. */ + public static TargetCpu getTargetCpu(String name) { + for(TargetCpu value : TargetCpu.values()) { + if(value.getName().equalsIgnoreCase(name)) { + return value; + } + } + return null; + } + + + +} diff --git a/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java b/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java index 03fdca0b4..b85bdee60 100644 --- a/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java +++ b/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java @@ -6,12 +6,8 @@ package dk.camelot64.kickc.model; public enum TargetPlatform { /** Commodore 64 with BASIC upstart SYS-command. */ C64BASIC("c64basic"), - /** Commodore 64 with BASIC upstart SYS-command - using Code and Data segments. */ - C64BASIC_SEGMENTS("c64basic_segments"), /** 6502 assembler (with no upstart code.)*/ ASM6502("asm6502"), - /** 6502 assembler (with no upstart code.)*/ - ASM6502_SEGMENTS("asm6502_segments"), /** Custom target platform specified in a separate linker file passed using -T option or using #pragma link() */ CUSTOM("custom"); diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 index c277c84ca..e9f2d6e30 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -69,6 +69,7 @@ RESERVE:'reserve' ; PC:'pc'; TARGET:'target'; LINK:'link'; +CPU:'cpu'; CODESEG:'code_seg'; DATASEG:'data_seg'; ENCODING:'encoding'; diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index c7553d7be..818bd5b5b 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -26,23 +26,23 @@ public class KickCLexer extends Lexer { SHIFT_RIGHT=27, EQUAL=28, NOT_EQUAL=29, LESS_THAN=30, LESS_THAN_EQUAL=31, GREATER_THAN_EQUAL=32, GREATER_THAN=33, LOGIC_AND=34, LOGIC_OR=35, ASSIGN=36, ASSIGN_COMPOUND=37, IMPORT=38, TYPEDEF=39, PRAGMA=40, RESERVE=41, PC=42, - TARGET=43, LINK=44, CODESEG=45, DATASEG=46, ENCODING=47, CONST=48, EXTERN=49, - EXPORT=50, ALIGN=51, REGISTER=52, INLINE=53, VOLATILE=54, INTERRUPT=55, - IF=56, ELSE=57, WHILE=58, DO=59, FOR=60, SWITCH=61, RETURN=62, BREAK=63, - CONTINUE=64, ASM=65, DEFAULT=66, CASE=67, STRUCT=68, ENUM=69, SIZEOF=70, - TYPEID=71, KICKASM=72, RESOURCE=73, USES=74, CLOBBERS=75, BYTES=76, CYCLES=77, - LOGIC_NOT=78, SIGNEDNESS=79, SIMPLETYPE=80, BOOLEAN=81, KICKASM_BODY=82, - STRING=83, CHAR=84, NUMBER=85, NUMFLOAT=86, BINFLOAT=87, DECFLOAT=88, - HEXFLOAT=89, NUMINT=90, BININTEGER=91, DECINTEGER=92, HEXINTEGER=93, NAME=94, - WS=95, COMMENT_LINE=96, COMMENT_BLOCK=97, ASM_BYTE=98, ASM_MNEMONIC=99, - ASM_IMM=100, ASM_COLON=101, ASM_COMMA=102, ASM_PAR_BEGIN=103, ASM_PAR_END=104, - ASM_BRACKET_BEGIN=105, ASM_BRACKET_END=106, ASM_DOT=107, ASM_SHIFT_LEFT=108, - ASM_SHIFT_RIGHT=109, ASM_PLUS=110, ASM_MINUS=111, ASM_LESS_THAN=112, ASM_GREATER_THAN=113, - ASM_MULTIPLY=114, ASM_DIVIDE=115, ASM_CURLY_BEGIN=116, ASM_CURLY_END=117, - ASM_NUMBER=118, ASM_NUMFLOAT=119, ASM_BINFLOAT=120, ASM_DECFLOAT=121, - ASM_HEXFLOAT=122, ASM_NUMINT=123, ASM_BININTEGER=124, ASM_DECINTEGER=125, - ASM_HEXINTEGER=126, ASM_CHAR=127, ASM_MULTI_REL=128, ASM_MULTI_NAME=129, - ASM_NAME=130, ASM_WS=131, ASM_COMMENT_LINE=132, ASM_COMMENT_BLOCK=133; + TARGET=43, LINK=44, CPU=45, CODESEG=46, DATASEG=47, ENCODING=48, CONST=49, + EXTERN=50, EXPORT=51, ALIGN=52, REGISTER=53, INLINE=54, VOLATILE=55, INTERRUPT=56, + IF=57, ELSE=58, WHILE=59, DO=60, FOR=61, SWITCH=62, RETURN=63, BREAK=64, + CONTINUE=65, ASM=66, DEFAULT=67, CASE=68, STRUCT=69, ENUM=70, SIZEOF=71, + TYPEID=72, KICKASM=73, RESOURCE=74, USES=75, CLOBBERS=76, BYTES=77, CYCLES=78, + LOGIC_NOT=79, SIGNEDNESS=80, SIMPLETYPE=81, BOOLEAN=82, KICKASM_BODY=83, + STRING=84, CHAR=85, NUMBER=86, NUMFLOAT=87, BINFLOAT=88, DECFLOAT=89, + HEXFLOAT=90, NUMINT=91, BININTEGER=92, DECINTEGER=93, HEXINTEGER=94, NAME=95, + WS=96, COMMENT_LINE=97, COMMENT_BLOCK=98, ASM_BYTE=99, ASM_MNEMONIC=100, + ASM_IMM=101, ASM_COLON=102, ASM_COMMA=103, ASM_PAR_BEGIN=104, ASM_PAR_END=105, + ASM_BRACKET_BEGIN=106, ASM_BRACKET_END=107, ASM_DOT=108, ASM_SHIFT_LEFT=109, + ASM_SHIFT_RIGHT=110, ASM_PLUS=111, ASM_MINUS=112, ASM_LESS_THAN=113, ASM_GREATER_THAN=114, + ASM_MULTIPLY=115, ASM_DIVIDE=116, ASM_CURLY_BEGIN=117, ASM_CURLY_END=118, + ASM_NUMBER=119, ASM_NUMFLOAT=120, ASM_BINFLOAT=121, ASM_DECFLOAT=122, + ASM_HEXFLOAT=123, ASM_NUMINT=124, ASM_BININTEGER=125, ASM_DECINTEGER=126, + ASM_HEXINTEGER=127, ASM_CHAR=128, ASM_MULTI_REL=129, ASM_MULTI_NAME=130, + ASM_NAME=131, ASM_WS=132, ASM_COMMENT_LINE=133, ASM_COMMENT_BLOCK=134; public static final int ASM_MODE=1; public static String[] channelNames = { @@ -60,16 +60,16 @@ public class KickCLexer extends Lexer { "AND", "BIT_NOT", "BIT_XOR", "BIT_OR", "SHIFT_LEFT", "SHIFT_RIGHT", "EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_EQUAL", "GREATER_THAN_EQUAL", "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "IMPORT", "TYPEDEF", - "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CODESEG", "DATASEG", "ENCODING", - "CONST", "EXTERN", "EXPORT", "ALIGN", "REGISTER", "INLINE", "VOLATILE", - "INTERRUPT", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", - "CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID", - "KICKASM", "RESOURCE", "USES", "CLOBBERS", "BYTES", "CYCLES", "LOGIC_NOT", - "SIGNEDNESS", "SIMPLETYPE", "BOOLEAN", "KICKASM_BODY", "STRING", "CHAR", - "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", - "DECINTEGER", "HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", - "NAME_START", "NAME_CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", - "ASM_MNEMONIC", "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", + "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU", "CODESEG", "DATASEG", + "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", "REGISTER", "INLINE", + "VOLATILE", "INTERRUPT", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", + "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", "ENUM", + "SIZEOF", "TYPEID", "KICKASM", "RESOURCE", "USES", "CLOBBERS", "BYTES", + "CYCLES", "LOGIC_NOT", "SIGNEDNESS", "SIMPLETYPE", "BOOLEAN", "KICKASM_BODY", + "STRING", "CHAR", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", + "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT", "DECDIGIT", + "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", + "ASM_BYTE", "ASM_MNEMONIC", "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_PAR_END", "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", @@ -85,7 +85,7 @@ public class KickCLexer extends Lexer { "'?'", null, "'->'", null, null, null, null, "'%'", "'++'", "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'import'", "'typedef'", "'#pragma'", - "'reserve'", "'pc'", "'target'", "'link'", "'code_seg'", "'data_seg'", + "'reserve'", "'pc'", "'target'", "'link'", "'cpu'", "'code_seg'", "'data_seg'", "'encoding'", "'const'", "'extern'", "'export'", "'align'", "'register'", "'inline'", "'volatile'", "'interrupt'", "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'", "'asm'", @@ -101,16 +101,16 @@ public class KickCLexer extends Lexer { "DEC", "AND", "BIT_NOT", "BIT_XOR", "BIT_OR", "SHIFT_LEFT", "SHIFT_RIGHT", "EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_EQUAL", "GREATER_THAN_EQUAL", "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", - "IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CODESEG", - "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", "REGISTER", - "INLINE", "VOLATILE", "INTERRUPT", "IF", "ELSE", "WHILE", "DO", "FOR", - "SWITCH", "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", - "ENUM", "SIZEOF", "TYPEID", "KICKASM", "RESOURCE", "USES", "CLOBBERS", - "BYTES", "CYCLES", "LOGIC_NOT", "SIGNEDNESS", "SIMPLETYPE", "BOOLEAN", - "KICKASM_BODY", "STRING", "CHAR", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", - "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", "ASM_MNEMONIC", "ASM_IMM", - "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_PAR_END", "ASM_BRACKET_BEGIN", + "IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU", + "CODESEG", "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", + "REGISTER", "INLINE", "VOLATILE", "INTERRUPT", "IF", "ELSE", "WHILE", + "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", + "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID", "KICKASM", "RESOURCE", "USES", + "CLOBBERS", "BYTES", "CYCLES", "LOGIC_NOT", "SIGNEDNESS", "SIMPLETYPE", + "BOOLEAN", "KICKASM_BODY", "STRING", "CHAR", "NUMBER", "NUMFLOAT", "BINFLOAT", + "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", + "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", "ASM_MNEMONIC", + "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_PAR_END", "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", "ASM_NUMFLOAT", "ASM_BINFLOAT", @@ -200,19 +200,19 @@ public class KickCLexer extends Lexer { case 36: IMPORT_action((RuleContext)_localctx, actionIndex); break; - case 63: + case 64: ASM_action((RuleContext)_localctx, actionIndex); break; - case 81: + case 82: STRING_action((RuleContext)_localctx, actionIndex); break; - case 95: + case 96: NAME_action((RuleContext)_localctx, actionIndex); break; - case 119: + case 120: ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); break; - case 120: + case 121: ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); break; } @@ -268,7 +268,7 @@ public class KickCLexer extends Lexer { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0087\u053f\b\1\b"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0088\u0545\b\1\b"+ "\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n"+ "\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21"+ "\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30"+ @@ -285,486 +285,489 @@ public class KickCLexer extends Lexer { "\t\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084"+ "\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089"+ "\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+ - "\4\u008e\t\u008e\4\u008f\t\u008f\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3"+ - "\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\r\3\r"+ - "\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+ - "\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32"+ - "\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\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%\3%\3%\3%\3%\3"+ - "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u018a\n%\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.\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\61\3\61\3"+ - "\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3"+ - "\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3"+ - "\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\39\39\39\39\39\3"+ - ":\3:\3:\3:\3:\3:\3;\3;\3;\3<\3<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3>\3>\3>\3"+ - ">\3>\3>\3>\3?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3"+ - "A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3E\3"+ - "E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3"+ - "H\3H\3H\3I\3I\3I\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3"+ - "K\3K\3K\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3O\3O\3O\3O\3O\3"+ - "O\3O\3O\3O\3O\3O\3O\3O\3O\5O\u02af\nO\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3"+ - "P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3"+ - "P\3P\3P\3P\5P\u02d6\nP\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\5Q\u02e1\nQ\3R\3R\3"+ - "R\3R\7R\u02e7\nR\fR\16R\u02ea\13R\3R\3R\3R\3S\3S\3S\3S\7S\u02f3\nS\fS"+ - "\16S\u02f6\13S\3S\3S\5S\u02fa\nS\3S\3S\5S\u02fe\nS\5S\u0300\nS\3S\5S\u0303"+ - "\nS\3S\3S\3T\3T\3T\3T\5T\u030b\nT\3T\3T\3U\3U\5U\u0311\nU\3V\3V\3V\5V"+ - "\u0316\nV\3W\3W\3W\3W\3W\5W\u031d\nW\3W\7W\u0320\nW\fW\16W\u0323\13W\3"+ - "W\3W\6W\u0327\nW\rW\16W\u0328\3X\7X\u032c\nX\fX\16X\u032f\13X\3X\3X\6"+ - "X\u0333\nX\rX\16X\u0334\3Y\3Y\3Y\3Y\3Y\5Y\u033c\nY\3Y\7Y\u033f\nY\fY\16"+ - "Y\u0342\13Y\3Y\3Y\6Y\u0346\nY\rY\16Y\u0347\3Z\3Z\3Z\5Z\u034d\nZ\3Z\3Z"+ - "\3Z\5Z\u0352\nZ\3[\3[\3[\6[\u0357\n[\r[\16[\u0358\3[\3[\6[\u035d\n[\r"+ - "[\16[\u035e\5[\u0361\n[\3\\\6\\\u0364\n\\\r\\\16\\\u0365\3]\3]\3]\3]\3"+ - "]\5]\u036d\n]\3]\6]\u0370\n]\r]\16]\u0371\3^\3^\3_\3_\3`\3`\3a\3a\7a\u037c"+ - "\na\fa\16a\u037f\13a\3a\3a\3b\3b\3c\3c\3d\6d\u0388\nd\rd\16d\u0389\3d"+ - "\3d\3e\3e\3e\3e\7e\u0392\ne\fe\16e\u0395\13e\3e\3e\3f\3f\3f\3f\7f\u039d"+ - "\nf\ff\16f\u03a0\13f\3f\3f\3f\3f\3f\3g\3g\3g\3g\3g\3g\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\3"+ - "h\3h\3h\3h\3h\3h\3h\3h\3h\3h\5h\u048b\nh\3i\3i\3j\3j\3k\3k\3l\3l\3m\3"+ - "m\3n\3n\3o\3o\3p\3p\3q\3q\3q\3r\3r\3r\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w\3"+ - "x\3x\3y\3y\3y\3z\3z\3z\3{\3{\5{\u04b7\n{\3|\3|\3|\5|\u04bc\n|\3}\3}\7"+ - "}\u04c0\n}\f}\16}\u04c3\13}\3}\3}\6}\u04c7\n}\r}\16}\u04c8\3~\7~\u04cc"+ - "\n~\f~\16~\u04cf\13~\3~\3~\6~\u04d3\n~\r~\16~\u04d4\3\177\3\177\7\177"+ - "\u04d9\n\177\f\177\16\177\u04dc\13\177\3\177\3\177\6\177\u04e0\n\177\r"+ - "\177\16\177\u04e1\3\u0080\3\u0080\3\u0080\5\u0080\u04e7\n\u0080\3\u0081"+ - "\3\u0081\6\u0081\u04eb\n\u0081\r\u0081\16\u0081\u04ec\3\u0082\6\u0082"+ - "\u04f0\n\u0082\r\u0082\16\u0082\u04f1\3\u0083\3\u0083\6\u0083\u04f6\n"+ - "\u0083\r\u0083\16\u0083\u04f7\3\u0084\3\u0084\3\u0085\3\u0085\3\u0086"+ - "\3\u0086\3\u0087\3\u0087\3\u0087\3\u0087\5\u0087\u0504\n\u0087\3\u0087"+ - "\3\u0087\3\u0088\3\u0088\6\u0088\u050a\n\u0088\r\u0088\16\u0088\u050b"+ - "\3\u0089\3\u0089\7\u0089\u0510\n\u0089\f\u0089\16\u0089\u0513\13\u0089"+ - "\3\u008a\3\u008a\7\u008a\u0517\n\u008a\f\u008a\16\u008a\u051a\13\u008a"+ - "\3\u008b\3\u008b\3\u008c\3\u008c\3\u008d\6\u008d\u0521\n\u008d\r\u008d"+ - "\16\u008d\u0522\3\u008d\3\u008d\3\u008e\3\u008e\3\u008e\3\u008e\7\u008e"+ - "\u052b\n\u008e\f\u008e\16\u008e\u052e\13\u008e\3\u008e\3\u008e\3\u008f"+ - "\3\u008f\3\u008f\3\u008f\7\u008f\u0536\n\u008f\f\u008f\16\u008f\u0539"+ - "\13\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5\u02e8\u039e\u0537"+ - "\2\u0090\4\4\6\5\b\6\n\7\f\b\16\t\20\n\22\13\24\f\26\r\30\16\32\17\34"+ - "\20\36\21 \22\"\23$\24&\25(\26*\27,\30.\31\60\32\62\33\64\34\66\358\36"+ - ":\37< >!@\"B#D$F%H&J\'L(N)P*R+T,V-X.Z/\\\60^\61`\62b\63d\64f\65h\66j\67"+ - "l8n9p:r;tz?|@~A\u0080B\u0082C\u0084D\u0086E\u0088F\u008aG\u008cH"+ - "\u008eI\u0090J\u0092K\u0094L\u0096M\u0098N\u009aO\u009cP\u009eQ\u00a0"+ - "R\u00a2S\u00a4T\u00a6U\u00a8V\u00aaW\u00acX\u00aeY\u00b0Z\u00b2[\u00b4"+ - "\\\u00b6]\u00b8^\u00ba_\u00bc\2\u00be\2\u00c0\2\u00c2`\u00c4\2\u00c6\2"+ - "\u00c8a\u00cab\u00ccc\u00ced\u00d0e\u00d2f\u00d4g\u00d6h\u00d8i\u00da"+ - "j\u00dck\u00del\u00e0m\u00e2n\u00e4o\u00e6p\u00e8q\u00ear\u00ecs\u00ee"+ - "t\u00f0u\u00f2v\u00f4w\u00f6x\u00f8y\u00faz\u00fc{\u00fe|\u0100}\u0102"+ - "~\u0104\177\u0106\u0080\u0108\2\u010a\2\u010c\2\u010e\u0081\u0110\u0082"+ - "\u0112\u0083\u0114\u0084\u0116\2\u0118\2\u011a\u0085\u011c\u0086\u011e"+ - "\u0087\4\2\3\23\3\2$$\3\2||\4\2rruu\4\2ooww\7\2$$))hhpptt\3\2))\4\2uu"+ - "ww\7\2dfkknnuuyy\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2"+ - "\62;C\\aac|\6\2\13\f\17\17\"\"\u00a2\u00a2\4\2\f\f\17\17\4\2--//\2\u05c8"+ - "\2\4\3\2\2\2\2\6\3\2\2\2\2\b\3\2\2\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2"+ - "\2\2\2\20\3\2\2\2\2\22\3\2\2\2\2\24\3\2\2\2\2\26\3\2\2\2\2\30\3\2\2\2"+ - "\2\32\3\2\2\2\2\34\3\2\2\2\2\36\3\2\2\2\2 \3\2\2\2\2\"\3\2\2\2\2$\3\2"+ - "\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3\2\2\2\2.\3\2\2\2\2\60\3\2\2"+ - "\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2\28\3\2\2\2\2:\3\2\2\2\2<\3\2"+ - "\2\2\2>\3\2\2\2\2@\3\2\2\2\2B\3\2\2\2\2D\3\2\2\2\2F\3\2\2\2\2H\3\2\2\2"+ - "\2J\3\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2R\3\2\2\2\2T\3\2\2\2\2V"+ - "\3\2\2\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3\2\2\2\2`\3\2\2\2\2b\3"+ - "\2\2\2\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2\2\2l\3\2\2\2\2n\3\2\2"+ - "\2\2p\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2v\3\2\2\2\2x\3\2\2\2\2z\3\2\2\2\2"+ - "|\3\2\2\2\2~\3\2\2\2\2\u0080\3\2\2\2\2\u0082\3\2\2\2\2\u0084\3\2\2\2\2"+ - "\u0086\3\2\2\2\2\u0088\3\2\2\2\2\u008a\3\2\2\2\2\u008c\3\2\2\2\2\u008e"+ - "\3\2\2\2\2\u0090\3\2\2\2\2\u0092\3\2\2\2\2\u0094\3\2\2\2\2\u0096\3\2\2"+ - "\2\2\u0098\3\2\2\2\2\u009a\3\2\2\2\2\u009c\3\2\2\2\2\u009e\3\2\2\2\2\u00a0"+ - "\3\2\2\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2\2\2\u00a6\3\2\2\2\2\u00a8\3\2\2"+ - "\2\2\u00aa\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae\3\2\2\2\2\u00b0\3\2\2\2\2\u00b2"+ - "\3\2\2\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2\2\2\u00b8\3\2\2\2\2\u00ba\3\2\2"+ - "\2\2\u00c2\3\2\2\2\2\u00c8\3\2\2\2\2\u00ca\3\2\2\2\2\u00cc\3\2\2\2\3\u00ce"+ - "\3\2\2\2\3\u00d0\3\2\2\2\3\u00d2\3\2\2\2\3\u00d4\3\2\2\2\3\u00d6\3\2\2"+ - "\2\3\u00d8\3\2\2\2\3\u00da\3\2\2\2\3\u00dc\3\2\2\2\3\u00de\3\2\2\2\3\u00e0"+ - "\3\2\2\2\3\u00e2\3\2\2\2\3\u00e4\3\2\2\2\3\u00e6\3\2\2\2\3\u00e8\3\2\2"+ - "\2\3\u00ea\3\2\2\2\3\u00ec\3\2\2\2\3\u00ee\3\2\2\2\3\u00f0\3\2\2\2\3\u00f2"+ - "\3\2\2\2\3\u00f4\3\2\2\2\3\u00f6\3\2\2\2\3\u00f8\3\2\2\2\3\u00fa\3\2\2"+ - "\2\3\u00fc\3\2\2\2\3\u00fe\3\2\2\2\3\u0100\3\2\2\2\3\u0102\3\2\2\2\3\u0104"+ - "\3\2\2\2\3\u0106\3\2\2\2\3\u010e\3\2\2\2\3\u0110\3\2\2\2\3\u0112\3\2\2"+ - "\2\3\u0114\3\2\2\2\3\u011a\3\2\2\2\3\u011c\3\2\2\2\3\u011e\3\2\2\2\4\u0120"+ - "\3\2\2\2\6\u0123\3\2\2\2\b\u0125\3\2\2\2\n\u0127\3\2\2\2\f\u0129\3\2\2"+ - "\2\16\u012b\3\2\2\2\20\u012d\3\2\2\2\22\u012f\3\2\2\2\24\u0131\3\2\2\2"+ - "\26\u0133\3\2\2\2\30\u0136\3\2\2\2\32\u0138\3\2\2\2\34\u013a\3\2\2\2\36"+ - "\u013d\3\2\2\2 \u013f\3\2\2\2\"\u0141\3\2\2\2$\u0143\3\2\2\2&\u0145\3"+ - "\2\2\2(\u0147\3\2\2\2*\u014a\3\2\2\2,\u014d\3\2\2\2.\u014f\3\2\2\2\60"+ - "\u0151\3\2\2\2\62\u0153\3\2\2\2\64\u0155\3\2\2\2\66\u0158\3\2\2\28\u015b"+ - "\3\2\2\2:\u015e\3\2\2\2<\u0161\3\2\2\2>\u0163\3\2\2\2@\u0166\3\2\2\2B"+ - "\u0169\3\2\2\2D\u016b\3\2\2\2F\u016e\3\2\2\2H\u0171\3\2\2\2J\u0189\3\2"+ - "\2\2L\u018b\3\2\2\2N\u0194\3\2\2\2P\u019c\3\2\2\2R\u01a4\3\2\2\2T\u01ac"+ - "\3\2\2\2V\u01af\3\2\2\2X\u01b6\3\2\2\2Z\u01bb\3\2\2\2\\\u01c4\3\2\2\2"+ - "^\u01cd\3\2\2\2`\u01d6\3\2\2\2b\u01dc\3\2\2\2d\u01e3\3\2\2\2f\u01ea\3"+ - "\2\2\2h\u01f0\3\2\2\2j\u01f9\3\2\2\2l\u0200\3\2\2\2n\u0209\3\2\2\2p\u0213"+ - "\3\2\2\2r\u0216\3\2\2\2t\u021b\3\2\2\2v\u0221\3\2\2\2x\u0224\3\2\2\2z"+ - "\u0228\3\2\2\2|\u022f\3\2\2\2~\u0236\3\2\2\2\u0080\u023c\3\2\2\2\u0082"+ - "\u0245\3\2\2\2\u0084\u024b\3\2\2\2\u0086\u0253\3\2\2\2\u0088\u0258\3\2"+ - "\2\2\u008a\u025f\3\2\2\2\u008c\u0264\3\2\2\2\u008e\u026b\3\2\2\2\u0090"+ - "\u0272\3\2\2\2\u0092\u027a\3\2\2\2\u0094\u0283\3\2\2\2\u0096\u0288\3\2"+ - "\2\2\u0098\u0291\3\2\2\2\u009a\u0297\3\2\2\2\u009c\u029e\3\2\2\2\u009e"+ - "\u02ae\3\2\2\2\u00a0\u02d5\3\2\2\2\u00a2\u02e0\3\2\2\2\u00a4\u02e2\3\2"+ - "\2\2\u00a6\u02ee\3\2\2\2\u00a8\u0306\3\2\2\2\u00aa\u0310\3\2\2\2\u00ac"+ - "\u0315\3\2\2\2\u00ae\u031c\3\2\2\2\u00b0\u032d\3\2\2\2\u00b2\u033b\3\2"+ - "\2\2\u00b4\u034c\3\2\2\2\u00b6\u0360\3\2\2\2\u00b8\u0363\3\2\2\2\u00ba"+ - "\u036c\3\2\2\2\u00bc\u0373\3\2\2\2\u00be\u0375\3\2\2\2\u00c0\u0377\3\2"+ - "\2\2\u00c2\u0379\3\2\2\2\u00c4\u0382\3\2\2\2\u00c6\u0384\3\2\2\2\u00c8"+ - "\u0387\3\2\2\2\u00ca\u038d\3\2\2\2\u00cc\u0398\3\2\2\2\u00ce\u03a6\3\2"+ - "\2\2\u00d0\u048a\3\2\2\2\u00d2\u048c\3\2\2\2\u00d4\u048e\3\2\2\2\u00d6"+ - "\u0490\3\2\2\2\u00d8\u0492\3\2\2\2\u00da\u0494\3\2\2\2\u00dc\u0496\3\2"+ - "\2\2\u00de\u0498\3\2\2\2\u00e0\u049a\3\2\2\2\u00e2\u049c\3\2\2\2\u00e4"+ - "\u049f\3\2\2\2\u00e6\u04a2\3\2\2\2\u00e8\u04a4\3\2\2\2\u00ea\u04a6\3\2"+ - "\2\2\u00ec\u04a8\3\2\2\2\u00ee\u04aa\3\2\2\2\u00f0\u04ac\3\2\2\2\u00f2"+ - "\u04ae\3\2\2\2\u00f4\u04b1\3\2\2\2\u00f6\u04b6\3\2\2\2\u00f8\u04bb\3\2"+ - "\2\2\u00fa\u04bd\3\2\2\2\u00fc\u04cd\3\2\2\2\u00fe\u04d6\3\2\2\2\u0100"+ - "\u04e6\3\2\2\2\u0102\u04e8\3\2\2\2\u0104\u04ef\3\2\2\2\u0106\u04f3\3\2"+ - "\2\2\u0108\u04f9\3\2\2\2\u010a\u04fb\3\2\2\2\u010c\u04fd\3\2\2\2\u010e"+ - "\u04ff\3\2\2\2\u0110\u0507\3\2\2\2\u0112\u050d\3\2\2\2\u0114\u0514\3\2"+ - "\2\2\u0116\u051b\3\2\2\2\u0118\u051d\3\2\2\2\u011a\u0520\3\2\2\2\u011c"+ - "\u0526\3\2\2\2\u011e\u0531\3\2\2\2\u0120\u0121\7}\2\2\u0121\u0122\b\2"+ - "\2\2\u0122\5\3\2\2\2\u0123\u0124\7\177\2\2\u0124\7\3\2\2\2\u0125\u0126"+ - "\7]\2\2\u0126\t\3\2\2\2\u0127\u0128\7_\2\2\u0128\13\3\2\2\2\u0129\u012a"+ - "\7*\2\2\u012a\r\3\2\2\2\u012b\u012c\7+\2\2\u012c\17\3\2\2\2\u012d\u012e"+ - "\7=\2\2\u012e\21\3\2\2\2\u012f\u0130\7<\2\2\u0130\23\3\2\2\2\u0131\u0132"+ - "\7.\2\2\u0132\25\3\2\2\2\u0133\u0134\7\60\2\2\u0134\u0135\7\60\2\2\u0135"+ - "\27\3\2\2\2\u0136\u0137\7A\2\2\u0137\31\3\2\2\2\u0138\u0139\7\60\2\2\u0139"+ - "\33\3\2\2\2\u013a\u013b\7/\2\2\u013b\u013c\7@\2\2\u013c\35\3\2\2\2\u013d"+ - "\u013e\7-\2\2\u013e\37\3\2\2\2\u013f\u0140\7/\2\2\u0140!\3\2\2\2\u0141"+ - "\u0142\7,\2\2\u0142#\3\2\2\2\u0143\u0144\7\61\2\2\u0144%\3\2\2\2\u0145"+ - "\u0146\7\'\2\2\u0146\'\3\2\2\2\u0147\u0148\7-\2\2\u0148\u0149\7-\2\2\u0149"+ - ")\3\2\2\2\u014a\u014b\7/\2\2\u014b\u014c\7/\2\2\u014c+\3\2\2\2\u014d\u014e"+ - "\7(\2\2\u014e-\3\2\2\2\u014f\u0150\7\u0080\2\2\u0150/\3\2\2\2\u0151\u0152"+ - "\7`\2\2\u0152\61\3\2\2\2\u0153\u0154\7~\2\2\u0154\63\3\2\2\2\u0155\u0156"+ - "\7>\2\2\u0156\u0157\7>\2\2\u0157\65\3\2\2\2\u0158\u0159\7@\2\2\u0159\u015a"+ - "\7@\2\2\u015a\67\3\2\2\2\u015b\u015c\7?\2\2\u015c\u015d\7?\2\2\u015d9"+ - "\3\2\2\2\u015e\u015f\7#\2\2\u015f\u0160\7?\2\2\u0160;\3\2\2\2\u0161\u0162"+ - "\7>\2\2\u0162=\3\2\2\2\u0163\u0164\7>\2\2\u0164\u0165\7?\2\2\u0165?\3"+ - "\2\2\2\u0166\u0167\7@\2\2\u0167\u0168\7?\2\2\u0168A\3\2\2\2\u0169\u016a"+ - "\7@\2\2\u016aC\3\2\2\2\u016b\u016c\7(\2\2\u016c\u016d\7(\2\2\u016dE\3"+ - "\2\2\2\u016e\u016f\7~\2\2\u016f\u0170\7~\2\2\u0170G\3\2\2\2\u0171\u0172"+ - "\7?\2\2\u0172I\3\2\2\2\u0173\u0174\7-\2\2\u0174\u018a\7?\2\2\u0175\u0176"+ - "\7/\2\2\u0176\u018a\7?\2\2\u0177\u0178\7,\2\2\u0178\u018a\7?\2\2\u0179"+ - "\u017a\7\61\2\2\u017a\u018a\7?\2\2\u017b\u017c\7\'\2\2\u017c\u018a\7?"+ - "\2\2\u017d\u017e\7>\2\2\u017e\u017f\7>\2\2\u017f\u018a\7?\2\2\u0180\u0181"+ - "\7@\2\2\u0181\u0182\7@\2\2\u0182\u018a\7?\2\2\u0183\u0184\7(\2\2\u0184"+ - "\u018a\7?\2\2\u0185\u0186\7~\2\2\u0186\u018a\7?\2\2\u0187\u0188\7`\2\2"+ - "\u0188\u018a\7?\2\2\u0189\u0173\3\2\2\2\u0189\u0175\3\2\2\2\u0189\u0177"+ - "\3\2\2\2\u0189\u0179\3\2\2\2\u0189\u017b\3\2\2\2\u0189\u017d\3\2\2\2\u0189"+ - "\u0180\3\2\2\2\u0189\u0183\3\2\2\2\u0189\u0185\3\2\2\2\u0189\u0187\3\2"+ - "\2\2\u018aK\3\2\2\2\u018b\u018c\7k\2\2\u018c\u018d\7o\2\2\u018d\u018e"+ - "\7r\2\2\u018e\u018f\7q\2\2\u018f\u0190\7t\2\2\u0190\u0191\7v\2\2\u0191"+ - "\u0192\3\2\2\2\u0192\u0193\b&\3\2\u0193M\3\2\2\2\u0194\u0195\7v\2\2\u0195"+ - "\u0196\7{\2\2\u0196\u0197\7r\2\2\u0197\u0198\7g\2\2\u0198\u0199\7f\2\2"+ - "\u0199\u019a\7g\2\2\u019a\u019b\7h\2\2\u019bO\3\2\2\2\u019c\u019d\7%\2"+ - "\2\u019d\u019e\7r\2\2\u019e\u019f\7t\2\2\u019f\u01a0\7c\2\2\u01a0\u01a1"+ - "\7i\2\2\u01a1\u01a2\7o\2\2\u01a2\u01a3\7c\2\2\u01a3Q\3\2\2\2\u01a4\u01a5"+ - "\7t\2\2\u01a5\u01a6\7g\2\2\u01a6\u01a7\7u\2\2\u01a7\u01a8\7g\2\2\u01a8"+ - "\u01a9\7t\2\2\u01a9\u01aa\7x\2\2\u01aa\u01ab\7g\2\2\u01abS\3\2\2\2\u01ac"+ - "\u01ad\7r\2\2\u01ad\u01ae\7e\2\2\u01aeU\3\2\2\2\u01af\u01b0\7v\2\2\u01b0"+ - "\u01b1\7c\2\2\u01b1\u01b2\7t\2\2\u01b2\u01b3\7i\2\2\u01b3\u01b4\7g\2\2"+ - "\u01b4\u01b5\7v\2\2\u01b5W\3\2\2\2\u01b6\u01b7\7n\2\2\u01b7\u01b8\7k\2"+ - "\2\u01b8\u01b9\7p\2\2\u01b9\u01ba\7m\2\2\u01baY\3\2\2\2\u01bb\u01bc\7"+ - "e\2\2\u01bc\u01bd\7q\2\2\u01bd\u01be\7f\2\2\u01be\u01bf\7g\2\2\u01bf\u01c0"+ - "\7a\2\2\u01c0\u01c1\7u\2\2\u01c1\u01c2\7g\2\2\u01c2\u01c3\7i\2\2\u01c3"+ - "[\3\2\2\2\u01c4\u01c5\7f\2\2\u01c5\u01c6\7c\2\2\u01c6\u01c7\7v\2\2\u01c7"+ - "\u01c8\7c\2\2\u01c8\u01c9\7a\2\2\u01c9\u01ca\7u\2\2\u01ca\u01cb\7g\2\2"+ - "\u01cb\u01cc\7i\2\2\u01cc]\3\2\2\2\u01cd\u01ce\7g\2\2\u01ce\u01cf\7p\2"+ - "\2\u01cf\u01d0\7e\2\2\u01d0\u01d1\7q\2\2\u01d1\u01d2\7f\2\2\u01d2\u01d3"+ - "\7k\2\2\u01d3\u01d4\7p\2\2\u01d4\u01d5\7i\2\2\u01d5_\3\2\2\2\u01d6\u01d7"+ - "\7e\2\2\u01d7\u01d8\7q\2\2\u01d8\u01d9\7p\2\2\u01d9\u01da\7u\2\2\u01da"+ - "\u01db\7v\2\2\u01dba\3\2\2\2\u01dc\u01dd\7g\2\2\u01dd\u01de\7z\2\2\u01de"+ - "\u01df\7v\2\2\u01df\u01e0\7g\2\2\u01e0\u01e1\7t\2\2\u01e1\u01e2\7p\2\2"+ - "\u01e2c\3\2\2\2\u01e3\u01e4\7g\2\2\u01e4\u01e5\7z\2\2\u01e5\u01e6\7r\2"+ - "\2\u01e6\u01e7\7q\2\2\u01e7\u01e8\7t\2\2\u01e8\u01e9\7v\2\2\u01e9e\3\2"+ - "\2\2\u01ea\u01eb\7c\2\2\u01eb\u01ec\7n\2\2\u01ec\u01ed\7k\2\2\u01ed\u01ee"+ - "\7i\2\2\u01ee\u01ef\7p\2\2\u01efg\3\2\2\2\u01f0\u01f1\7t\2\2\u01f1\u01f2"+ - "\7g\2\2\u01f2\u01f3\7i\2\2\u01f3\u01f4\7k\2\2\u01f4\u01f5\7u\2\2\u01f5"+ - "\u01f6\7v\2\2\u01f6\u01f7\7g\2\2\u01f7\u01f8\7t\2\2\u01f8i\3\2\2\2\u01f9"+ - "\u01fa\7k\2\2\u01fa\u01fb\7p\2\2\u01fb\u01fc\7n\2\2\u01fc\u01fd\7k\2\2"+ - "\u01fd\u01fe\7p\2\2\u01fe\u01ff\7g\2\2\u01ffk\3\2\2\2\u0200\u0201\7x\2"+ - "\2\u0201\u0202\7q\2\2\u0202\u0203\7n\2\2\u0203\u0204\7c\2\2\u0204\u0205"+ - "\7v\2\2\u0205\u0206\7k\2\2\u0206\u0207\7n\2\2\u0207\u0208\7g\2\2\u0208"+ - "m\3\2\2\2\u0209\u020a\7k\2\2\u020a\u020b\7p\2\2\u020b\u020c\7v\2\2\u020c"+ - "\u020d\7g\2\2\u020d\u020e\7t\2\2\u020e\u020f\7t\2\2\u020f\u0210\7w\2\2"+ - "\u0210\u0211\7r\2\2\u0211\u0212\7v\2\2\u0212o\3\2\2\2\u0213\u0214\7k\2"+ - "\2\u0214\u0215\7h\2\2\u0215q\3\2\2\2\u0216\u0217\7g\2\2\u0217\u0218\7"+ - "n\2\2\u0218\u0219\7u\2\2\u0219\u021a\7g\2\2\u021as\3\2\2\2\u021b\u021c"+ - "\7y\2\2\u021c\u021d\7j\2\2\u021d\u021e\7k\2\2\u021e\u021f\7n\2\2\u021f"+ - "\u0220\7g\2\2\u0220u\3\2\2\2\u0221\u0222\7f\2\2\u0222\u0223\7q\2\2\u0223"+ - "w\3\2\2\2\u0224\u0225\7h\2\2\u0225\u0226\7q\2\2\u0226\u0227\7t\2\2\u0227"+ - "y\3\2\2\2\u0228\u0229\7u\2\2\u0229\u022a\7y\2\2\u022a\u022b\7k\2\2\u022b"+ - "\u022c\7v\2\2\u022c\u022d\7e\2\2\u022d\u022e\7j\2\2\u022e{\3\2\2\2\u022f"+ - "\u0230\7t\2\2\u0230\u0231\7g\2\2\u0231\u0232\7v\2\2\u0232\u0233\7w\2\2"+ - "\u0233\u0234\7t\2\2\u0234\u0235\7p\2\2\u0235}\3\2\2\2\u0236\u0237\7d\2"+ - "\2\u0237\u0238\7t\2\2\u0238\u0239\7g\2\2\u0239\u023a\7c\2\2\u023a\u023b"+ - "\7m\2\2\u023b\177\3\2\2\2\u023c\u023d\7e\2\2\u023d\u023e\7q\2\2\u023e"+ - "\u023f\7p\2\2\u023f\u0240\7v\2\2\u0240\u0241\7k\2\2\u0241\u0242\7p\2\2"+ - "\u0242\u0243\7w\2\2\u0243\u0244\7g\2\2\u0244\u0081\3\2\2\2\u0245\u0246"+ - "\7c\2\2\u0246\u0247\7u\2\2\u0247\u0248\7o\2\2\u0248\u0249\3\2\2\2\u0249"+ - "\u024a\bA\4\2\u024a\u0083\3\2\2\2\u024b\u024c\7f\2\2\u024c\u024d\7g\2"+ - "\2\u024d\u024e\7h\2\2\u024e\u024f\7c\2\2\u024f\u0250\7w\2\2\u0250\u0251"+ - "\7n\2\2\u0251\u0252\7v\2\2\u0252\u0085\3\2\2\2\u0253\u0254\7e\2\2\u0254"+ - "\u0255\7c\2\2\u0255\u0256\7u\2\2\u0256\u0257\7g\2\2\u0257\u0087\3\2\2"+ - "\2\u0258\u0259\7u\2\2\u0259\u025a\7v\2\2\u025a\u025b\7t\2\2\u025b\u025c"+ - "\7w\2\2\u025c\u025d\7e\2\2\u025d\u025e\7v\2\2\u025e\u0089\3\2\2\2\u025f"+ - "\u0260\7g\2\2\u0260\u0261\7p\2\2\u0261\u0262\7w\2\2\u0262\u0263\7o\2\2"+ - "\u0263\u008b\3\2\2\2\u0264\u0265\7u\2\2\u0265\u0266\7k\2\2\u0266\u0267"+ - "\7|\2\2\u0267\u0268\7g\2\2\u0268\u0269\7q\2\2\u0269\u026a\7h\2\2\u026a"+ - "\u008d\3\2\2\2\u026b\u026c\7v\2\2\u026c\u026d\7{\2\2\u026d\u026e\7r\2"+ - "\2\u026e\u026f\7g\2\2\u026f\u0270\7k\2\2\u0270\u0271\7f\2\2\u0271\u008f"+ - "\3\2\2\2\u0272\u0273\7m\2\2\u0273\u0274\7k\2\2\u0274\u0275\7e\2\2\u0275"+ - "\u0276\7m\2\2\u0276\u0277\7c\2\2\u0277\u0278\7u\2\2\u0278\u0279\7o\2\2"+ - "\u0279\u0091\3\2\2\2\u027a\u027b\7t\2\2\u027b\u027c\7g\2\2\u027c\u027d"+ - "\7u\2\2\u027d\u027e\7q\2\2\u027e\u027f\7w\2\2\u027f\u0280\7t\2\2\u0280"+ - "\u0281\7e\2\2\u0281\u0282\7g\2\2\u0282\u0093\3\2\2\2\u0283\u0284\7w\2"+ - "\2\u0284\u0285\7u\2\2\u0285\u0286\7g\2\2\u0286\u0287\7u\2\2\u0287\u0095"+ - "\3\2\2\2\u0288\u0289\7e\2\2\u0289\u028a\7n\2\2\u028a\u028b\7q\2\2\u028b"+ - "\u028c\7d\2\2\u028c\u028d\7d\2\2\u028d\u028e\7g\2\2\u028e\u028f\7t\2\2"+ - "\u028f\u0290\7u\2\2\u0290\u0097\3\2\2\2\u0291\u0292\7d\2\2\u0292\u0293"+ - "\7{\2\2\u0293\u0294\7v\2\2\u0294\u0295\7g\2\2\u0295\u0296\7u\2\2\u0296"+ - "\u0099\3\2\2\2\u0297\u0298\7e\2\2\u0298\u0299\7{\2\2\u0299\u029a\7e\2"+ - "\2\u029a\u029b\7n\2\2\u029b\u029c\7g\2\2\u029c\u029d\7u\2\2\u029d\u009b"+ - "\3\2\2\2\u029e\u029f\7#\2\2\u029f\u009d\3\2\2\2\u02a0\u02a1\7u\2\2\u02a1"+ - "\u02a2\7k\2\2\u02a2\u02a3\7i\2\2\u02a3\u02a4\7p\2\2\u02a4\u02a5\7g\2\2"+ - "\u02a5\u02af\7f\2\2\u02a6\u02a7\7w\2\2\u02a7\u02a8\7p\2\2\u02a8\u02a9"+ - "\7u\2\2\u02a9\u02aa\7k\2\2\u02aa\u02ab\7i\2\2\u02ab\u02ac\7p\2\2\u02ac"+ - "\u02ad\7g\2\2\u02ad\u02af\7f\2\2\u02ae\u02a0\3\2\2\2\u02ae\u02a6\3\2\2"+ - "\2\u02af\u009f\3\2\2\2\u02b0\u02b1\7d\2\2\u02b1\u02b2\7{\2\2\u02b2\u02b3"+ - "\7v\2\2\u02b3\u02d6\7g\2\2\u02b4\u02b5\7y\2\2\u02b5\u02b6\7q\2\2\u02b6"+ - "\u02b7\7t\2\2\u02b7\u02d6\7f\2\2\u02b8\u02b9\7f\2\2\u02b9\u02ba\7y\2\2"+ - "\u02ba\u02bb\7q\2\2\u02bb\u02bc\7t\2\2\u02bc\u02d6\7f\2\2\u02bd\u02be"+ - "\7d\2\2\u02be\u02bf\7q\2\2\u02bf\u02c0\7q\2\2\u02c0\u02d6\7n\2\2\u02c1"+ - "\u02c2\7e\2\2\u02c2\u02c3\7j\2\2\u02c3\u02c4\7c\2\2\u02c4\u02d6\7t\2\2"+ - "\u02c5\u02c6\7u\2\2\u02c6\u02c7\7j\2\2\u02c7\u02c8\7q\2\2\u02c8\u02c9"+ - "\7t\2\2\u02c9\u02d6\7v\2\2\u02ca\u02cb\7k\2\2\u02cb\u02cc\7p\2\2\u02cc"+ - "\u02d6\7v\2\2\u02cd\u02ce\7n\2\2\u02ce\u02cf\7q\2\2\u02cf\u02d0\7p\2\2"+ - "\u02d0\u02d6\7i\2\2\u02d1\u02d2\7x\2\2\u02d2\u02d3\7q\2\2\u02d3\u02d4"+ - "\7k\2\2\u02d4\u02d6\7f\2\2\u02d5\u02b0\3\2\2\2\u02d5\u02b4\3\2\2\2\u02d5"+ - "\u02b8\3\2\2\2\u02d5\u02bd\3\2\2\2\u02d5\u02c1\3\2\2\2\u02d5\u02c5\3\2"+ - "\2\2\u02d5\u02ca\3\2\2\2\u02d5\u02cd\3\2\2\2\u02d5\u02d1\3\2\2\2\u02d6"+ - "\u00a1\3\2\2\2\u02d7\u02d8\7v\2\2\u02d8\u02d9\7t\2\2\u02d9\u02da\7w\2"+ - "\2\u02da\u02e1\7g\2\2\u02db\u02dc\7h\2\2\u02dc\u02dd\7c\2\2\u02dd\u02de"+ - "\7n\2\2\u02de\u02df\7u\2\2\u02df\u02e1\7g\2\2\u02e0\u02d7\3\2\2\2\u02e0"+ - "\u02db\3\2\2\2\u02e1\u00a3\3\2\2\2\u02e2\u02e3\7}\2\2\u02e3\u02e4\7}\2"+ - "\2\u02e4\u02e8\3\2\2\2\u02e5\u02e7\13\2\2\2\u02e6\u02e5\3\2\2\2\u02e7"+ - "\u02ea\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e8\u02e6\3\2\2\2\u02e9\u02eb\3\2"+ - "\2\2\u02ea\u02e8\3\2\2\2\u02eb\u02ec\7\177\2\2\u02ec\u02ed\7\177\2\2\u02ed"+ - "\u00a5\3\2\2\2\u02ee\u02f4\7$\2\2\u02ef\u02f0\7^\2\2\u02f0\u02f3\7$\2"+ - "\2\u02f1\u02f3\n\2\2\2\u02f2\u02ef\3\2\2\2\u02f2\u02f1\3\2\2\2\u02f3\u02f6"+ - "\3\2\2\2\u02f4\u02f2\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5\u02f7\3\2\2\2\u02f6"+ - "\u02f4\3\2\2\2\u02f7\u02f9\7$\2\2\u02f8\u02fa\t\3\2\2\u02f9\u02f8\3\2"+ - "\2\2\u02f9\u02fa\3\2\2\2\u02fa\u02ff\3\2\2\2\u02fb\u02fd\t\4\2\2\u02fc"+ - "\u02fe\t\5\2\2\u02fd\u02fc\3\2\2\2\u02fd\u02fe\3\2\2\2\u02fe\u0300\3\2"+ - "\2\2\u02ff\u02fb\3\2\2\2\u02ff\u0300\3\2\2\2\u0300\u0302\3\2\2\2\u0301"+ - "\u0303\t\3\2\2\u0302\u0301\3\2\2\2\u0302\u0303\3\2\2\2\u0303\u0304\3\2"+ - "\2\2\u0304\u0305\bS\5\2\u0305\u00a7\3\2\2\2\u0306\u030a\7)\2\2\u0307\u0308"+ - "\7^\2\2\u0308\u030b\t\6\2\2\u0309\u030b\n\7\2\2\u030a\u0307\3\2\2\2\u030a"+ - "\u0309\3\2\2\2\u030b\u030c\3\2\2\2\u030c\u030d\7)\2\2\u030d\u00a9\3\2"+ - "\2\2\u030e\u0311\5\u00acV\2\u030f\u0311\5\u00b4Z\2\u0310\u030e\3\2\2\2"+ - "\u0310\u030f\3\2\2\2\u0311\u00ab\3\2\2\2\u0312\u0316\5\u00aeW\2\u0313"+ - "\u0316\5\u00b0X\2\u0314\u0316\5\u00b2Y\2\u0315\u0312\3\2\2\2\u0315\u0313"+ - "\3\2\2\2\u0315\u0314\3\2\2\2\u0316\u00ad\3\2\2\2\u0317\u031d\7\'\2\2\u0318"+ - "\u0319\7\62\2\2\u0319\u031d\7d\2\2\u031a\u031b\7\62\2\2\u031b\u031d\7"+ - "D\2\2\u031c\u0317\3\2\2\2\u031c\u0318\3\2\2\2\u031c\u031a\3\2\2\2\u031d"+ - "\u0321\3\2\2\2\u031e\u0320\5\u00bc^\2\u031f\u031e\3\2\2\2\u0320\u0323"+ - "\3\2\2\2\u0321\u031f\3\2\2\2\u0321\u0322\3\2\2\2\u0322\u0324\3\2\2\2\u0323"+ - "\u0321\3\2\2\2\u0324\u0326\7\60\2\2\u0325\u0327\5\u00bc^\2\u0326\u0325"+ - "\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u0326\3\2\2\2\u0328\u0329\3\2\2\2\u0329"+ - "\u00af\3\2\2\2\u032a\u032c\5\u00be_\2\u032b\u032a\3\2\2\2\u032c\u032f"+ - "\3\2\2\2\u032d\u032b\3\2\2\2\u032d\u032e\3\2\2\2\u032e\u0330\3\2\2\2\u032f"+ - "\u032d\3\2\2\2\u0330\u0332\7\60\2\2\u0331\u0333\5\u00be_\2\u0332\u0331"+ - "\3\2\2\2\u0333\u0334\3\2\2\2\u0334\u0332\3\2\2\2\u0334\u0335\3\2\2\2\u0335"+ - "\u00b1\3\2\2\2\u0336\u033c\7&\2\2\u0337\u0338\7\62\2\2\u0338\u033c\7z"+ - "\2\2\u0339\u033a\7\62\2\2\u033a\u033c\7Z\2\2\u033b\u0336\3\2\2\2\u033b"+ - "\u0337\3\2\2\2\u033b\u0339\3\2\2\2\u033c\u0340\3\2\2\2\u033d\u033f\5\u00c0"+ - "`\2\u033e\u033d\3\2\2\2\u033f\u0342\3\2\2\2\u0340\u033e\3\2\2\2\u0340"+ - "\u0341\3\2\2\2\u0341\u0343\3\2\2\2\u0342\u0340\3\2\2\2\u0343\u0345\7\60"+ - "\2\2\u0344\u0346\5\u00c0`\2\u0345\u0344\3\2\2\2\u0346\u0347\3\2\2\2\u0347"+ - "\u0345\3\2\2\2\u0347\u0348\3\2\2\2\u0348\u00b3\3\2\2\2\u0349\u034d\5\u00b8"+ - "\\\2\u034a\u034d\5\u00ba]\2\u034b\u034d\5\u00b6[\2\u034c\u0349\3\2\2\2"+ - "\u034c\u034a\3\2\2\2\u034c\u034b\3\2\2\2\u034d\u0351\3\2\2\2\u034e\u034f"+ - "\t\b\2\2\u034f\u0352\t\t\2\2\u0350\u0352\7n\2\2\u0351\u034e\3\2\2\2\u0351"+ - "\u0350\3\2\2\2\u0351\u0352\3\2\2\2\u0352\u00b5\3\2\2\2\u0353\u0354\7\62"+ - "\2\2\u0354\u0356\t\n\2\2\u0355\u0357\5\u00bc^\2\u0356\u0355\3\2\2\2\u0357"+ - "\u0358\3\2\2\2\u0358\u0356\3\2\2\2\u0358\u0359\3\2\2\2\u0359\u0361\3\2"+ - "\2\2\u035a\u035c\7\'\2\2\u035b\u035d\5\u00bc^\2\u035c\u035b\3\2\2\2\u035d"+ - "\u035e\3\2\2\2\u035e\u035c\3\2\2\2\u035e\u035f\3\2\2\2\u035f\u0361\3\2"+ - "\2\2\u0360\u0353\3\2\2\2\u0360\u035a\3\2\2\2\u0361\u00b7\3\2\2\2\u0362"+ - "\u0364\5\u00be_\2\u0363\u0362\3\2\2\2\u0364\u0365\3\2\2\2\u0365\u0363"+ - "\3\2\2\2\u0365\u0366\3\2\2\2\u0366\u00b9\3\2\2\2\u0367\u036d\7&\2\2\u0368"+ - "\u0369\7\62\2\2\u0369\u036d\7z\2\2\u036a\u036b\7\62\2\2\u036b\u036d\7"+ - "Z\2\2\u036c\u0367\3\2\2\2\u036c\u0368\3\2\2\2\u036c\u036a\3\2\2\2\u036d"+ - "\u036f\3\2\2\2\u036e\u0370\5\u00c0`\2\u036f\u036e\3\2\2\2\u0370\u0371"+ - "\3\2\2\2\u0371\u036f\3\2\2\2\u0371\u0372\3\2\2\2\u0372\u00bb\3\2\2\2\u0373"+ - "\u0374\t\13\2\2\u0374\u00bd\3\2\2\2\u0375\u0376\t\f\2\2\u0376\u00bf\3"+ - "\2\2\2\u0377\u0378\t\r\2\2\u0378\u00c1\3\2\2\2\u0379\u037d\5\u00c4b\2"+ - "\u037a\u037c\5\u00c6c\2\u037b\u037a\3\2\2\2\u037c\u037f\3\2\2\2\u037d"+ - "\u037b\3\2\2\2\u037d\u037e\3\2\2\2\u037e\u0380\3\2\2\2\u037f\u037d\3\2"+ - "\2\2\u0380\u0381\ba\6\2\u0381\u00c3\3\2\2\2\u0382\u0383\t\16\2\2\u0383"+ - "\u00c5\3\2\2\2\u0384\u0385\t\17\2\2\u0385\u00c7\3\2\2\2\u0386\u0388\t"+ - "\20\2\2\u0387\u0386\3\2\2\2\u0388\u0389\3\2\2\2\u0389\u0387\3\2\2\2\u0389"+ - "\u038a\3\2\2\2\u038a\u038b\3\2\2\2\u038b\u038c\bd\7\2\u038c\u00c9\3\2"+ - "\2\2\u038d\u038e\7\61\2\2\u038e\u038f\7\61\2\2\u038f\u0393\3\2\2\2\u0390"+ - "\u0392\n\21\2\2\u0391\u0390\3\2\2\2\u0392\u0395\3\2\2\2\u0393\u0391\3"+ - "\2\2\2\u0393\u0394\3\2\2\2\u0394\u0396\3\2\2\2\u0395\u0393\3\2\2\2\u0396"+ - "\u0397\be\b\2\u0397\u00cb\3\2\2\2\u0398\u0399\7\61\2\2\u0399\u039a\7,"+ - "\2\2\u039a\u039e\3\2\2\2\u039b\u039d\13\2\2\2\u039c\u039b\3\2\2\2\u039d"+ - "\u03a0\3\2\2\2\u039e\u039f\3\2\2\2\u039e\u039c\3\2\2\2\u039f\u03a1\3\2"+ - "\2\2\u03a0\u039e\3\2\2\2\u03a1\u03a2\7,\2\2\u03a2\u03a3\7\61\2\2\u03a3"+ - "\u03a4\3\2\2\2\u03a4\u03a5\bf\b\2\u03a5\u00cd\3\2\2\2\u03a6\u03a7\7\60"+ - "\2\2\u03a7\u03a8\7d\2\2\u03a8\u03a9\7{\2\2\u03a9\u03aa\7v\2\2\u03aa\u03ab"+ - "\7g\2\2\u03ab\u00cf\3\2\2\2\u03ac\u03ad\7d\2\2\u03ad\u03ae\7t\2\2\u03ae"+ - "\u048b\7m\2\2\u03af\u03b0\7q\2\2\u03b0\u03b1\7t\2\2\u03b1\u048b\7c\2\2"+ - "\u03b2\u03b3\7m\2\2\u03b3\u03b4\7k\2\2\u03b4\u048b\7n\2\2\u03b5\u03b6"+ - "\7u\2\2\u03b6\u03b7\7n\2\2\u03b7\u048b\7q\2\2\u03b8\u03b9\7p\2\2\u03b9"+ - "\u03ba\7q\2\2\u03ba\u048b\7r\2\2\u03bb\u03bc\7c\2\2\u03bc\u03bd\7u\2\2"+ - "\u03bd\u048b\7n\2\2\u03be\u03bf\7r\2\2\u03bf\u03c0\7j\2\2\u03c0\u048b"+ - "\7r\2\2\u03c1\u03c2\7c\2\2\u03c2\u03c3\7p\2\2\u03c3\u048b\7e\2\2\u03c4"+ - "\u03c5\7d\2\2\u03c5\u03c6\7r\2\2\u03c6\u048b\7n\2\2\u03c7\u03c8\7e\2\2"+ - "\u03c8\u03c9\7n\2\2\u03c9\u048b\7e\2\2\u03ca\u03cb\7l\2\2\u03cb\u03cc"+ - "\7u\2\2\u03cc\u048b\7t\2\2\u03cd\u03ce\7c\2\2\u03ce\u03cf\7p\2\2\u03cf"+ - "\u048b\7f\2\2\u03d0\u03d1\7t\2\2\u03d1\u03d2\7n\2\2\u03d2\u048b\7c\2\2"+ - "\u03d3\u03d4\7d\2\2\u03d4\u03d5\7k\2\2\u03d5\u048b\7v\2\2\u03d6\u03d7"+ - "\7t\2\2\u03d7\u03d8\7q\2\2\u03d8\u048b\7n\2\2\u03d9\u03da\7r\2\2\u03da"+ - "\u03db\7n\2\2\u03db\u048b\7c\2\2\u03dc\u03dd\7r\2\2\u03dd\u03de\7n\2\2"+ - "\u03de\u048b\7r\2\2\u03df\u03e0\7d\2\2\u03e0\u03e1\7o\2\2\u03e1\u048b"+ - "\7k\2\2\u03e2\u03e3\7u\2\2\u03e3\u03e4\7g\2\2\u03e4\u048b\7e\2\2\u03e5"+ - "\u03e6\7t\2\2\u03e6\u03e7\7v\2\2\u03e7\u048b\7k\2\2\u03e8\u03e9\7g\2\2"+ - "\u03e9\u03ea\7q\2\2\u03ea\u048b\7t\2\2\u03eb\u03ec\7u\2\2\u03ec\u03ed"+ - "\7t\2\2\u03ed\u048b\7g\2\2\u03ee\u03ef\7n\2\2\u03ef\u03f0\7u\2\2\u03f0"+ - "\u048b\7t\2\2\u03f1\u03f2\7r\2\2\u03f2\u03f3\7j\2\2\u03f3\u048b\7c\2\2"+ - "\u03f4\u03f5\7c\2\2\u03f5\u03f6\7n\2\2\u03f6\u048b\7t\2\2\u03f7\u03f8"+ - "\7l\2\2\u03f8\u03f9\7o\2\2\u03f9\u048b\7r\2\2\u03fa\u03fb\7d\2\2\u03fb"+ - "\u03fc\7x\2\2\u03fc\u048b\7e\2\2\u03fd\u03fe\7e\2\2\u03fe\u03ff\7n\2\2"+ - "\u03ff\u048b\7k\2\2\u0400\u0401\7t\2\2\u0401\u0402\7v\2\2\u0402\u048b"+ - "\7u\2\2\u0403\u0404\7c\2\2\u0404\u0405\7f\2\2\u0405\u048b\7e\2\2\u0406"+ - "\u0407\7t\2\2\u0407\u0408\7t\2\2\u0408\u048b\7c\2\2\u0409\u040a\7d\2\2"+ - "\u040a\u040b\7x\2\2\u040b\u048b\7u\2\2\u040c\u040d\7u\2\2\u040d\u040e"+ - "\7g\2\2\u040e\u048b\7k\2\2\u040f\u0410\7u\2\2\u0410\u0411\7c\2\2\u0411"+ - "\u048b\7z\2\2\u0412\u0413\7u\2\2\u0413\u0414\7v\2\2\u0414\u048b\7{\2\2"+ - "\u0415\u0416\7u\2\2\u0416\u0417\7v\2\2\u0417\u048b\7c\2\2\u0418\u0419"+ - "\7u\2\2\u0419\u041a\7v\2\2\u041a\u048b\7z\2\2\u041b\u041c\7f\2\2\u041c"+ - "\u041d\7g\2\2\u041d\u048b\7{\2\2\u041e\u041f\7v\2\2\u041f\u0420\7z\2\2"+ - "\u0420\u048b\7c\2\2\u0421\u0422\7z\2\2\u0422\u0423\7c\2\2\u0423\u048b"+ - "\7c\2\2\u0424\u0425\7d\2\2\u0425\u0426\7e\2\2\u0426\u048b\7e\2\2\u0427"+ - "\u0428\7c\2\2\u0428\u0429\7j\2\2\u0429\u048b\7z\2\2\u042a\u042b\7v\2\2"+ - "\u042b\u042c\7{\2\2\u042c\u048b\7c\2\2\u042d\u042e\7v\2\2\u042e\u042f"+ - "\7z\2\2\u042f\u048b\7u\2\2\u0430\u0431\7v\2\2\u0431\u0432\7c\2\2\u0432"+ - "\u048b\7u\2\2\u0433\u0434\7u\2\2\u0434\u0435\7j\2\2\u0435\u048b\7{\2\2"+ - "\u0436\u0437\7u\2\2\u0437\u0438\7j\2\2\u0438\u048b\7z\2\2\u0439\u043a"+ - "\7n\2\2\u043a\u043b\7f\2\2\u043b\u048b\7{\2\2\u043c\u043d\7n\2\2\u043d"+ - "\u043e\7f\2\2\u043e\u048b\7c\2\2\u043f\u0440\7n\2\2\u0440\u0441\7f\2\2"+ - "\u0441\u048b\7z\2\2\u0442\u0443\7n\2\2\u0443\u0444\7c\2\2\u0444\u048b"+ - "\7z\2\2\u0445\u0446\7v\2\2\u0446\u0447\7c\2\2\u0447\u048b\7{\2\2\u0448"+ - "\u0449\7v\2\2\u0449\u044a\7c\2\2\u044a\u048b\7z\2\2\u044b\u044c\7d\2\2"+ - "\u044c\u044d\7e\2\2\u044d\u048b\7u\2\2\u044e\u044f\7e\2\2\u044f\u0450"+ - "\7n\2\2\u0450\u048b\7x\2\2\u0451\u0452\7v\2\2\u0452\u0453\7u\2\2\u0453"+ - "\u048b\7z\2\2\u0454\u0455\7n\2\2\u0455\u0456\7c\2\2\u0456\u048b\7u\2\2"+ - "\u0457\u0458\7e\2\2\u0458\u0459\7r\2\2\u0459\u048b\7{\2\2\u045a\u045b"+ - "\7e\2\2\u045b\u045c\7o\2\2\u045c\u048b\7r\2\2\u045d\u045e\7e\2\2\u045e"+ - "\u045f\7r\2\2\u045f\u048b\7z\2\2\u0460\u0461\7f\2\2\u0461\u0462\7e\2\2"+ - "\u0462\u048b\7r\2\2\u0463\u0464\7f\2\2\u0464\u0465\7g\2\2\u0465\u048b"+ - "\7e\2\2\u0466\u0467\7k\2\2\u0467\u0468\7p\2\2\u0468\u048b\7e\2\2\u0469"+ - "\u046a\7c\2\2\u046a\u046b\7z\2\2\u046b\u048b\7u\2\2\u046c\u046d\7d\2\2"+ - "\u046d\u046e\7p\2\2\u046e\u048b\7g\2\2\u046f\u0470\7e\2\2\u0470\u0471"+ - "\7n\2\2\u0471\u048b\7f\2\2\u0472\u0473\7u\2\2\u0473\u0474\7d\2\2\u0474"+ - "\u048b\7e\2\2\u0475\u0476\7k\2\2\u0476\u0477\7u\2\2\u0477\u048b\7e\2\2"+ - "\u0478\u0479\7k\2\2\u0479\u047a\7p\2\2\u047a\u048b\7z\2\2\u047b\u047c"+ - "\7d\2\2\u047c\u047d\7g\2\2\u047d\u048b\7s\2\2\u047e\u047f\7u\2\2\u047f"+ - "\u0480\7g\2\2\u0480\u048b\7f\2\2\u0481\u0482\7f\2\2\u0482\u0483\7g\2\2"+ - "\u0483\u048b\7z\2\2\u0484\u0485\7k\2\2\u0485\u0486\7p\2\2\u0486\u048b"+ - "\7{\2\2\u0487\u0488\7t\2\2\u0488\u0489\7q\2\2\u0489\u048b\7t\2\2\u048a"+ - "\u03ac\3\2\2\2\u048a\u03af\3\2\2\2\u048a\u03b2\3\2\2\2\u048a\u03b5\3\2"+ - "\2\2\u048a\u03b8\3\2\2\2\u048a\u03bb\3\2\2\2\u048a\u03be\3\2\2\2\u048a"+ - "\u03c1\3\2\2\2\u048a\u03c4\3\2\2\2\u048a\u03c7\3\2\2\2\u048a\u03ca\3\2"+ - "\2\2\u048a\u03cd\3\2\2\2\u048a\u03d0\3\2\2\2\u048a\u03d3\3\2\2\2\u048a"+ - "\u03d6\3\2\2\2\u048a\u03d9\3\2\2\2\u048a\u03dc\3\2\2\2\u048a\u03df\3\2"+ - "\2\2\u048a\u03e2\3\2\2\2\u048a\u03e5\3\2\2\2\u048a\u03e8\3\2\2\2\u048a"+ - "\u03eb\3\2\2\2\u048a\u03ee\3\2\2\2\u048a\u03f1\3\2\2\2\u048a\u03f4\3\2"+ - "\2\2\u048a\u03f7\3\2\2\2\u048a\u03fa\3\2\2\2\u048a\u03fd\3\2\2\2\u048a"+ - "\u0400\3\2\2\2\u048a\u0403\3\2\2\2\u048a\u0406\3\2\2\2\u048a\u0409\3\2"+ - "\2\2\u048a\u040c\3\2\2\2\u048a\u040f\3\2\2\2\u048a\u0412\3\2\2\2\u048a"+ - "\u0415\3\2\2\2\u048a\u0418\3\2\2\2\u048a\u041b\3\2\2\2\u048a\u041e\3\2"+ - "\2\2\u048a\u0421\3\2\2\2\u048a\u0424\3\2\2\2\u048a\u0427\3\2\2\2\u048a"+ - "\u042a\3\2\2\2\u048a\u042d\3\2\2\2\u048a\u0430\3\2\2\2\u048a\u0433\3\2"+ - "\2\2\u048a\u0436\3\2\2\2\u048a\u0439\3\2\2\2\u048a\u043c\3\2\2\2\u048a"+ - "\u043f\3\2\2\2\u048a\u0442\3\2\2\2\u048a\u0445\3\2\2\2\u048a\u0448\3\2"+ - "\2\2\u048a\u044b\3\2\2\2\u048a\u044e\3\2\2\2\u048a\u0451\3\2\2\2\u048a"+ - "\u0454\3\2\2\2\u048a\u0457\3\2\2\2\u048a\u045a\3\2\2\2\u048a\u045d\3\2"+ - "\2\2\u048a\u0460\3\2\2\2\u048a\u0463\3\2\2\2\u048a\u0466\3\2\2\2\u048a"+ - "\u0469\3\2\2\2\u048a\u046c\3\2\2\2\u048a\u046f\3\2\2\2\u048a\u0472\3\2"+ - "\2\2\u048a\u0475\3\2\2\2\u048a\u0478\3\2\2\2\u048a\u047b\3\2\2\2\u048a"+ - "\u047e\3\2\2\2\u048a\u0481\3\2\2\2\u048a\u0484\3\2\2\2\u048a\u0487\3\2"+ - "\2\2\u048b\u00d1\3\2\2\2\u048c\u048d\7%\2\2\u048d\u00d3\3\2\2\2\u048e"+ - "\u048f\7<\2\2\u048f\u00d5\3\2\2\2\u0490\u0491\7.\2\2\u0491\u00d7\3\2\2"+ - "\2\u0492\u0493\7*\2\2\u0493\u00d9\3\2\2\2\u0494\u0495\7+\2\2\u0495\u00db"+ - "\3\2\2\2\u0496\u0497\7]\2\2\u0497\u00dd\3\2\2\2\u0498\u0499\7_\2\2\u0499"+ - "\u00df\3\2\2\2\u049a\u049b\7\60\2\2\u049b\u00e1\3\2\2\2\u049c\u049d\7"+ - ">\2\2\u049d\u049e\7>\2\2\u049e\u00e3\3\2\2\2\u049f\u04a0\7@\2\2\u04a0"+ - "\u04a1\7@\2\2\u04a1\u00e5\3\2\2\2\u04a2\u04a3\7-\2\2\u04a3\u00e7\3\2\2"+ - "\2\u04a4\u04a5\7/\2\2\u04a5\u00e9\3\2\2\2\u04a6\u04a7\7>\2\2\u04a7\u00eb"+ - "\3\2\2\2\u04a8\u04a9\7@\2\2\u04a9\u00ed\3\2\2\2\u04aa\u04ab\7,\2\2\u04ab"+ - "\u00ef\3\2\2\2\u04ac\u04ad\7\61\2\2\u04ad\u00f1\3\2\2\2\u04ae\u04af\7"+ - "}\2\2\u04af\u04b0\by\t\2\u04b0\u00f3\3\2\2\2\u04b1\u04b2\7\177\2\2\u04b2"+ - "\u04b3\bz\n\2\u04b3\u00f5\3\2\2\2\u04b4\u04b7\5\u00f8|\2\u04b5\u04b7\5"+ - "\u0100\u0080\2\u04b6\u04b4\3\2\2\2\u04b6\u04b5\3\2\2\2\u04b7\u00f7\3\2"+ - "\2\2\u04b8\u04bc\5\u00fa}\2\u04b9\u04bc\5\u00fc~\2\u04ba\u04bc\5\u00fe"+ - "\177\2\u04bb\u04b8\3\2\2\2\u04bb\u04b9\3\2\2\2\u04bb\u04ba\3\2\2\2\u04bc"+ - "\u00f9\3\2\2\2\u04bd\u04c1\7\'\2\2\u04be\u04c0\5\u0108\u0084\2\u04bf\u04be"+ - "\3\2\2\2\u04c0\u04c3\3\2\2\2\u04c1\u04bf\3\2\2\2\u04c1\u04c2\3\2\2\2\u04c2"+ - "\u04c4\3\2\2\2\u04c3\u04c1\3\2\2\2\u04c4\u04c6\7\60\2\2\u04c5\u04c7\5"+ - "\u0108\u0084\2\u04c6\u04c5\3\2\2\2\u04c7\u04c8\3\2\2\2\u04c8\u04c6\3\2"+ - "\2\2\u04c8\u04c9\3\2\2\2\u04c9\u00fb\3\2\2\2\u04ca\u04cc\5\u010a\u0085"+ - "\2\u04cb\u04ca\3\2\2\2\u04cc\u04cf\3\2\2\2\u04cd\u04cb\3\2\2\2\u04cd\u04ce"+ - "\3\2\2\2\u04ce\u04d0\3\2\2\2\u04cf\u04cd\3\2\2\2\u04d0\u04d2\7\60\2\2"+ - "\u04d1\u04d3\5\u010a\u0085\2\u04d2\u04d1\3\2\2\2\u04d3\u04d4\3\2\2\2\u04d4"+ - "\u04d2\3\2\2\2\u04d4\u04d5\3\2\2\2\u04d5\u00fd\3\2\2\2\u04d6\u04da\7&"+ - "\2\2\u04d7\u04d9\5\u010c\u0086\2\u04d8\u04d7\3\2\2\2\u04d9\u04dc\3\2\2"+ - "\2\u04da\u04d8\3\2\2\2\u04da\u04db\3\2\2\2\u04db\u04dd\3\2\2\2\u04dc\u04da"+ - "\3\2\2\2\u04dd\u04df\7\60\2\2\u04de\u04e0\5\u010c\u0086\2\u04df\u04de"+ - "\3\2\2\2\u04e0\u04e1\3\2\2\2\u04e1\u04df\3\2\2\2\u04e1\u04e2\3\2\2\2\u04e2"+ - "\u00ff\3\2\2\2\u04e3\u04e7\5\u0104\u0082\2\u04e4\u04e7\5\u0106\u0083\2"+ - "\u04e5\u04e7\5\u0102\u0081\2\u04e6\u04e3\3\2\2\2\u04e6\u04e4\3\2\2\2\u04e6"+ - "\u04e5\3\2\2\2\u04e7\u0101\3\2\2\2\u04e8\u04ea\7\'\2\2\u04e9\u04eb\5\u0108"+ - "\u0084\2\u04ea\u04e9\3\2\2\2\u04eb\u04ec\3\2\2\2\u04ec\u04ea\3\2\2\2\u04ec"+ - "\u04ed\3\2\2\2\u04ed\u0103\3\2\2\2\u04ee\u04f0\5\u010a\u0085\2\u04ef\u04ee"+ - "\3\2\2\2\u04f0\u04f1\3\2\2\2\u04f1\u04ef\3\2\2\2\u04f1\u04f2\3\2\2\2\u04f2"+ - "\u0105\3\2\2\2\u04f3\u04f5\7&\2\2\u04f4\u04f6\5\u010c\u0086\2\u04f5\u04f4"+ + "\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\3\2\3\2\3\2\3\3\3\3\3"+ + "\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13"+ + "\3\f\3\f\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22"+ + "\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30"+ + "\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\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"+ + "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u018c"+ + "\n%\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.\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\60\3\60\3\60\3\61\3\61\3"+ + "\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3"+ + "\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3"+ + "\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3"+ + "\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\38\39\39"+ + "\39\3:\3:\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>"+ + "\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A"+ + "\3A\3A\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E"+ + "\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H"+ + "\3H\3I\3I\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K"+ + "\3L\3L\3L\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3N\3N\3O"+ + "\3O\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\5P\u02b5\nP\3Q\3Q\3Q\3Q"+ + "\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q"+ + "\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\5Q\u02dc\nQ\3R\3R\3R\3R\3R\3R\3R\3R\3R"+ + "\5R\u02e7\nR\3S\3S\3S\3S\7S\u02ed\nS\fS\16S\u02f0\13S\3S\3S\3S\3T\3T\3"+ + "T\3T\7T\u02f9\nT\fT\16T\u02fc\13T\3T\3T\5T\u0300\nT\3T\3T\5T\u0304\nT"+ + "\5T\u0306\nT\3T\5T\u0309\nT\3T\3T\3U\3U\3U\3U\5U\u0311\nU\3U\3U\3V\3V"+ + "\5V\u0317\nV\3W\3W\3W\5W\u031c\nW\3X\3X\3X\3X\3X\5X\u0323\nX\3X\7X\u0326"+ + "\nX\fX\16X\u0329\13X\3X\3X\6X\u032d\nX\rX\16X\u032e\3Y\7Y\u0332\nY\fY"+ + "\16Y\u0335\13Y\3Y\3Y\6Y\u0339\nY\rY\16Y\u033a\3Z\3Z\3Z\3Z\3Z\5Z\u0342"+ + "\nZ\3Z\7Z\u0345\nZ\fZ\16Z\u0348\13Z\3Z\3Z\6Z\u034c\nZ\rZ\16Z\u034d\3["+ + "\3[\3[\5[\u0353\n[\3[\3[\3[\5[\u0358\n[\3\\\3\\\3\\\6\\\u035d\n\\\r\\"+ + "\16\\\u035e\3\\\3\\\6\\\u0363\n\\\r\\\16\\\u0364\5\\\u0367\n\\\3]\6]\u036a"+ + "\n]\r]\16]\u036b\3^\3^\3^\3^\3^\5^\u0373\n^\3^\6^\u0376\n^\r^\16^\u0377"+ + "\3_\3_\3`\3`\3a\3a\3b\3b\7b\u0382\nb\fb\16b\u0385\13b\3b\3b\3c\3c\3d\3"+ + "d\3e\6e\u038e\ne\re\16e\u038f\3e\3e\3f\3f\3f\3f\7f\u0398\nf\ff\16f\u039b"+ + "\13f\3f\3f\3g\3g\3g\3g\7g\u03a3\ng\fg\16g\u03a6\13g\3g\3g\3g\3g\3g\3h"+ + "\3h\3h\3h\3h\3h\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+ + "\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\5i\u0491"+ + "\ni\3j\3j\3k\3k\3l\3l\3m\3m\3n\3n\3o\3o\3p\3p\3q\3q\3r\3r\3r\3s\3s\3s"+ + "\3t\3t\3u\3u\3v\3v\3w\3w\3x\3x\3y\3y\3z\3z\3z\3{\3{\3{\3|\3|\5|\u04bd"+ + "\n|\3}\3}\3}\5}\u04c2\n}\3~\3~\7~\u04c6\n~\f~\16~\u04c9\13~\3~\3~\6~\u04cd"+ + "\n~\r~\16~\u04ce\3\177\7\177\u04d2\n\177\f\177\16\177\u04d5\13\177\3\177"+ + "\3\177\6\177\u04d9\n\177\r\177\16\177\u04da\3\u0080\3\u0080\7\u0080\u04df"+ + "\n\u0080\f\u0080\16\u0080\u04e2\13\u0080\3\u0080\3\u0080\6\u0080\u04e6"+ + "\n\u0080\r\u0080\16\u0080\u04e7\3\u0081\3\u0081\3\u0081\5\u0081\u04ed"+ + "\n\u0081\3\u0082\3\u0082\6\u0082\u04f1\n\u0082\r\u0082\16\u0082\u04f2"+ + "\3\u0083\6\u0083\u04f6\n\u0083\r\u0083\16\u0083\u04f7\3\u0084\3\u0084"+ + "\6\u0084\u04fc\n\u0084\r\u0084\16\u0084\u04fd\3\u0085\3\u0085\3\u0086"+ + "\3\u0086\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088\5\u0088\u050a"+ + "\n\u0088\3\u0088\3\u0088\3\u0089\3\u0089\6\u0089\u0510\n\u0089\r\u0089"+ + "\16\u0089\u0511\3\u008a\3\u008a\7\u008a\u0516\n\u008a\f\u008a\16\u008a"+ + "\u0519\13\u008a\3\u008b\3\u008b\7\u008b\u051d\n\u008b\f\u008b\16\u008b"+ + "\u0520\13\u008b\3\u008c\3\u008c\3\u008d\3\u008d\3\u008e\6\u008e\u0527"+ + "\n\u008e\r\u008e\16\u008e\u0528\3\u008e\3\u008e\3\u008f\3\u008f\3\u008f"+ + "\3\u008f\7\u008f\u0531\n\u008f\f\u008f\16\u008f\u0534\13\u008f\3\u008f"+ + "\3\u008f\3\u0090\3\u0090\3\u0090\3\u0090\7\u0090\u053c\n\u0090\f\u0090"+ + "\16\u0090\u053f\13\u0090\3\u0090\3\u0090\3\u0090\3\u0090\3\u0090\5\u02ee"+ + "\u03a4\u053d\2\u0091\4\4\6\5\b\6\n\7\f\b\16\t\20\n\22\13\24\f\26\r\30"+ + "\16\32\17\34\20\36\21 \22\"\23$\24&\25(\26*\27,\30.\31\60\32\62\33\64"+ + "\34\66\358\36:\37< >!@\"B#D$F%H&J\'L(N)P*R+T,V-X.Z/\\\60^\61`\62b\63d"+ + "\64f\65h\66j\67l8n9p:r;tz?|@~A\u0080B\u0082C\u0084D\u0086E\u0088"+ + "F\u008aG\u008cH\u008eI\u0090J\u0092K\u0094L\u0096M\u0098N\u009aO\u009c"+ + "P\u009eQ\u00a0R\u00a2S\u00a4T\u00a6U\u00a8V\u00aaW\u00acX\u00aeY\u00b0"+ + "Z\u00b2[\u00b4\\\u00b6]\u00b8^\u00ba_\u00bc`\u00be\2\u00c0\2\u00c2\2\u00c4"+ + "a\u00c6\2\u00c8\2\u00cab\u00ccc\u00ced\u00d0e\u00d2f\u00d4g\u00d6h\u00d8"+ + "i\u00daj\u00dck\u00del\u00e0m\u00e2n\u00e4o\u00e6p\u00e8q\u00ear\u00ec"+ + "s\u00eet\u00f0u\u00f2v\u00f4w\u00f6x\u00f8y\u00faz\u00fc{\u00fe|\u0100"+ + "}\u0102~\u0104\177\u0106\u0080\u0108\u0081\u010a\2\u010c\2\u010e\2\u0110"+ + "\u0082\u0112\u0083\u0114\u0084\u0116\u0085\u0118\2\u011a\2\u011c\u0086"+ + "\u011e\u0087\u0120\u0088\4\2\3\23\3\2$$\3\2||\4\2rruu\4\2ooww\7\2$$))"+ + "hhpptt\3\2))\4\2uuww\7\2dfkknnuuyy\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;C"+ + "Hch\5\2C\\aac|\6\2\62;C\\aac|\6\2\13\f\17\17\"\"\u00a2\u00a2\4\2\f\f\17"+ + "\17\4\2--//\2\u05ce\2\4\3\2\2\2\2\6\3\2\2\2\2\b\3\2\2\2\2\n\3\2\2\2\2"+ + "\f\3\2\2\2\2\16\3\2\2\2\2\20\3\2\2\2\2\22\3\2\2\2\2\24\3\2\2\2\2\26\3"+ + "\2\2\2\2\30\3\2\2\2\2\32\3\2\2\2\2\34\3\2\2\2\2\36\3\2\2\2\2 \3\2\2\2"+ + "\2\"\3\2\2\2\2$\3\2\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3\2\2\2\2"+ + ".\3\2\2\2\2\60\3\2\2\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2\28\3\2\2"+ + "\2\2:\3\2\2\2\2<\3\2\2\2\2>\3\2\2\2\2@\3\2\2\2\2B\3\2\2\2\2D\3\2\2\2\2"+ + "F\3\2\2\2\2H\3\2\2\2\2J\3\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2R\3"+ + "\2\2\2\2T\3\2\2\2\2V\3\2\2\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3\2"+ + "\2\2\2`\3\2\2\2\2b\3\2\2\2\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2\2"+ + "\2l\3\2\2\2\2n\3\2\2\2\2p\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2v\3\2\2\2\2x"+ + "\3\2\2\2\2z\3\2\2\2\2|\3\2\2\2\2~\3\2\2\2\2\u0080\3\2\2\2\2\u0082\3\2"+ + "\2\2\2\u0084\3\2\2\2\2\u0086\3\2\2\2\2\u0088\3\2\2\2\2\u008a\3\2\2\2\2"+ + "\u008c\3\2\2\2\2\u008e\3\2\2\2\2\u0090\3\2\2\2\2\u0092\3\2\2\2\2\u0094"+ + "\3\2\2\2\2\u0096\3\2\2\2\2\u0098\3\2\2\2\2\u009a\3\2\2\2\2\u009c\3\2\2"+ + "\2\2\u009e\3\2\2\2\2\u00a0\3\2\2\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2\2\2\u00a6"+ + "\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae\3\2\2"+ + "\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2\2\2\u00b8"+ + "\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc\3\2\2\2\2\u00c4\3\2\2\2\2\u00ca\3\2\2"+ + "\2\2\u00cc\3\2\2\2\2\u00ce\3\2\2\2\3\u00d0\3\2\2\2\3\u00d2\3\2\2\2\3\u00d4"+ + "\3\2\2\2\3\u00d6\3\2\2\2\3\u00d8\3\2\2\2\3\u00da\3\2\2\2\3\u00dc\3\2\2"+ + "\2\3\u00de\3\2\2\2\3\u00e0\3\2\2\2\3\u00e2\3\2\2\2\3\u00e4\3\2\2\2\3\u00e6"+ + "\3\2\2\2\3\u00e8\3\2\2\2\3\u00ea\3\2\2\2\3\u00ec\3\2\2\2\3\u00ee\3\2\2"+ + "\2\3\u00f0\3\2\2\2\3\u00f2\3\2\2\2\3\u00f4\3\2\2\2\3\u00f6\3\2\2\2\3\u00f8"+ + "\3\2\2\2\3\u00fa\3\2\2\2\3\u00fc\3\2\2\2\3\u00fe\3\2\2\2\3\u0100\3\2\2"+ + "\2\3\u0102\3\2\2\2\3\u0104\3\2\2\2\3\u0106\3\2\2\2\3\u0108\3\2\2\2\3\u0110"+ + "\3\2\2\2\3\u0112\3\2\2\2\3\u0114\3\2\2\2\3\u0116\3\2\2\2\3\u011c\3\2\2"+ + "\2\3\u011e\3\2\2\2\3\u0120\3\2\2\2\4\u0122\3\2\2\2\6\u0125\3\2\2\2\b\u0127"+ + "\3\2\2\2\n\u0129\3\2\2\2\f\u012b\3\2\2\2\16\u012d\3\2\2\2\20\u012f\3\2"+ + "\2\2\22\u0131\3\2\2\2\24\u0133\3\2\2\2\26\u0135\3\2\2\2\30\u0138\3\2\2"+ + "\2\32\u013a\3\2\2\2\34\u013c\3\2\2\2\36\u013f\3\2\2\2 \u0141\3\2\2\2\""+ + "\u0143\3\2\2\2$\u0145\3\2\2\2&\u0147\3\2\2\2(\u0149\3\2\2\2*\u014c\3\2"+ + "\2\2,\u014f\3\2\2\2.\u0151\3\2\2\2\60\u0153\3\2\2\2\62\u0155\3\2\2\2\64"+ + "\u0157\3\2\2\2\66\u015a\3\2\2\28\u015d\3\2\2\2:\u0160\3\2\2\2<\u0163\3"+ + "\2\2\2>\u0165\3\2\2\2@\u0168\3\2\2\2B\u016b\3\2\2\2D\u016d\3\2\2\2F\u0170"+ + "\3\2\2\2H\u0173\3\2\2\2J\u018b\3\2\2\2L\u018d\3\2\2\2N\u0196\3\2\2\2P"+ + "\u019e\3\2\2\2R\u01a6\3\2\2\2T\u01ae\3\2\2\2V\u01b1\3\2\2\2X\u01b8\3\2"+ + "\2\2Z\u01bd\3\2\2\2\\\u01c1\3\2\2\2^\u01ca\3\2\2\2`\u01d3\3\2\2\2b\u01dc"+ + "\3\2\2\2d\u01e2\3\2\2\2f\u01e9\3\2\2\2h\u01f0\3\2\2\2j\u01f6\3\2\2\2l"+ + "\u01ff\3\2\2\2n\u0206\3\2\2\2p\u020f\3\2\2\2r\u0219\3\2\2\2t\u021c\3\2"+ + "\2\2v\u0221\3\2\2\2x\u0227\3\2\2\2z\u022a\3\2\2\2|\u022e\3\2\2\2~\u0235"+ + "\3\2\2\2\u0080\u023c\3\2\2\2\u0082\u0242\3\2\2\2\u0084\u024b\3\2\2\2\u0086"+ + "\u0251\3\2\2\2\u0088\u0259\3\2\2\2\u008a\u025e\3\2\2\2\u008c\u0265\3\2"+ + "\2\2\u008e\u026a\3\2\2\2\u0090\u0271\3\2\2\2\u0092\u0278\3\2\2\2\u0094"+ + "\u0280\3\2\2\2\u0096\u0289\3\2\2\2\u0098\u028e\3\2\2\2\u009a\u0297\3\2"+ + "\2\2\u009c\u029d\3\2\2\2\u009e\u02a4\3\2\2\2\u00a0\u02b4\3\2\2\2\u00a2"+ + "\u02db\3\2\2\2\u00a4\u02e6\3\2\2\2\u00a6\u02e8\3\2\2\2\u00a8\u02f4\3\2"+ + "\2\2\u00aa\u030c\3\2\2\2\u00ac\u0316\3\2\2\2\u00ae\u031b\3\2\2\2\u00b0"+ + "\u0322\3\2\2\2\u00b2\u0333\3\2\2\2\u00b4\u0341\3\2\2\2\u00b6\u0352\3\2"+ + "\2\2\u00b8\u0366\3\2\2\2\u00ba\u0369\3\2\2\2\u00bc\u0372\3\2\2\2\u00be"+ + "\u0379\3\2\2\2\u00c0\u037b\3\2\2\2\u00c2\u037d\3\2\2\2\u00c4\u037f\3\2"+ + "\2\2\u00c6\u0388\3\2\2\2\u00c8\u038a\3\2\2\2\u00ca\u038d\3\2\2\2\u00cc"+ + "\u0393\3\2\2\2\u00ce\u039e\3\2\2\2\u00d0\u03ac\3\2\2\2\u00d2\u0490\3\2"+ + "\2\2\u00d4\u0492\3\2\2\2\u00d6\u0494\3\2\2\2\u00d8\u0496\3\2\2\2\u00da"+ + "\u0498\3\2\2\2\u00dc\u049a\3\2\2\2\u00de\u049c\3\2\2\2\u00e0\u049e\3\2"+ + "\2\2\u00e2\u04a0\3\2\2\2\u00e4\u04a2\3\2\2\2\u00e6\u04a5\3\2\2\2\u00e8"+ + "\u04a8\3\2\2\2\u00ea\u04aa\3\2\2\2\u00ec\u04ac\3\2\2\2\u00ee\u04ae\3\2"+ + "\2\2\u00f0\u04b0\3\2\2\2\u00f2\u04b2\3\2\2\2\u00f4\u04b4\3\2\2\2\u00f6"+ + "\u04b7\3\2\2\2\u00f8\u04bc\3\2\2\2\u00fa\u04c1\3\2\2\2\u00fc\u04c3\3\2"+ + "\2\2\u00fe\u04d3\3\2\2\2\u0100\u04dc\3\2\2\2\u0102\u04ec\3\2\2\2\u0104"+ + "\u04ee\3\2\2\2\u0106\u04f5\3\2\2\2\u0108\u04f9\3\2\2\2\u010a\u04ff\3\2"+ + "\2\2\u010c\u0501\3\2\2\2\u010e\u0503\3\2\2\2\u0110\u0505\3\2\2\2\u0112"+ + "\u050d\3\2\2\2\u0114\u0513\3\2\2\2\u0116\u051a\3\2\2\2\u0118\u0521\3\2"+ + "\2\2\u011a\u0523\3\2\2\2\u011c\u0526\3\2\2\2\u011e\u052c\3\2\2\2\u0120"+ + "\u0537\3\2\2\2\u0122\u0123\7}\2\2\u0123\u0124\b\2\2\2\u0124\5\3\2\2\2"+ + "\u0125\u0126\7\177\2\2\u0126\7\3\2\2\2\u0127\u0128\7]\2\2\u0128\t\3\2"+ + "\2\2\u0129\u012a\7_\2\2\u012a\13\3\2\2\2\u012b\u012c\7*\2\2\u012c\r\3"+ + "\2\2\2\u012d\u012e\7+\2\2\u012e\17\3\2\2\2\u012f\u0130\7=\2\2\u0130\21"+ + "\3\2\2\2\u0131\u0132\7<\2\2\u0132\23\3\2\2\2\u0133\u0134\7.\2\2\u0134"+ + "\25\3\2\2\2\u0135\u0136\7\60\2\2\u0136\u0137\7\60\2\2\u0137\27\3\2\2\2"+ + "\u0138\u0139\7A\2\2\u0139\31\3\2\2\2\u013a\u013b\7\60\2\2\u013b\33\3\2"+ + "\2\2\u013c\u013d\7/\2\2\u013d\u013e\7@\2\2\u013e\35\3\2\2\2\u013f\u0140"+ + "\7-\2\2\u0140\37\3\2\2\2\u0141\u0142\7/\2\2\u0142!\3\2\2\2\u0143\u0144"+ + "\7,\2\2\u0144#\3\2\2\2\u0145\u0146\7\61\2\2\u0146%\3\2\2\2\u0147\u0148"+ + "\7\'\2\2\u0148\'\3\2\2\2\u0149\u014a\7-\2\2\u014a\u014b\7-\2\2\u014b)"+ + "\3\2\2\2\u014c\u014d\7/\2\2\u014d\u014e\7/\2\2\u014e+\3\2\2\2\u014f\u0150"+ + "\7(\2\2\u0150-\3\2\2\2\u0151\u0152\7\u0080\2\2\u0152/\3\2\2\2\u0153\u0154"+ + "\7`\2\2\u0154\61\3\2\2\2\u0155\u0156\7~\2\2\u0156\63\3\2\2\2\u0157\u0158"+ + "\7>\2\2\u0158\u0159\7>\2\2\u0159\65\3\2\2\2\u015a\u015b\7@\2\2\u015b\u015c"+ + "\7@\2\2\u015c\67\3\2\2\2\u015d\u015e\7?\2\2\u015e\u015f\7?\2\2\u015f9"+ + "\3\2\2\2\u0160\u0161\7#\2\2\u0161\u0162\7?\2\2\u0162;\3\2\2\2\u0163\u0164"+ + "\7>\2\2\u0164=\3\2\2\2\u0165\u0166\7>\2\2\u0166\u0167\7?\2\2\u0167?\3"+ + "\2\2\2\u0168\u0169\7@\2\2\u0169\u016a\7?\2\2\u016aA\3\2\2\2\u016b\u016c"+ + "\7@\2\2\u016cC\3\2\2\2\u016d\u016e\7(\2\2\u016e\u016f\7(\2\2\u016fE\3"+ + "\2\2\2\u0170\u0171\7~\2\2\u0171\u0172\7~\2\2\u0172G\3\2\2\2\u0173\u0174"+ + "\7?\2\2\u0174I\3\2\2\2\u0175\u0176\7-\2\2\u0176\u018c\7?\2\2\u0177\u0178"+ + "\7/\2\2\u0178\u018c\7?\2\2\u0179\u017a\7,\2\2\u017a\u018c\7?\2\2\u017b"+ + "\u017c\7\61\2\2\u017c\u018c\7?\2\2\u017d\u017e\7\'\2\2\u017e\u018c\7?"+ + "\2\2\u017f\u0180\7>\2\2\u0180\u0181\7>\2\2\u0181\u018c\7?\2\2\u0182\u0183"+ + "\7@\2\2\u0183\u0184\7@\2\2\u0184\u018c\7?\2\2\u0185\u0186\7(\2\2\u0186"+ + "\u018c\7?\2\2\u0187\u0188\7~\2\2\u0188\u018c\7?\2\2\u0189\u018a\7`\2\2"+ + "\u018a\u018c\7?\2\2\u018b\u0175\3\2\2\2\u018b\u0177\3\2\2\2\u018b\u0179"+ + "\3\2\2\2\u018b\u017b\3\2\2\2\u018b\u017d\3\2\2\2\u018b\u017f\3\2\2\2\u018b"+ + "\u0182\3\2\2\2\u018b\u0185\3\2\2\2\u018b\u0187\3\2\2\2\u018b\u0189\3\2"+ + "\2\2\u018cK\3\2\2\2\u018d\u018e\7k\2\2\u018e\u018f\7o\2\2\u018f\u0190"+ + "\7r\2\2\u0190\u0191\7q\2\2\u0191\u0192\7t\2\2\u0192\u0193\7v\2\2\u0193"+ + "\u0194\3\2\2\2\u0194\u0195\b&\3\2\u0195M\3\2\2\2\u0196\u0197\7v\2\2\u0197"+ + "\u0198\7{\2\2\u0198\u0199\7r\2\2\u0199\u019a\7g\2\2\u019a\u019b\7f\2\2"+ + "\u019b\u019c\7g\2\2\u019c\u019d\7h\2\2\u019dO\3\2\2\2\u019e\u019f\7%\2"+ + "\2\u019f\u01a0\7r\2\2\u01a0\u01a1\7t\2\2\u01a1\u01a2\7c\2\2\u01a2\u01a3"+ + "\7i\2\2\u01a3\u01a4\7o\2\2\u01a4\u01a5\7c\2\2\u01a5Q\3\2\2\2\u01a6\u01a7"+ + "\7t\2\2\u01a7\u01a8\7g\2\2\u01a8\u01a9\7u\2\2\u01a9\u01aa\7g\2\2\u01aa"+ + "\u01ab\7t\2\2\u01ab\u01ac\7x\2\2\u01ac\u01ad\7g\2\2\u01adS\3\2\2\2\u01ae"+ + "\u01af\7r\2\2\u01af\u01b0\7e\2\2\u01b0U\3\2\2\2\u01b1\u01b2\7v\2\2\u01b2"+ + "\u01b3\7c\2\2\u01b3\u01b4\7t\2\2\u01b4\u01b5\7i\2\2\u01b5\u01b6\7g\2\2"+ + "\u01b6\u01b7\7v\2\2\u01b7W\3\2\2\2\u01b8\u01b9\7n\2\2\u01b9\u01ba\7k\2"+ + "\2\u01ba\u01bb\7p\2\2\u01bb\u01bc\7m\2\2\u01bcY\3\2\2\2\u01bd\u01be\7"+ + "e\2\2\u01be\u01bf\7r\2\2\u01bf\u01c0\7w\2\2\u01c0[\3\2\2\2\u01c1\u01c2"+ + "\7e\2\2\u01c2\u01c3\7q\2\2\u01c3\u01c4\7f\2\2\u01c4\u01c5\7g\2\2\u01c5"+ + "\u01c6\7a\2\2\u01c6\u01c7\7u\2\2\u01c7\u01c8\7g\2\2\u01c8\u01c9\7i\2\2"+ + "\u01c9]\3\2\2\2\u01ca\u01cb\7f\2\2\u01cb\u01cc\7c\2\2\u01cc\u01cd\7v\2"+ + "\2\u01cd\u01ce\7c\2\2\u01ce\u01cf\7a\2\2\u01cf\u01d0\7u\2\2\u01d0\u01d1"+ + "\7g\2\2\u01d1\u01d2\7i\2\2\u01d2_\3\2\2\2\u01d3\u01d4\7g\2\2\u01d4\u01d5"+ + "\7p\2\2\u01d5\u01d6\7e\2\2\u01d6\u01d7\7q\2\2\u01d7\u01d8\7f\2\2\u01d8"+ + "\u01d9\7k\2\2\u01d9\u01da\7p\2\2\u01da\u01db\7i\2\2\u01dba\3\2\2\2\u01dc"+ + "\u01dd\7e\2\2\u01dd\u01de\7q\2\2\u01de\u01df\7p\2\2\u01df\u01e0\7u\2\2"+ + "\u01e0\u01e1\7v\2\2\u01e1c\3\2\2\2\u01e2\u01e3\7g\2\2\u01e3\u01e4\7z\2"+ + "\2\u01e4\u01e5\7v\2\2\u01e5\u01e6\7g\2\2\u01e6\u01e7\7t\2\2\u01e7\u01e8"+ + "\7p\2\2\u01e8e\3\2\2\2\u01e9\u01ea\7g\2\2\u01ea\u01eb\7z\2\2\u01eb\u01ec"+ + "\7r\2\2\u01ec\u01ed\7q\2\2\u01ed\u01ee\7t\2\2\u01ee\u01ef\7v\2\2\u01ef"+ + "g\3\2\2\2\u01f0\u01f1\7c\2\2\u01f1\u01f2\7n\2\2\u01f2\u01f3\7k\2\2\u01f3"+ + "\u01f4\7i\2\2\u01f4\u01f5\7p\2\2\u01f5i\3\2\2\2\u01f6\u01f7\7t\2\2\u01f7"+ + "\u01f8\7g\2\2\u01f8\u01f9\7i\2\2\u01f9\u01fa\7k\2\2\u01fa\u01fb\7u\2\2"+ + "\u01fb\u01fc\7v\2\2\u01fc\u01fd\7g\2\2\u01fd\u01fe\7t\2\2\u01fek\3\2\2"+ + "\2\u01ff\u0200\7k\2\2\u0200\u0201\7p\2\2\u0201\u0202\7n\2\2\u0202\u0203"+ + "\7k\2\2\u0203\u0204\7p\2\2\u0204\u0205\7g\2\2\u0205m\3\2\2\2\u0206\u0207"+ + "\7x\2\2\u0207\u0208\7q\2\2\u0208\u0209\7n\2\2\u0209\u020a\7c\2\2\u020a"+ + "\u020b\7v\2\2\u020b\u020c\7k\2\2\u020c\u020d\7n\2\2\u020d\u020e\7g\2\2"+ + "\u020eo\3\2\2\2\u020f\u0210\7k\2\2\u0210\u0211\7p\2\2\u0211\u0212\7v\2"+ + "\2\u0212\u0213\7g\2\2\u0213\u0214\7t\2\2\u0214\u0215\7t\2\2\u0215\u0216"+ + "\7w\2\2\u0216\u0217\7r\2\2\u0217\u0218\7v\2\2\u0218q\3\2\2\2\u0219\u021a"+ + "\7k\2\2\u021a\u021b\7h\2\2\u021bs\3\2\2\2\u021c\u021d\7g\2\2\u021d\u021e"+ + "\7n\2\2\u021e\u021f\7u\2\2\u021f\u0220\7g\2\2\u0220u\3\2\2\2\u0221\u0222"+ + "\7y\2\2\u0222\u0223\7j\2\2\u0223\u0224\7k\2\2\u0224\u0225\7n\2\2\u0225"+ + "\u0226\7g\2\2\u0226w\3\2\2\2\u0227\u0228\7f\2\2\u0228\u0229\7q\2\2\u0229"+ + "y\3\2\2\2\u022a\u022b\7h\2\2\u022b\u022c\7q\2\2\u022c\u022d\7t\2\2\u022d"+ + "{\3\2\2\2\u022e\u022f\7u\2\2\u022f\u0230\7y\2\2\u0230\u0231\7k\2\2\u0231"+ + "\u0232\7v\2\2\u0232\u0233\7e\2\2\u0233\u0234\7j\2\2\u0234}\3\2\2\2\u0235"+ + "\u0236\7t\2\2\u0236\u0237\7g\2\2\u0237\u0238\7v\2\2\u0238\u0239\7w\2\2"+ + "\u0239\u023a\7t\2\2\u023a\u023b\7p\2\2\u023b\177\3\2\2\2\u023c\u023d\7"+ + "d\2\2\u023d\u023e\7t\2\2\u023e\u023f\7g\2\2\u023f\u0240\7c\2\2\u0240\u0241"+ + "\7m\2\2\u0241\u0081\3\2\2\2\u0242\u0243\7e\2\2\u0243\u0244\7q\2\2\u0244"+ + "\u0245\7p\2\2\u0245\u0246\7v\2\2\u0246\u0247\7k\2\2\u0247\u0248\7p\2\2"+ + "\u0248\u0249\7w\2\2\u0249\u024a\7g\2\2\u024a\u0083\3\2\2\2\u024b\u024c"+ + "\7c\2\2\u024c\u024d\7u\2\2\u024d\u024e\7o\2\2\u024e\u024f\3\2\2\2\u024f"+ + "\u0250\bB\4\2\u0250\u0085\3\2\2\2\u0251\u0252\7f\2\2\u0252\u0253\7g\2"+ + "\2\u0253\u0254\7h\2\2\u0254\u0255\7c\2\2\u0255\u0256\7w\2\2\u0256\u0257"+ + "\7n\2\2\u0257\u0258\7v\2\2\u0258\u0087\3\2\2\2\u0259\u025a\7e\2\2\u025a"+ + "\u025b\7c\2\2\u025b\u025c\7u\2\2\u025c\u025d\7g\2\2\u025d\u0089\3\2\2"+ + "\2\u025e\u025f\7u\2\2\u025f\u0260\7v\2\2\u0260\u0261\7t\2\2\u0261\u0262"+ + "\7w\2\2\u0262\u0263\7e\2\2\u0263\u0264\7v\2\2\u0264\u008b\3\2\2\2\u0265"+ + "\u0266\7g\2\2\u0266\u0267\7p\2\2\u0267\u0268\7w\2\2\u0268\u0269\7o\2\2"+ + "\u0269\u008d\3\2\2\2\u026a\u026b\7u\2\2\u026b\u026c\7k\2\2\u026c\u026d"+ + "\7|\2\2\u026d\u026e\7g\2\2\u026e\u026f\7q\2\2\u026f\u0270\7h\2\2\u0270"+ + "\u008f\3\2\2\2\u0271\u0272\7v\2\2\u0272\u0273\7{\2\2\u0273\u0274\7r\2"+ + "\2\u0274\u0275\7g\2\2\u0275\u0276\7k\2\2\u0276\u0277\7f\2\2\u0277\u0091"+ + "\3\2\2\2\u0278\u0279\7m\2\2\u0279\u027a\7k\2\2\u027a\u027b\7e\2\2\u027b"+ + "\u027c\7m\2\2\u027c\u027d\7c\2\2\u027d\u027e\7u\2\2\u027e\u027f\7o\2\2"+ + "\u027f\u0093\3\2\2\2\u0280\u0281\7t\2\2\u0281\u0282\7g\2\2\u0282\u0283"+ + "\7u\2\2\u0283\u0284\7q\2\2\u0284\u0285\7w\2\2\u0285\u0286\7t\2\2\u0286"+ + "\u0287\7e\2\2\u0287\u0288\7g\2\2\u0288\u0095\3\2\2\2\u0289\u028a\7w\2"+ + "\2\u028a\u028b\7u\2\2\u028b\u028c\7g\2\2\u028c\u028d\7u\2\2\u028d\u0097"+ + "\3\2\2\2\u028e\u028f\7e\2\2\u028f\u0290\7n\2\2\u0290\u0291\7q\2\2\u0291"+ + "\u0292\7d\2\2\u0292\u0293\7d\2\2\u0293\u0294\7g\2\2\u0294\u0295\7t\2\2"+ + "\u0295\u0296\7u\2\2\u0296\u0099\3\2\2\2\u0297\u0298\7d\2\2\u0298\u0299"+ + "\7{\2\2\u0299\u029a\7v\2\2\u029a\u029b\7g\2\2\u029b\u029c\7u\2\2\u029c"+ + "\u009b\3\2\2\2\u029d\u029e\7e\2\2\u029e\u029f\7{\2\2\u029f\u02a0\7e\2"+ + "\2\u02a0\u02a1\7n\2\2\u02a1\u02a2\7g\2\2\u02a2\u02a3\7u\2\2\u02a3\u009d"+ + "\3\2\2\2\u02a4\u02a5\7#\2\2\u02a5\u009f\3\2\2\2\u02a6\u02a7\7u\2\2\u02a7"+ + "\u02a8\7k\2\2\u02a8\u02a9\7i\2\2\u02a9\u02aa\7p\2\2\u02aa\u02ab\7g\2\2"+ + "\u02ab\u02b5\7f\2\2\u02ac\u02ad\7w\2\2\u02ad\u02ae\7p\2\2\u02ae\u02af"+ + "\7u\2\2\u02af\u02b0\7k\2\2\u02b0\u02b1\7i\2\2\u02b1\u02b2\7p\2\2\u02b2"+ + "\u02b3\7g\2\2\u02b3\u02b5\7f\2\2\u02b4\u02a6\3\2\2\2\u02b4\u02ac\3\2\2"+ + "\2\u02b5\u00a1\3\2\2\2\u02b6\u02b7\7d\2\2\u02b7\u02b8\7{\2\2\u02b8\u02b9"+ + "\7v\2\2\u02b9\u02dc\7g\2\2\u02ba\u02bb\7y\2\2\u02bb\u02bc\7q\2\2\u02bc"+ + "\u02bd\7t\2\2\u02bd\u02dc\7f\2\2\u02be\u02bf\7f\2\2\u02bf\u02c0\7y\2\2"+ + "\u02c0\u02c1\7q\2\2\u02c1\u02c2\7t\2\2\u02c2\u02dc\7f\2\2\u02c3\u02c4"+ + "\7d\2\2\u02c4\u02c5\7q\2\2\u02c5\u02c6\7q\2\2\u02c6\u02dc\7n\2\2\u02c7"+ + "\u02c8\7e\2\2\u02c8\u02c9\7j\2\2\u02c9\u02ca\7c\2\2\u02ca\u02dc\7t\2\2"+ + "\u02cb\u02cc\7u\2\2\u02cc\u02cd\7j\2\2\u02cd\u02ce\7q\2\2\u02ce\u02cf"+ + "\7t\2\2\u02cf\u02dc\7v\2\2\u02d0\u02d1\7k\2\2\u02d1\u02d2\7p\2\2\u02d2"+ + "\u02dc\7v\2\2\u02d3\u02d4\7n\2\2\u02d4\u02d5\7q\2\2\u02d5\u02d6\7p\2\2"+ + "\u02d6\u02dc\7i\2\2\u02d7\u02d8\7x\2\2\u02d8\u02d9\7q\2\2\u02d9\u02da"+ + "\7k\2\2\u02da\u02dc\7f\2\2\u02db\u02b6\3\2\2\2\u02db\u02ba\3\2\2\2\u02db"+ + "\u02be\3\2\2\2\u02db\u02c3\3\2\2\2\u02db\u02c7\3\2\2\2\u02db\u02cb\3\2"+ + "\2\2\u02db\u02d0\3\2\2\2\u02db\u02d3\3\2\2\2\u02db\u02d7\3\2\2\2\u02dc"+ + "\u00a3\3\2\2\2\u02dd\u02de\7v\2\2\u02de\u02df\7t\2\2\u02df\u02e0\7w\2"+ + "\2\u02e0\u02e7\7g\2\2\u02e1\u02e2\7h\2\2\u02e2\u02e3\7c\2\2\u02e3\u02e4"+ + "\7n\2\2\u02e4\u02e5\7u\2\2\u02e5\u02e7\7g\2\2\u02e6\u02dd\3\2\2\2\u02e6"+ + "\u02e1\3\2\2\2\u02e7\u00a5\3\2\2\2\u02e8\u02e9\7}\2\2\u02e9\u02ea\7}\2"+ + "\2\u02ea\u02ee\3\2\2\2\u02eb\u02ed\13\2\2\2\u02ec\u02eb\3\2\2\2\u02ed"+ + "\u02f0\3\2\2\2\u02ee\u02ef\3\2\2\2\u02ee\u02ec\3\2\2\2\u02ef\u02f1\3\2"+ + "\2\2\u02f0\u02ee\3\2\2\2\u02f1\u02f2\7\177\2\2\u02f2\u02f3\7\177\2\2\u02f3"+ + "\u00a7\3\2\2\2\u02f4\u02fa\7$\2\2\u02f5\u02f6\7^\2\2\u02f6\u02f9\7$\2"+ + "\2\u02f7\u02f9\n\2\2\2\u02f8\u02f5\3\2\2\2\u02f8\u02f7\3\2\2\2\u02f9\u02fc"+ + "\3\2\2\2\u02fa\u02f8\3\2\2\2\u02fa\u02fb\3\2\2\2\u02fb\u02fd\3\2\2\2\u02fc"+ + "\u02fa\3\2\2\2\u02fd\u02ff\7$\2\2\u02fe\u0300\t\3\2\2\u02ff\u02fe\3\2"+ + "\2\2\u02ff\u0300\3\2\2\2\u0300\u0305\3\2\2\2\u0301\u0303\t\4\2\2\u0302"+ + "\u0304\t\5\2\2\u0303\u0302\3\2\2\2\u0303\u0304\3\2\2\2\u0304\u0306\3\2"+ + "\2\2\u0305\u0301\3\2\2\2\u0305\u0306\3\2\2\2\u0306\u0308\3\2\2\2\u0307"+ + "\u0309\t\3\2\2\u0308\u0307\3\2\2\2\u0308\u0309\3\2\2\2\u0309\u030a\3\2"+ + "\2\2\u030a\u030b\bT\5\2\u030b\u00a9\3\2\2\2\u030c\u0310\7)\2\2\u030d\u030e"+ + "\7^\2\2\u030e\u0311\t\6\2\2\u030f\u0311\n\7\2\2\u0310\u030d\3\2\2\2\u0310"+ + "\u030f\3\2\2\2\u0311\u0312\3\2\2\2\u0312\u0313\7)\2\2\u0313\u00ab\3\2"+ + "\2\2\u0314\u0317\5\u00aeW\2\u0315\u0317\5\u00b6[\2\u0316\u0314\3\2\2\2"+ + "\u0316\u0315\3\2\2\2\u0317\u00ad\3\2\2\2\u0318\u031c\5\u00b0X\2\u0319"+ + "\u031c\5\u00b2Y\2\u031a\u031c\5\u00b4Z\2\u031b\u0318\3\2\2\2\u031b\u0319"+ + "\3\2\2\2\u031b\u031a\3\2\2\2\u031c\u00af\3\2\2\2\u031d\u0323\7\'\2\2\u031e"+ + "\u031f\7\62\2\2\u031f\u0323\7d\2\2\u0320\u0321\7\62\2\2\u0321\u0323\7"+ + "D\2\2\u0322\u031d\3\2\2\2\u0322\u031e\3\2\2\2\u0322\u0320\3\2\2\2\u0323"+ + "\u0327\3\2\2\2\u0324\u0326\5\u00be_\2\u0325\u0324\3\2\2\2\u0326\u0329"+ + "\3\2\2\2\u0327\u0325\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u032a\3\2\2\2\u0329"+ + "\u0327\3\2\2\2\u032a\u032c\7\60\2\2\u032b\u032d\5\u00be_\2\u032c\u032b"+ + "\3\2\2\2\u032d\u032e\3\2\2\2\u032e\u032c\3\2\2\2\u032e\u032f\3\2\2\2\u032f"+ + "\u00b1\3\2\2\2\u0330\u0332\5\u00c0`\2\u0331\u0330\3\2\2\2\u0332\u0335"+ + "\3\2\2\2\u0333\u0331\3\2\2\2\u0333\u0334\3\2\2\2\u0334\u0336\3\2\2\2\u0335"+ + "\u0333\3\2\2\2\u0336\u0338\7\60\2\2\u0337\u0339\5\u00c0`\2\u0338\u0337"+ + "\3\2\2\2\u0339\u033a\3\2\2\2\u033a\u0338\3\2\2\2\u033a\u033b\3\2\2\2\u033b"+ + "\u00b3\3\2\2\2\u033c\u0342\7&\2\2\u033d\u033e\7\62\2\2\u033e\u0342\7z"+ + "\2\2\u033f\u0340\7\62\2\2\u0340\u0342\7Z\2\2\u0341\u033c\3\2\2\2\u0341"+ + "\u033d\3\2\2\2\u0341\u033f\3\2\2\2\u0342\u0346\3\2\2\2\u0343\u0345\5\u00c2"+ + "a\2\u0344\u0343\3\2\2\2\u0345\u0348\3\2\2\2\u0346\u0344\3\2\2\2\u0346"+ + "\u0347\3\2\2\2\u0347\u0349\3\2\2\2\u0348\u0346\3\2\2\2\u0349\u034b\7\60"+ + "\2\2\u034a\u034c\5\u00c2a\2\u034b\u034a\3\2\2\2\u034c\u034d\3\2\2\2\u034d"+ + "\u034b\3\2\2\2\u034d\u034e\3\2\2\2\u034e\u00b5\3\2\2\2\u034f\u0353\5\u00ba"+ + "]\2\u0350\u0353\5\u00bc^\2\u0351\u0353\5\u00b8\\\2\u0352\u034f\3\2\2\2"+ + "\u0352\u0350\3\2\2\2\u0352\u0351\3\2\2\2\u0353\u0357\3\2\2\2\u0354\u0355"+ + "\t\b\2\2\u0355\u0358\t\t\2\2\u0356\u0358\7n\2\2\u0357\u0354\3\2\2\2\u0357"+ + "\u0356\3\2\2\2\u0357\u0358\3\2\2\2\u0358\u00b7\3\2\2\2\u0359\u035a\7\62"+ + "\2\2\u035a\u035c\t\n\2\2\u035b\u035d\5\u00be_\2\u035c\u035b\3\2\2\2\u035d"+ + "\u035e\3\2\2\2\u035e\u035c\3\2\2\2\u035e\u035f\3\2\2\2\u035f\u0367\3\2"+ + "\2\2\u0360\u0362\7\'\2\2\u0361\u0363\5\u00be_\2\u0362\u0361\3\2\2\2\u0363"+ + "\u0364\3\2\2\2\u0364\u0362\3\2\2\2\u0364\u0365\3\2\2\2\u0365\u0367\3\2"+ + "\2\2\u0366\u0359\3\2\2\2\u0366\u0360\3\2\2\2\u0367\u00b9\3\2\2\2\u0368"+ + "\u036a\5\u00c0`\2\u0369\u0368\3\2\2\2\u036a\u036b\3\2\2\2\u036b\u0369"+ + "\3\2\2\2\u036b\u036c\3\2\2\2\u036c\u00bb\3\2\2\2\u036d\u0373\7&\2\2\u036e"+ + "\u036f\7\62\2\2\u036f\u0373\7z\2\2\u0370\u0371\7\62\2\2\u0371\u0373\7"+ + "Z\2\2\u0372\u036d\3\2\2\2\u0372\u036e\3\2\2\2\u0372\u0370\3\2\2\2\u0373"+ + "\u0375\3\2\2\2\u0374\u0376\5\u00c2a\2\u0375\u0374\3\2\2\2\u0376\u0377"+ + "\3\2\2\2\u0377\u0375\3\2\2\2\u0377\u0378\3\2\2\2\u0378\u00bd\3\2\2\2\u0379"+ + "\u037a\t\13\2\2\u037a\u00bf\3\2\2\2\u037b\u037c\t\f\2\2\u037c\u00c1\3"+ + "\2\2\2\u037d\u037e\t\r\2\2\u037e\u00c3\3\2\2\2\u037f\u0383\5\u00c6c\2"+ + "\u0380\u0382\5\u00c8d\2\u0381\u0380\3\2\2\2\u0382\u0385\3\2\2\2\u0383"+ + "\u0381\3\2\2\2\u0383\u0384\3\2\2\2\u0384\u0386\3\2\2\2\u0385\u0383\3\2"+ + "\2\2\u0386\u0387\bb\6\2\u0387\u00c5\3\2\2\2\u0388\u0389\t\16\2\2\u0389"+ + "\u00c7\3\2\2\2\u038a\u038b\t\17\2\2\u038b\u00c9\3\2\2\2\u038c\u038e\t"+ + "\20\2\2\u038d\u038c\3\2\2\2\u038e\u038f\3\2\2\2\u038f\u038d\3\2\2\2\u038f"+ + "\u0390\3\2\2\2\u0390\u0391\3\2\2\2\u0391\u0392\be\7\2\u0392\u00cb\3\2"+ + "\2\2\u0393\u0394\7\61\2\2\u0394\u0395\7\61\2\2\u0395\u0399\3\2\2\2\u0396"+ + "\u0398\n\21\2\2\u0397\u0396\3\2\2\2\u0398\u039b\3\2\2\2\u0399\u0397\3"+ + "\2\2\2\u0399\u039a\3\2\2\2\u039a\u039c\3\2\2\2\u039b\u0399\3\2\2\2\u039c"+ + "\u039d\bf\b\2\u039d\u00cd\3\2\2\2\u039e\u039f\7\61\2\2\u039f\u03a0\7,"+ + "\2\2\u03a0\u03a4\3\2\2\2\u03a1\u03a3\13\2\2\2\u03a2\u03a1\3\2\2\2\u03a3"+ + "\u03a6\3\2\2\2\u03a4\u03a5\3\2\2\2\u03a4\u03a2\3\2\2\2\u03a5\u03a7\3\2"+ + "\2\2\u03a6\u03a4\3\2\2\2\u03a7\u03a8\7,\2\2\u03a8\u03a9\7\61\2\2\u03a9"+ + "\u03aa\3\2\2\2\u03aa\u03ab\bg\b\2\u03ab\u00cf\3\2\2\2\u03ac\u03ad\7\60"+ + "\2\2\u03ad\u03ae\7d\2\2\u03ae\u03af\7{\2\2\u03af\u03b0\7v\2\2\u03b0\u03b1"+ + "\7g\2\2\u03b1\u00d1\3\2\2\2\u03b2\u03b3\7d\2\2\u03b3\u03b4\7t\2\2\u03b4"+ + "\u0491\7m\2\2\u03b5\u03b6\7q\2\2\u03b6\u03b7\7t\2\2\u03b7\u0491\7c\2\2"+ + "\u03b8\u03b9\7m\2\2\u03b9\u03ba\7k\2\2\u03ba\u0491\7n\2\2\u03bb\u03bc"+ + "\7u\2\2\u03bc\u03bd\7n\2\2\u03bd\u0491\7q\2\2\u03be\u03bf\7p\2\2\u03bf"+ + "\u03c0\7q\2\2\u03c0\u0491\7r\2\2\u03c1\u03c2\7c\2\2\u03c2\u03c3\7u\2\2"+ + "\u03c3\u0491\7n\2\2\u03c4\u03c5\7r\2\2\u03c5\u03c6\7j\2\2\u03c6\u0491"+ + "\7r\2\2\u03c7\u03c8\7c\2\2\u03c8\u03c9\7p\2\2\u03c9\u0491\7e\2\2\u03ca"+ + "\u03cb\7d\2\2\u03cb\u03cc\7r\2\2\u03cc\u0491\7n\2\2\u03cd\u03ce\7e\2\2"+ + "\u03ce\u03cf\7n\2\2\u03cf\u0491\7e\2\2\u03d0\u03d1\7l\2\2\u03d1\u03d2"+ + "\7u\2\2\u03d2\u0491\7t\2\2\u03d3\u03d4\7c\2\2\u03d4\u03d5\7p\2\2\u03d5"+ + "\u0491\7f\2\2\u03d6\u03d7\7t\2\2\u03d7\u03d8\7n\2\2\u03d8\u0491\7c\2\2"+ + "\u03d9\u03da\7d\2\2\u03da\u03db\7k\2\2\u03db\u0491\7v\2\2\u03dc\u03dd"+ + "\7t\2\2\u03dd\u03de\7q\2\2\u03de\u0491\7n\2\2\u03df\u03e0\7r\2\2\u03e0"+ + "\u03e1\7n\2\2\u03e1\u0491\7c\2\2\u03e2\u03e3\7r\2\2\u03e3\u03e4\7n\2\2"+ + "\u03e4\u0491\7r\2\2\u03e5\u03e6\7d\2\2\u03e6\u03e7\7o\2\2\u03e7\u0491"+ + "\7k\2\2\u03e8\u03e9\7u\2\2\u03e9\u03ea\7g\2\2\u03ea\u0491\7e\2\2\u03eb"+ + "\u03ec\7t\2\2\u03ec\u03ed\7v\2\2\u03ed\u0491\7k\2\2\u03ee\u03ef\7g\2\2"+ + "\u03ef\u03f0\7q\2\2\u03f0\u0491\7t\2\2\u03f1\u03f2\7u\2\2\u03f2\u03f3"+ + "\7t\2\2\u03f3\u0491\7g\2\2\u03f4\u03f5\7n\2\2\u03f5\u03f6\7u\2\2\u03f6"+ + "\u0491\7t\2\2\u03f7\u03f8\7r\2\2\u03f8\u03f9\7j\2\2\u03f9\u0491\7c\2\2"+ + "\u03fa\u03fb\7c\2\2\u03fb\u03fc\7n\2\2\u03fc\u0491\7t\2\2\u03fd\u03fe"+ + "\7l\2\2\u03fe\u03ff\7o\2\2\u03ff\u0491\7r\2\2\u0400\u0401\7d\2\2\u0401"+ + "\u0402\7x\2\2\u0402\u0491\7e\2\2\u0403\u0404\7e\2\2\u0404\u0405\7n\2\2"+ + "\u0405\u0491\7k\2\2\u0406\u0407\7t\2\2\u0407\u0408\7v\2\2\u0408\u0491"+ + "\7u\2\2\u0409\u040a\7c\2\2\u040a\u040b\7f\2\2\u040b\u0491\7e\2\2\u040c"+ + "\u040d\7t\2\2\u040d\u040e\7t\2\2\u040e\u0491\7c\2\2\u040f\u0410\7d\2\2"+ + "\u0410\u0411\7x\2\2\u0411\u0491\7u\2\2\u0412\u0413\7u\2\2\u0413\u0414"+ + "\7g\2\2\u0414\u0491\7k\2\2\u0415\u0416\7u\2\2\u0416\u0417\7c\2\2\u0417"+ + "\u0491\7z\2\2\u0418\u0419\7u\2\2\u0419\u041a\7v\2\2\u041a\u0491\7{\2\2"+ + "\u041b\u041c\7u\2\2\u041c\u041d\7v\2\2\u041d\u0491\7c\2\2\u041e\u041f"+ + "\7u\2\2\u041f\u0420\7v\2\2\u0420\u0491\7z\2\2\u0421\u0422\7f\2\2\u0422"+ + "\u0423\7g\2\2\u0423\u0491\7{\2\2\u0424\u0425\7v\2\2\u0425\u0426\7z\2\2"+ + "\u0426\u0491\7c\2\2\u0427\u0428\7z\2\2\u0428\u0429\7c\2\2\u0429\u0491"+ + "\7c\2\2\u042a\u042b\7d\2\2\u042b\u042c\7e\2\2\u042c\u0491\7e\2\2\u042d"+ + "\u042e\7c\2\2\u042e\u042f\7j\2\2\u042f\u0491\7z\2\2\u0430\u0431\7v\2\2"+ + "\u0431\u0432\7{\2\2\u0432\u0491\7c\2\2\u0433\u0434\7v\2\2\u0434\u0435"+ + "\7z\2\2\u0435\u0491\7u\2\2\u0436\u0437\7v\2\2\u0437\u0438\7c\2\2\u0438"+ + "\u0491\7u\2\2\u0439\u043a\7u\2\2\u043a\u043b\7j\2\2\u043b\u0491\7{\2\2"+ + "\u043c\u043d\7u\2\2\u043d\u043e\7j\2\2\u043e\u0491\7z\2\2\u043f\u0440"+ + "\7n\2\2\u0440\u0441\7f\2\2\u0441\u0491\7{\2\2\u0442\u0443\7n\2\2\u0443"+ + "\u0444\7f\2\2\u0444\u0491\7c\2\2\u0445\u0446\7n\2\2\u0446\u0447\7f\2\2"+ + "\u0447\u0491\7z\2\2\u0448\u0449\7n\2\2\u0449\u044a\7c\2\2\u044a\u0491"+ + "\7z\2\2\u044b\u044c\7v\2\2\u044c\u044d\7c\2\2\u044d\u0491\7{\2\2\u044e"+ + "\u044f\7v\2\2\u044f\u0450\7c\2\2\u0450\u0491\7z\2\2\u0451\u0452\7d\2\2"+ + "\u0452\u0453\7e\2\2\u0453\u0491\7u\2\2\u0454\u0455\7e\2\2\u0455\u0456"+ + "\7n\2\2\u0456\u0491\7x\2\2\u0457\u0458\7v\2\2\u0458\u0459\7u\2\2\u0459"+ + "\u0491\7z\2\2\u045a\u045b\7n\2\2\u045b\u045c\7c\2\2\u045c\u0491\7u\2\2"+ + "\u045d\u045e\7e\2\2\u045e\u045f\7r\2\2\u045f\u0491\7{\2\2\u0460\u0461"+ + "\7e\2\2\u0461\u0462\7o\2\2\u0462\u0491\7r\2\2\u0463\u0464\7e\2\2\u0464"+ + "\u0465\7r\2\2\u0465\u0491\7z\2\2\u0466\u0467\7f\2\2\u0467\u0468\7e\2\2"+ + "\u0468\u0491\7r\2\2\u0469\u046a\7f\2\2\u046a\u046b\7g\2\2\u046b\u0491"+ + "\7e\2\2\u046c\u046d\7k\2\2\u046d\u046e\7p\2\2\u046e\u0491\7e\2\2\u046f"+ + "\u0470\7c\2\2\u0470\u0471\7z\2\2\u0471\u0491\7u\2\2\u0472\u0473\7d\2\2"+ + "\u0473\u0474\7p\2\2\u0474\u0491\7g\2\2\u0475\u0476\7e\2\2\u0476\u0477"+ + "\7n\2\2\u0477\u0491\7f\2\2\u0478\u0479\7u\2\2\u0479\u047a\7d\2\2\u047a"+ + "\u0491\7e\2\2\u047b\u047c\7k\2\2\u047c\u047d\7u\2\2\u047d\u0491\7e\2\2"+ + "\u047e\u047f\7k\2\2\u047f\u0480\7p\2\2\u0480\u0491\7z\2\2\u0481\u0482"+ + "\7d\2\2\u0482\u0483\7g\2\2\u0483\u0491\7s\2\2\u0484\u0485\7u\2\2\u0485"+ + "\u0486\7g\2\2\u0486\u0491\7f\2\2\u0487\u0488\7f\2\2\u0488\u0489\7g\2\2"+ + "\u0489\u0491\7z\2\2\u048a\u048b\7k\2\2\u048b\u048c\7p\2\2\u048c\u0491"+ + "\7{\2\2\u048d\u048e\7t\2\2\u048e\u048f\7q\2\2\u048f\u0491\7t\2\2\u0490"+ + "\u03b2\3\2\2\2\u0490\u03b5\3\2\2\2\u0490\u03b8\3\2\2\2\u0490\u03bb\3\2"+ + "\2\2\u0490\u03be\3\2\2\2\u0490\u03c1\3\2\2\2\u0490\u03c4\3\2\2\2\u0490"+ + "\u03c7\3\2\2\2\u0490\u03ca\3\2\2\2\u0490\u03cd\3\2\2\2\u0490\u03d0\3\2"+ + "\2\2\u0490\u03d3\3\2\2\2\u0490\u03d6\3\2\2\2\u0490\u03d9\3\2\2\2\u0490"+ + "\u03dc\3\2\2\2\u0490\u03df\3\2\2\2\u0490\u03e2\3\2\2\2\u0490\u03e5\3\2"+ + "\2\2\u0490\u03e8\3\2\2\2\u0490\u03eb\3\2\2\2\u0490\u03ee\3\2\2\2\u0490"+ + "\u03f1\3\2\2\2\u0490\u03f4\3\2\2\2\u0490\u03f7\3\2\2\2\u0490\u03fa\3\2"+ + "\2\2\u0490\u03fd\3\2\2\2\u0490\u0400\3\2\2\2\u0490\u0403\3\2\2\2\u0490"+ + "\u0406\3\2\2\2\u0490\u0409\3\2\2\2\u0490\u040c\3\2\2\2\u0490\u040f\3\2"+ + "\2\2\u0490\u0412\3\2\2\2\u0490\u0415\3\2\2\2\u0490\u0418\3\2\2\2\u0490"+ + "\u041b\3\2\2\2\u0490\u041e\3\2\2\2\u0490\u0421\3\2\2\2\u0490\u0424\3\2"+ + "\2\2\u0490\u0427\3\2\2\2\u0490\u042a\3\2\2\2\u0490\u042d\3\2\2\2\u0490"+ + "\u0430\3\2\2\2\u0490\u0433\3\2\2\2\u0490\u0436\3\2\2\2\u0490\u0439\3\2"+ + "\2\2\u0490\u043c\3\2\2\2\u0490\u043f\3\2\2\2\u0490\u0442\3\2\2\2\u0490"+ + "\u0445\3\2\2\2\u0490\u0448\3\2\2\2\u0490\u044b\3\2\2\2\u0490\u044e\3\2"+ + "\2\2\u0490\u0451\3\2\2\2\u0490\u0454\3\2\2\2\u0490\u0457\3\2\2\2\u0490"+ + "\u045a\3\2\2\2\u0490\u045d\3\2\2\2\u0490\u0460\3\2\2\2\u0490\u0463\3\2"+ + "\2\2\u0490\u0466\3\2\2\2\u0490\u0469\3\2\2\2\u0490\u046c\3\2\2\2\u0490"+ + "\u046f\3\2\2\2\u0490\u0472\3\2\2\2\u0490\u0475\3\2\2\2\u0490\u0478\3\2"+ + "\2\2\u0490\u047b\3\2\2\2\u0490\u047e\3\2\2\2\u0490\u0481\3\2\2\2\u0490"+ + "\u0484\3\2\2\2\u0490\u0487\3\2\2\2\u0490\u048a\3\2\2\2\u0490\u048d\3\2"+ + "\2\2\u0491\u00d3\3\2\2\2\u0492\u0493\7%\2\2\u0493\u00d5\3\2\2\2\u0494"+ + "\u0495\7<\2\2\u0495\u00d7\3\2\2\2\u0496\u0497\7.\2\2\u0497\u00d9\3\2\2"+ + "\2\u0498\u0499\7*\2\2\u0499\u00db\3\2\2\2\u049a\u049b\7+\2\2\u049b\u00dd"+ + "\3\2\2\2\u049c\u049d\7]\2\2\u049d\u00df\3\2\2\2\u049e\u049f\7_\2\2\u049f"+ + "\u00e1\3\2\2\2\u04a0\u04a1\7\60\2\2\u04a1\u00e3\3\2\2\2\u04a2\u04a3\7"+ + ">\2\2\u04a3\u04a4\7>\2\2\u04a4\u00e5\3\2\2\2\u04a5\u04a6\7@\2\2\u04a6"+ + "\u04a7\7@\2\2\u04a7\u00e7\3\2\2\2\u04a8\u04a9\7-\2\2\u04a9\u00e9\3\2\2"+ + "\2\u04aa\u04ab\7/\2\2\u04ab\u00eb\3\2\2\2\u04ac\u04ad\7>\2\2\u04ad\u00ed"+ + "\3\2\2\2\u04ae\u04af\7@\2\2\u04af\u00ef\3\2\2\2\u04b0\u04b1\7,\2\2\u04b1"+ + "\u00f1\3\2\2\2\u04b2\u04b3\7\61\2\2\u04b3\u00f3\3\2\2\2\u04b4\u04b5\7"+ + "}\2\2\u04b5\u04b6\bz\t\2\u04b6\u00f5\3\2\2\2\u04b7\u04b8\7\177\2\2\u04b8"+ + "\u04b9\b{\n\2\u04b9\u00f7\3\2\2\2\u04ba\u04bd\5\u00fa}\2\u04bb\u04bd\5"+ + "\u0102\u0081\2\u04bc\u04ba\3\2\2\2\u04bc\u04bb\3\2\2\2\u04bd\u00f9\3\2"+ + "\2\2\u04be\u04c2\5\u00fc~\2\u04bf\u04c2\5\u00fe\177\2\u04c0\u04c2\5\u0100"+ + "\u0080\2\u04c1\u04be\3\2\2\2\u04c1\u04bf\3\2\2\2\u04c1\u04c0\3\2\2\2\u04c2"+ + "\u00fb\3\2\2\2\u04c3\u04c7\7\'\2\2\u04c4\u04c6\5\u010a\u0085\2\u04c5\u04c4"+ + "\3\2\2\2\u04c6\u04c9\3\2\2\2\u04c7\u04c5\3\2\2\2\u04c7\u04c8\3\2\2\2\u04c8"+ + "\u04ca\3\2\2\2\u04c9\u04c7\3\2\2\2\u04ca\u04cc\7\60\2\2\u04cb\u04cd\5"+ + "\u010a\u0085\2\u04cc\u04cb\3\2\2\2\u04cd\u04ce\3\2\2\2\u04ce\u04cc\3\2"+ + "\2\2\u04ce\u04cf\3\2\2\2\u04cf\u00fd\3\2\2\2\u04d0\u04d2\5\u010c\u0086"+ + "\2\u04d1\u04d0\3\2\2\2\u04d2\u04d5\3\2\2\2\u04d3\u04d1\3\2\2\2\u04d3\u04d4"+ + "\3\2\2\2\u04d4\u04d6\3\2\2\2\u04d5\u04d3\3\2\2\2\u04d6\u04d8\7\60\2\2"+ + "\u04d7\u04d9\5\u010c\u0086\2\u04d8\u04d7\3\2\2\2\u04d9\u04da\3\2\2\2\u04da"+ + "\u04d8\3\2\2\2\u04da\u04db\3\2\2\2\u04db\u00ff\3\2\2\2\u04dc\u04e0\7&"+ + "\2\2\u04dd\u04df\5\u010e\u0087\2\u04de\u04dd\3\2\2\2\u04df\u04e2\3\2\2"+ + "\2\u04e0\u04de\3\2\2\2\u04e0\u04e1\3\2\2\2\u04e1\u04e3\3\2\2\2\u04e2\u04e0"+ + "\3\2\2\2\u04e3\u04e5\7\60\2\2\u04e4\u04e6\5\u010e\u0087\2\u04e5\u04e4"+ + "\3\2\2\2\u04e6\u04e7\3\2\2\2\u04e7\u04e5\3\2\2\2\u04e7\u04e8\3\2\2\2\u04e8"+ + "\u0101\3\2\2\2\u04e9\u04ed\5\u0106\u0083\2\u04ea\u04ed\5\u0108\u0084\2"+ + "\u04eb\u04ed\5\u0104\u0082\2\u04ec\u04e9\3\2\2\2\u04ec\u04ea\3\2\2\2\u04ec"+ + "\u04eb\3\2\2\2\u04ed\u0103\3\2\2\2\u04ee\u04f0\7\'\2\2\u04ef\u04f1\5\u010a"+ + "\u0085\2\u04f0\u04ef\3\2\2\2\u04f1\u04f2\3\2\2\2\u04f2\u04f0\3\2\2\2\u04f2"+ + "\u04f3\3\2\2\2\u04f3\u0105\3\2\2\2\u04f4\u04f6\5\u010c\u0086\2\u04f5\u04f4"+ "\3\2\2\2\u04f6\u04f7\3\2\2\2\u04f7\u04f5\3\2\2\2\u04f7\u04f8\3\2\2\2\u04f8"+ - "\u0107\3\2\2\2\u04f9\u04fa\t\13\2\2\u04fa\u0109\3\2\2\2\u04fb\u04fc\t"+ - "\f\2\2\u04fc\u010b\3\2\2\2\u04fd\u04fe\t\r\2\2\u04fe\u010d\3\2\2\2\u04ff"+ - "\u0503\7)\2\2\u0500\u0501\7^\2\2\u0501\u0504\t\6\2\2\u0502\u0504\n\7\2"+ - "\2\u0503\u0500\3\2\2\2\u0503\u0502\3\2\2\2\u0504\u0505\3\2\2\2\u0505\u0506"+ - "\7)\2\2\u0506\u010f\3\2\2\2\u0507\u0509\5\u0112\u0089\2\u0508\u050a\t"+ - "\22\2\2\u0509\u0508\3\2\2\2\u050a\u050b\3\2\2\2\u050b\u0509\3\2\2\2\u050b"+ - "\u050c\3\2\2\2\u050c\u0111\3\2\2\2\u050d\u0511\7#\2\2\u050e\u0510\5\u0118"+ - "\u008c\2\u050f\u050e\3\2\2\2\u0510\u0513\3\2\2\2\u0511\u050f\3\2\2\2\u0511"+ - "\u0512\3\2\2\2\u0512\u0113\3\2\2\2\u0513\u0511\3\2\2\2\u0514\u0518\5\u0116"+ - "\u008b\2\u0515\u0517\5\u0118\u008c\2\u0516\u0515\3\2\2\2\u0517\u051a\3"+ - "\2\2\2\u0518\u0516\3\2\2\2\u0518\u0519\3\2\2\2\u0519\u0115\3\2\2\2\u051a"+ - "\u0518\3\2\2\2\u051b\u051c\t\16\2\2\u051c\u0117\3\2\2\2\u051d\u051e\t"+ - "\17\2\2\u051e\u0119\3\2\2\2\u051f\u0521\t\20\2\2\u0520\u051f\3\2\2\2\u0521"+ - "\u0522\3\2\2\2\u0522\u0520\3\2\2\2\u0522\u0523\3\2\2\2\u0523\u0524\3\2"+ - "\2\2\u0524\u0525\b\u008d\7\2\u0525\u011b\3\2\2\2\u0526\u0527\7\61\2\2"+ - "\u0527\u0528\7\61\2\2\u0528\u052c\3\2\2\2\u0529\u052b\n\21\2\2\u052a\u0529"+ - "\3\2\2\2\u052b\u052e\3\2\2\2\u052c\u052a\3\2\2\2\u052c\u052d\3\2\2\2\u052d"+ - "\u052f\3\2\2\2\u052e\u052c\3\2\2\2\u052f\u0530\b\u008e\b\2\u0530\u011d"+ - "\3\2\2\2\u0531\u0532\7\61\2\2\u0532\u0533\7,\2\2\u0533\u0537\3\2\2\2\u0534"+ - "\u0536\13\2\2\2\u0535\u0534\3\2\2\2\u0536\u0539\3\2\2\2\u0537\u0538\3"+ - "\2\2\2\u0537\u0535\3\2\2\2\u0538\u053a\3\2\2\2\u0539\u0537\3\2\2\2\u053a"+ - "\u053b\7,\2\2\u053b\u053c\7\61\2\2\u053c\u053d\3\2\2\2\u053d\u053e\b\u008f"+ - "\b\2\u053e\u011f\3\2\2\2:\2\3\u0189\u02ae\u02d5\u02e0\u02e8\u02f2\u02f4"+ - "\u02f9\u02fd\u02ff\u0302\u030a\u0310\u0315\u031c\u0321\u0328\u032d\u0334"+ - "\u033b\u0340\u0347\u034c\u0351\u0358\u035e\u0360\u0365\u036c\u0371\u037d"+ - "\u0389\u0393\u039e\u048a\u04b6\u04bb\u04c1\u04c8\u04cd\u04d4\u04da\u04e1"+ - "\u04e6\u04ec\u04f1\u04f7\u0503\u050b\u0511\u0518\u0522\u052c\u0537\13"+ - "\3\2\2\3&\3\3A\4\3S\5\3a\6\2\3\2\2\4\2\3y\7\3z\b"; + "\u0107\3\2\2\2\u04f9\u04fb\7&\2\2\u04fa\u04fc\5\u010e\u0087\2\u04fb\u04fa"+ + "\3\2\2\2\u04fc\u04fd\3\2\2\2\u04fd\u04fb\3\2\2\2\u04fd\u04fe\3\2\2\2\u04fe"+ + "\u0109\3\2\2\2\u04ff\u0500\t\13\2\2\u0500\u010b\3\2\2\2\u0501\u0502\t"+ + "\f\2\2\u0502\u010d\3\2\2\2\u0503\u0504\t\r\2\2\u0504\u010f\3\2\2\2\u0505"+ + "\u0509\7)\2\2\u0506\u0507\7^\2\2\u0507\u050a\t\6\2\2\u0508\u050a\n\7\2"+ + "\2\u0509\u0506\3\2\2\2\u0509\u0508\3\2\2\2\u050a\u050b\3\2\2\2\u050b\u050c"+ + "\7)\2\2\u050c\u0111\3\2\2\2\u050d\u050f\5\u0114\u008a\2\u050e\u0510\t"+ + "\22\2\2\u050f\u050e\3\2\2\2\u0510\u0511\3\2\2\2\u0511\u050f\3\2\2\2\u0511"+ + "\u0512\3\2\2\2\u0512\u0113\3\2\2\2\u0513\u0517\7#\2\2\u0514\u0516\5\u011a"+ + "\u008d\2\u0515\u0514\3\2\2\2\u0516\u0519\3\2\2\2\u0517\u0515\3\2\2\2\u0517"+ + "\u0518\3\2\2\2\u0518\u0115\3\2\2\2\u0519\u0517\3\2\2\2\u051a\u051e\5\u0118"+ + "\u008c\2\u051b\u051d\5\u011a\u008d\2\u051c\u051b\3\2\2\2\u051d\u0520\3"+ + "\2\2\2\u051e\u051c\3\2\2\2\u051e\u051f\3\2\2\2\u051f\u0117\3\2\2\2\u0520"+ + "\u051e\3\2\2\2\u0521\u0522\t\16\2\2\u0522\u0119\3\2\2\2\u0523\u0524\t"+ + "\17\2\2\u0524\u011b\3\2\2\2\u0525\u0527\t\20\2\2\u0526\u0525\3\2\2\2\u0527"+ + "\u0528\3\2\2\2\u0528\u0526\3\2\2\2\u0528\u0529\3\2\2\2\u0529\u052a\3\2"+ + "\2\2\u052a\u052b\b\u008e\7\2\u052b\u011d\3\2\2\2\u052c\u052d\7\61\2\2"+ + "\u052d\u052e\7\61\2\2\u052e\u0532\3\2\2\2\u052f\u0531\n\21\2\2\u0530\u052f"+ + "\3\2\2\2\u0531\u0534\3\2\2\2\u0532\u0530\3\2\2\2\u0532\u0533\3\2\2\2\u0533"+ + "\u0535\3\2\2\2\u0534\u0532\3\2\2\2\u0535\u0536\b\u008f\b\2\u0536\u011f"+ + "\3\2\2\2\u0537\u0538\7\61\2\2\u0538\u0539\7,\2\2\u0539\u053d\3\2\2\2\u053a"+ + "\u053c\13\2\2\2\u053b\u053a\3\2\2\2\u053c\u053f\3\2\2\2\u053d\u053e\3"+ + "\2\2\2\u053d\u053b\3\2\2\2\u053e\u0540\3\2\2\2\u053f\u053d\3\2\2\2\u0540"+ + "\u0541\7,\2\2\u0541\u0542\7\61\2\2\u0542\u0543\3\2\2\2\u0543\u0544\b\u0090"+ + "\b\2\u0544\u0121\3\2\2\2:\2\3\u018b\u02b4\u02db\u02e6\u02ee\u02f8\u02fa"+ + "\u02ff\u0303\u0305\u0308\u0310\u0316\u031b\u0322\u0327\u032e\u0333\u033a"+ + "\u0341\u0346\u034d\u0352\u0357\u035e\u0364\u0366\u036b\u0372\u0377\u0383"+ + "\u038f\u0399\u03a4\u0490\u04bc\u04c1\u04c7\u04ce\u04d3\u04da\u04e0\u04e7"+ + "\u04ec\u04f2\u04f7\u04fd\u0509\u0511\u0517\u051e\u0528\u0532\u053d\13"+ + "\3\2\2\3&\3\3B\4\3T\5\3b\6\2\3\2\2\4\2\3z\7\3{\b"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens index c1a5d096f..db1cd5f56 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -42,95 +42,96 @@ RESERVE=41 PC=42 TARGET=43 LINK=44 -CODESEG=45 -DATASEG=46 -ENCODING=47 -CONST=48 -EXTERN=49 -EXPORT=50 -ALIGN=51 -REGISTER=52 -INLINE=53 -VOLATILE=54 -INTERRUPT=55 -IF=56 -ELSE=57 -WHILE=58 -DO=59 -FOR=60 -SWITCH=61 -RETURN=62 -BREAK=63 -CONTINUE=64 -ASM=65 -DEFAULT=66 -CASE=67 -STRUCT=68 -ENUM=69 -SIZEOF=70 -TYPEID=71 -KICKASM=72 -RESOURCE=73 -USES=74 -CLOBBERS=75 -BYTES=76 -CYCLES=77 -LOGIC_NOT=78 -SIGNEDNESS=79 -SIMPLETYPE=80 -BOOLEAN=81 -KICKASM_BODY=82 -STRING=83 -CHAR=84 -NUMBER=85 -NUMFLOAT=86 -BINFLOAT=87 -DECFLOAT=88 -HEXFLOAT=89 -NUMINT=90 -BININTEGER=91 -DECINTEGER=92 -HEXINTEGER=93 -NAME=94 -WS=95 -COMMENT_LINE=96 -COMMENT_BLOCK=97 -ASM_BYTE=98 -ASM_MNEMONIC=99 -ASM_IMM=100 -ASM_COLON=101 -ASM_COMMA=102 -ASM_PAR_BEGIN=103 -ASM_PAR_END=104 -ASM_BRACKET_BEGIN=105 -ASM_BRACKET_END=106 -ASM_DOT=107 -ASM_SHIFT_LEFT=108 -ASM_SHIFT_RIGHT=109 -ASM_PLUS=110 -ASM_MINUS=111 -ASM_LESS_THAN=112 -ASM_GREATER_THAN=113 -ASM_MULTIPLY=114 -ASM_DIVIDE=115 -ASM_CURLY_BEGIN=116 -ASM_CURLY_END=117 -ASM_NUMBER=118 -ASM_NUMFLOAT=119 -ASM_BINFLOAT=120 -ASM_DECFLOAT=121 -ASM_HEXFLOAT=122 -ASM_NUMINT=123 -ASM_BININTEGER=124 -ASM_DECINTEGER=125 -ASM_HEXINTEGER=126 -ASM_CHAR=127 -ASM_MULTI_REL=128 -ASM_MULTI_NAME=129 -ASM_NAME=130 -ASM_WS=131 -ASM_COMMENT_LINE=132 -ASM_COMMENT_BLOCK=133 +CPU=45 +CODESEG=46 +DATASEG=47 +ENCODING=48 +CONST=49 +EXTERN=50 +EXPORT=51 +ALIGN=52 +REGISTER=53 +INLINE=54 +VOLATILE=55 +INTERRUPT=56 +IF=57 +ELSE=58 +WHILE=59 +DO=60 +FOR=61 +SWITCH=62 +RETURN=63 +BREAK=64 +CONTINUE=65 +ASM=66 +DEFAULT=67 +CASE=68 +STRUCT=69 +ENUM=70 +SIZEOF=71 +TYPEID=72 +KICKASM=73 +RESOURCE=74 +USES=75 +CLOBBERS=76 +BYTES=77 +CYCLES=78 +LOGIC_NOT=79 +SIGNEDNESS=80 +SIMPLETYPE=81 +BOOLEAN=82 +KICKASM_BODY=83 +STRING=84 +CHAR=85 +NUMBER=86 +NUMFLOAT=87 +BINFLOAT=88 +DECFLOAT=89 +HEXFLOAT=90 +NUMINT=91 +BININTEGER=92 +DECINTEGER=93 +HEXINTEGER=94 +NAME=95 +WS=96 +COMMENT_LINE=97 +COMMENT_BLOCK=98 +ASM_BYTE=99 +ASM_MNEMONIC=100 +ASM_IMM=101 +ASM_COLON=102 +ASM_COMMA=103 +ASM_PAR_BEGIN=104 +ASM_PAR_END=105 +ASM_BRACKET_BEGIN=106 +ASM_BRACKET_END=107 +ASM_DOT=108 +ASM_SHIFT_LEFT=109 +ASM_SHIFT_RIGHT=110 +ASM_PLUS=111 +ASM_MINUS=112 +ASM_LESS_THAN=113 +ASM_GREATER_THAN=114 +ASM_MULTIPLY=115 +ASM_DIVIDE=116 +ASM_CURLY_BEGIN=117 +ASM_CURLY_END=118 +ASM_NUMBER=119 +ASM_NUMFLOAT=120 +ASM_BINFLOAT=121 +ASM_DECFLOAT=122 +ASM_HEXFLOAT=123 +ASM_NUMINT=124 +ASM_BININTEGER=125 +ASM_DECINTEGER=126 +ASM_HEXINTEGER=127 +ASM_CHAR=128 +ASM_MULTI_REL=129 +ASM_MULTI_NAME=130 +ASM_NAME=131 +ASM_WS=132 +ASM_COMMENT_LINE=133 +ASM_COMMENT_BLOCK=134 ';'=8 '..'=11 '?'=12 @@ -156,39 +157,40 @@ ASM_COMMENT_BLOCK=133 'pc'=42 'target'=43 'link'=44 -'code_seg'=45 -'data_seg'=46 -'encoding'=47 -'const'=48 -'extern'=49 -'export'=50 -'align'=51 -'register'=52 -'inline'=53 -'volatile'=54 -'interrupt'=55 -'if'=56 -'else'=57 -'while'=58 -'do'=59 -'for'=60 -'switch'=61 -'return'=62 -'break'=63 -'continue'=64 -'asm'=65 -'default'=66 -'case'=67 -'struct'=68 -'enum'=69 -'sizeof'=70 -'typeid'=71 -'kickasm'=72 -'resource'=73 -'uses'=74 -'clobbers'=75 -'bytes'=76 -'cycles'=77 -'!'=78 -'.byte'=98 -'#'=100 +'cpu'=45 +'code_seg'=46 +'data_seg'=47 +'encoding'=48 +'const'=49 +'extern'=50 +'export'=51 +'align'=52 +'register'=53 +'inline'=54 +'volatile'=55 +'interrupt'=56 +'if'=57 +'else'=58 +'while'=59 +'do'=60 +'for'=61 +'switch'=62 +'return'=63 +'break'=64 +'continue'=65 +'asm'=66 +'default'=67 +'case'=68 +'struct'=69 +'enum'=70 +'sizeof'=71 +'typeid'=72 +'kickasm'=73 +'resource'=74 +'uses'=75 +'clobbers'=76 +'bytes'=77 +'cycles'=78 +'!'=79 +'.byte'=99 +'#'=101 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 index b87f896c3..9b2c14912 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 @@ -86,6 +86,7 @@ globalDirective : (PRAGMA RESERVE) PAR_BEGIN NUMBER ( COMMA NUMBER )* PAR_END #globalDirectiveReserve | (PRAGMA PC) PAR_BEGIN NUMBER PAR_END #globalDirectivePc | (PRAGMA TARGET) PAR_BEGIN NAME PAR_END #globalDirectivePlatform + | (PRAGMA CPU) PAR_BEGIN NAME PAR_END #globalDirectiveCpu | (PRAGMA LINK) PAR_BEGIN STRING PAR_END #globalDirectiveLinkScript | (PRAGMA CODESEG) PAR_BEGIN NAME PAR_END #globalDirectiveCodeSeg | (PRAGMA DATASEG) PAR_BEGIN NAME PAR_END #globalDirectiveDataSeg diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 164bd4ebb..13c25b9c7 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -26,23 +26,23 @@ public class KickCParser extends Parser { SHIFT_RIGHT=27, EQUAL=28, NOT_EQUAL=29, LESS_THAN=30, LESS_THAN_EQUAL=31, GREATER_THAN_EQUAL=32, GREATER_THAN=33, LOGIC_AND=34, LOGIC_OR=35, ASSIGN=36, ASSIGN_COMPOUND=37, IMPORT=38, TYPEDEF=39, PRAGMA=40, RESERVE=41, PC=42, - TARGET=43, LINK=44, CODESEG=45, DATASEG=46, ENCODING=47, CONST=48, EXTERN=49, - EXPORT=50, ALIGN=51, REGISTER=52, INLINE=53, VOLATILE=54, INTERRUPT=55, - IF=56, ELSE=57, WHILE=58, DO=59, FOR=60, SWITCH=61, RETURN=62, BREAK=63, - CONTINUE=64, ASM=65, DEFAULT=66, CASE=67, STRUCT=68, ENUM=69, SIZEOF=70, - TYPEID=71, KICKASM=72, RESOURCE=73, USES=74, CLOBBERS=75, BYTES=76, CYCLES=77, - LOGIC_NOT=78, SIGNEDNESS=79, SIMPLETYPE=80, BOOLEAN=81, KICKASM_BODY=82, - STRING=83, CHAR=84, NUMBER=85, NUMFLOAT=86, BINFLOAT=87, DECFLOAT=88, - HEXFLOAT=89, NUMINT=90, BININTEGER=91, DECINTEGER=92, HEXINTEGER=93, NAME=94, - WS=95, COMMENT_LINE=96, COMMENT_BLOCK=97, ASM_BYTE=98, ASM_MNEMONIC=99, - ASM_IMM=100, ASM_COLON=101, ASM_COMMA=102, ASM_PAR_BEGIN=103, ASM_PAR_END=104, - ASM_BRACKET_BEGIN=105, ASM_BRACKET_END=106, ASM_DOT=107, ASM_SHIFT_LEFT=108, - ASM_SHIFT_RIGHT=109, ASM_PLUS=110, ASM_MINUS=111, ASM_LESS_THAN=112, ASM_GREATER_THAN=113, - ASM_MULTIPLY=114, ASM_DIVIDE=115, ASM_CURLY_BEGIN=116, ASM_CURLY_END=117, - ASM_NUMBER=118, ASM_NUMFLOAT=119, ASM_BINFLOAT=120, ASM_DECFLOAT=121, - ASM_HEXFLOAT=122, ASM_NUMINT=123, ASM_BININTEGER=124, ASM_DECINTEGER=125, - ASM_HEXINTEGER=126, ASM_CHAR=127, ASM_MULTI_REL=128, ASM_MULTI_NAME=129, - ASM_NAME=130, ASM_WS=131, ASM_COMMENT_LINE=132, ASM_COMMENT_BLOCK=133; + TARGET=43, LINK=44, CPU=45, CODESEG=46, DATASEG=47, ENCODING=48, CONST=49, + EXTERN=50, EXPORT=51, ALIGN=52, REGISTER=53, INLINE=54, VOLATILE=55, INTERRUPT=56, + IF=57, ELSE=58, WHILE=59, DO=60, FOR=61, SWITCH=62, RETURN=63, BREAK=64, + CONTINUE=65, ASM=66, DEFAULT=67, CASE=68, STRUCT=69, ENUM=70, SIZEOF=71, + TYPEID=72, KICKASM=73, RESOURCE=74, USES=75, CLOBBERS=76, BYTES=77, CYCLES=78, + LOGIC_NOT=79, SIGNEDNESS=80, SIMPLETYPE=81, BOOLEAN=82, KICKASM_BODY=83, + STRING=84, CHAR=85, NUMBER=86, NUMFLOAT=87, BINFLOAT=88, DECFLOAT=89, + HEXFLOAT=90, NUMINT=91, BININTEGER=92, DECINTEGER=93, HEXINTEGER=94, NAME=95, + WS=96, COMMENT_LINE=97, COMMENT_BLOCK=98, ASM_BYTE=99, ASM_MNEMONIC=100, + ASM_IMM=101, ASM_COLON=102, ASM_COMMA=103, ASM_PAR_BEGIN=104, ASM_PAR_END=105, + ASM_BRACKET_BEGIN=106, ASM_BRACKET_END=107, ASM_DOT=108, ASM_SHIFT_LEFT=109, + ASM_SHIFT_RIGHT=110, ASM_PLUS=111, ASM_MINUS=112, ASM_LESS_THAN=113, ASM_GREATER_THAN=114, + ASM_MULTIPLY=115, ASM_DIVIDE=116, ASM_CURLY_BEGIN=117, ASM_CURLY_END=118, + ASM_NUMBER=119, ASM_NUMFLOAT=120, ASM_BINFLOAT=121, ASM_DECFLOAT=122, + ASM_HEXFLOAT=123, ASM_NUMINT=124, ASM_BININTEGER=125, ASM_DECINTEGER=126, + ASM_HEXINTEGER=127, ASM_CHAR=128, ASM_MULTI_REL=129, ASM_MULTI_NAME=130, + ASM_NAME=131, ASM_WS=132, ASM_COMMENT_LINE=133, ASM_COMMENT_BLOCK=134; public static final int RULE_file = 0, RULE_asmFile = 1, RULE_declSeq = 2, RULE_declOrImport = 3, RULE_importDecl = 4, RULE_decl = 5, RULE_typeDef = 6, RULE_declTypes = 7, @@ -72,7 +72,7 @@ public class KickCParser extends Parser { "'?'", null, "'->'", null, null, null, null, "'%'", "'++'", "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'import'", "'typedef'", "'#pragma'", - "'reserve'", "'pc'", "'target'", "'link'", "'code_seg'", "'data_seg'", + "'reserve'", "'pc'", "'target'", "'link'", "'cpu'", "'code_seg'", "'data_seg'", "'encoding'", "'const'", "'extern'", "'export'", "'align'", "'register'", "'inline'", "'volatile'", "'interrupt'", "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'", "'asm'", @@ -88,16 +88,16 @@ public class KickCParser extends Parser { "DEC", "AND", "BIT_NOT", "BIT_XOR", "BIT_OR", "SHIFT_LEFT", "SHIFT_RIGHT", "EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_EQUAL", "GREATER_THAN_EQUAL", "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", - "IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CODESEG", - "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", "REGISTER", - "INLINE", "VOLATILE", "INTERRUPT", "IF", "ELSE", "WHILE", "DO", "FOR", - "SWITCH", "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", "CASE", "STRUCT", - "ENUM", "SIZEOF", "TYPEID", "KICKASM", "RESOURCE", "USES", "CLOBBERS", - "BYTES", "CYCLES", "LOGIC_NOT", "SIGNEDNESS", "SIMPLETYPE", "BOOLEAN", - "KICKASM_BODY", "STRING", "CHAR", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", - "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", "ASM_MNEMONIC", "ASM_IMM", - "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_PAR_END", "ASM_BRACKET_BEGIN", + "IMPORT", "TYPEDEF", "PRAGMA", "RESERVE", "PC", "TARGET", "LINK", "CPU", + "CODESEG", "DATASEG", "ENCODING", "CONST", "EXTERN", "EXPORT", "ALIGN", + "REGISTER", "INLINE", "VOLATILE", "INTERRUPT", "IF", "ELSE", "WHILE", + "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", "ASM", "DEFAULT", + "CASE", "STRUCT", "ENUM", "SIZEOF", "TYPEID", "KICKASM", "RESOURCE", "USES", + "CLOBBERS", "BYTES", "CYCLES", "LOGIC_NOT", "SIGNEDNESS", "SIMPLETYPE", + "BOOLEAN", "KICKASM_BODY", "STRING", "CHAR", "NUMBER", "NUMFLOAT", "BINFLOAT", + "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", + "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", "ASM_MNEMONIC", + "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_PAR_END", "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", "ASM_NUMFLOAT", "ASM_BINFLOAT", @@ -293,7 +293,7 @@ public class KickCParser extends Parser { setState(95); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << IMPORT) | (1L << TYPEDEF) | (1L << PRAGMA) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (STRUCT - 68)) | (1L << (ENUM - 68)) | (1L << (KICKASM - 68)) | (1L << (SIGNEDNESS - 68)) | (1L << (SIMPLETYPE - 68)))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << IMPORT) | (1L << TYPEDEF) | (1L << PRAGMA) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (KICKASM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0)) { { { setState(92); @@ -977,7 +977,7 @@ public class KickCParser extends Parser { setState(168); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (STRUCT - 68)) | (1L << (ENUM - 68)) | (1L << (SIGNEDNESS - 68)) | (1L << (SIMPLETYPE - 68)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0)) { { setState(167); parameterListDecl(); @@ -991,7 +991,7 @@ public class KickCParser extends Parser { setState(173); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN) | (1L << BREAK))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { setState(172); stmtSeq(); @@ -1207,6 +1207,27 @@ public class KickCParser extends Parser { else return visitor.visitChildren(this); } } + public static class GlobalDirectiveCpuContext extends GlobalDirectiveContext { + public TerminalNode PAR_BEGIN() { return getToken(KickCParser.PAR_BEGIN, 0); } + public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public TerminalNode PAR_END() { return getToken(KickCParser.PAR_END, 0); } + public TerminalNode PRAGMA() { return getToken(KickCParser.PRAGMA, 0); } + public TerminalNode CPU() { return getToken(KickCParser.CPU, 0); } + public GlobalDirectiveCpuContext(GlobalDirectiveContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterGlobalDirectiveCpu(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitGlobalDirectiveCpu(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitGlobalDirectiveCpu(this); + else return visitor.visitChildren(this); + } + } public static class GlobalDirectivePcContext extends GlobalDirectiveContext { public TerminalNode PAR_BEGIN() { return getToken(KickCParser.PAR_BEGIN, 0); } public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); } @@ -1339,7 +1360,7 @@ public class KickCParser extends Parser { enterRule(_localctx, 28, RULE_globalDirective); int _la; try { - setState(240); + setState(246); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { case 1: @@ -1413,50 +1434,50 @@ public class KickCParser extends Parser { } break; case 4: - _localctx = new GlobalDirectiveLinkScriptContext(_localctx); + _localctx = new GlobalDirectiveCpuContext(_localctx); enterOuterAlt(_localctx, 4); { { setState(216); match(PRAGMA); setState(217); - match(LINK); + match(CPU); } setState(219); match(PAR_BEGIN); setState(220); - match(STRING); + match(NAME); setState(221); match(PAR_END); } break; case 5: - _localctx = new GlobalDirectiveCodeSegContext(_localctx); + _localctx = new GlobalDirectiveLinkScriptContext(_localctx); enterOuterAlt(_localctx, 5); { { setState(222); match(PRAGMA); setState(223); - match(CODESEG); + match(LINK); } setState(225); match(PAR_BEGIN); setState(226); - match(NAME); + match(STRING); setState(227); match(PAR_END); } break; case 6: - _localctx = new GlobalDirectiveDataSegContext(_localctx); + _localctx = new GlobalDirectiveCodeSegContext(_localctx); enterOuterAlt(_localctx, 6); { { setState(228); match(PRAGMA); setState(229); - match(DATASEG); + match(CODESEG); } setState(231); match(PAR_BEGIN); @@ -1467,14 +1488,14 @@ public class KickCParser extends Parser { } break; case 7: - _localctx = new GlobalDirectiveEncodingContext(_localctx); + _localctx = new GlobalDirectiveDataSegContext(_localctx); enterOuterAlt(_localctx, 7); { { setState(234); match(PRAGMA); setState(235); - match(ENCODING); + match(DATASEG); } setState(237); match(PAR_BEGIN); @@ -1484,6 +1505,24 @@ public class KickCParser extends Parser { match(PAR_END); } break; + case 8: + _localctx = new GlobalDirectiveEncodingContext(_localctx); + enterOuterAlt(_localctx, 8); + { + { + setState(240); + match(PRAGMA); + setState(241); + match(ENCODING); + } + setState(243); + match(PAR_BEGIN); + setState(244); + match(NAME); + setState(245); + match(PAR_END); + } + break; } } catch (RecognitionException re) { @@ -1687,14 +1726,14 @@ public class KickCParser extends Parser { enterRule(_localctx, 30, RULE_directive); int _la; try { - setState(274); + setState(280); _errHandler.sync(this); switch (_input.LA(1)) { case CONST: _localctx = new DirectiveConstContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(242); + setState(248); match(CONST); } break; @@ -1702,7 +1741,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExternContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(243); + setState(249); match(EXTERN); } break; @@ -1710,7 +1749,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExportContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(244); + setState(250); match(EXPORT); } break; @@ -1718,13 +1757,13 @@ public class KickCParser extends Parser { _localctx = new DirectiveAlignContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(245); + setState(251); match(ALIGN); - setState(246); + setState(252); match(PAR_BEGIN); - setState(247); + setState(253); match(NUMBER); - setState(248); + setState(254); match(PAR_END); } break; @@ -1732,16 +1771,16 @@ public class KickCParser extends Parser { _localctx = new DirectiveRegisterContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(249); + setState(255); match(REGISTER); - setState(253); + setState(259); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: { - setState(250); + setState(256); match(PAR_BEGIN); - setState(251); + setState(257); _la = _input.LA(1); if ( !(_la==NUMBER || _la==NAME) ) { _errHandler.recoverInline(this); @@ -1751,7 +1790,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(252); + setState(258); match(PAR_END); } break; @@ -1762,7 +1801,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveInlineContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(255); + setState(261); match(INLINE); } break; @@ -1770,7 +1809,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveVolatileContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(256); + setState(262); match(VOLATILE); } break; @@ -1778,18 +1817,18 @@ public class KickCParser extends Parser { _localctx = new DirectiveInterruptContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(257); + setState(263); match(INTERRUPT); - setState(261); + setState(267); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: { - setState(258); + setState(264); match(PAR_BEGIN); - setState(259); + setState(265); match(NAME); - setState(260); + setState(266); match(PAR_END); } break; @@ -1800,29 +1839,29 @@ public class KickCParser extends Parser { _localctx = new DirectiveReserveZpContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(263); + setState(269); match(RESERVE); - setState(264); - match(PAR_BEGIN); - setState(265); - match(NUMBER); setState(270); + match(PAR_BEGIN); + setState(271); + match(NUMBER); + setState(276); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(266); + setState(272); match(COMMA); - setState(267); + setState(273); match(NUMBER); } } - setState(272); + setState(278); _errHandler.sync(this); _la = _input.LA(1); } - setState(273); + setState(279); match(PAR_END); } break; @@ -1874,20 +1913,20 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(277); + setState(283); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(276); + setState(282); stmt(); } } - setState(279); + setState(285); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN) | (1L << BREAK))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0) ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0) ); } } catch (RecognitionException re) { @@ -2225,16 +2264,16 @@ public class KickCParser extends Parser { enterRule(_localctx, 34, RULE_stmt); int _la; try { - setState(365); + setState(371); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { case 1: _localctx = new StmtDeclVarContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(281); + setState(287); declVariables(); - setState(282); + setState(288); match(SEMICOLON); } break; @@ -2242,19 +2281,19 @@ public class KickCParser extends Parser { _localctx = new StmtBlockContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(284); + setState(290); match(CURLY_BEGIN); - setState(286); + setState(292); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN) | (1L << BREAK))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(285); + setState(291); stmtSeq(); } } - setState(288); + setState(294); match(CURLY_END); } break; @@ -2262,9 +2301,9 @@ public class KickCParser extends Parser { _localctx = new StmtExprContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(289); + setState(295); commaExpr(0); - setState(290); + setState(296); match(SEMICOLON); } break; @@ -2272,24 +2311,24 @@ public class KickCParser extends Parser { _localctx = new StmtIfElseContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(292); + setState(298); match(IF); - setState(293); - match(PAR_BEGIN); - setState(294); - commaExpr(0); - setState(295); - match(PAR_END); - setState(296); - stmt(); setState(299); + match(PAR_BEGIN); + setState(300); + commaExpr(0); + setState(301); + match(PAR_END); + setState(302); + stmt(); + setState(305); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { case 1: { - setState(297); + setState(303); match(ELSE); - setState(298); + setState(304); stmt(); } break; @@ -2300,29 +2339,29 @@ public class KickCParser extends Parser { _localctx = new StmtWhileContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(304); + setState(310); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0)) { { { - setState(301); + setState(307); directive(); } } - setState(306); + setState(312); _errHandler.sync(this); _la = _input.LA(1); } - setState(307); + setState(313); match(WHILE); - setState(308); + setState(314); match(PAR_BEGIN); - setState(309); + setState(315); commaExpr(0); - setState(310); + setState(316); match(PAR_END); - setState(311); + setState(317); stmt(); } break; @@ -2330,33 +2369,33 @@ public class KickCParser extends Parser { _localctx = new StmtDoWhileContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(316); + setState(322); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0)) { { { - setState(313); + setState(319); directive(); } } - setState(318); + setState(324); _errHandler.sync(this); _la = _input.LA(1); } - setState(319); - match(DO); - setState(320); - stmt(); - setState(321); - match(WHILE); - setState(322); - match(PAR_BEGIN); - setState(323); - commaExpr(0); - setState(324); - match(PAR_END); setState(325); + match(DO); + setState(326); + stmt(); + setState(327); + match(WHILE); + setState(328); + match(PAR_BEGIN); + setState(329); + commaExpr(0); + setState(330); + match(PAR_END); + setState(331); match(SEMICOLON); } break; @@ -2364,29 +2403,29 @@ public class KickCParser extends Parser { _localctx = new StmtForContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(330); + setState(336); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0)) { { { - setState(327); + setState(333); directive(); } } - setState(332); + setState(338); _errHandler.sync(this); _la = _input.LA(1); } - setState(333); + setState(339); match(FOR); - setState(334); + setState(340); match(PAR_BEGIN); - setState(335); + setState(341); forLoop(); - setState(336); + setState(342); match(PAR_END); - setState(337); + setState(343); stmt(); } break; @@ -2394,19 +2433,19 @@ public class KickCParser extends Parser { _localctx = new StmtSwitchContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(339); - match(SWITCH); - setState(340); - match(PAR_BEGIN); - setState(341); - commaExpr(0); - setState(342); - match(PAR_END); - setState(343); - match(CURLY_BEGIN); - setState(344); - switchCases(); setState(345); + match(SWITCH); + setState(346); + match(PAR_BEGIN); + setState(347); + commaExpr(0); + setState(348); + match(PAR_END); + setState(349); + match(CURLY_BEGIN); + setState(350); + switchCases(); + setState(351); match(CURLY_END); } break; @@ -2414,19 +2453,19 @@ public class KickCParser extends Parser { _localctx = new StmtReturnContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(347); + setState(353); match(RETURN); - setState(349); + setState(355); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (SIZEOF - 70)) | (1L << (TYPEID - 70)) | (1L << (LOGIC_NOT - 70)) | (1L << (BOOLEAN - 70)) | (1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)))) != 0)) { { - setState(348); + setState(354); commaExpr(0); } } - setState(351); + setState(357); match(SEMICOLON); } break; @@ -2434,9 +2473,9 @@ public class KickCParser extends Parser { _localctx = new StmtBreakContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(352); + setState(358); match(BREAK); - setState(353); + setState(359); match(SEMICOLON); } break; @@ -2444,9 +2483,9 @@ public class KickCParser extends Parser { _localctx = new StmtContinueContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(354); + setState(360); match(CONTINUE); - setState(355); + setState(361); match(SEMICOLON); } break; @@ -2454,23 +2493,23 @@ public class KickCParser extends Parser { _localctx = new StmtAsmContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(356); + setState(362); match(ASM); - setState(358); + setState(364); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(357); + setState(363); asmDirectives(); } } - setState(360); + setState(366); match(CURLY_BEGIN); - setState(361); + setState(367); asmLines(); - setState(362); + setState(368); match(ASM_CURLY_END); } break; @@ -2478,7 +2517,7 @@ public class KickCParser extends Parser { _localctx = new StmtDeclKasmContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(364); + setState(370); declKasm(); } break; @@ -2533,35 +2572,35 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(368); + setState(374); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(367); + setState(373); switchCase(); } } - setState(370); + setState(376); _errHandler.sync(this); _la = _input.LA(1); } while ( _la==CASE ); - setState(377); + setState(383); _errHandler.sync(this); _la = _input.LA(1); if (_la==DEFAULT) { { - setState(372); + setState(378); match(DEFAULT); - setState(373); + setState(379); match(COLON); - setState(375); + setState(381); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN) | (1L << BREAK))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(374); + setState(380); stmtSeq(); } } @@ -2617,18 +2656,18 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(379); + setState(385); match(CASE); - setState(380); + setState(386); expr(0); - setState(381); + setState(387); match(COLON); - setState(383); + setState(389); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN) | (1L << BREAK))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(382); + setState(388); stmtSeq(); } } @@ -2715,27 +2754,27 @@ public class KickCParser extends Parser { enterRule(_localctx, 40, RULE_forLoop); int _la; try { - setState(401); + setState(407); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { case 1: _localctx = new ForClassicContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(385); + setState(391); forClassicInit(); - setState(386); + setState(392); match(SEMICOLON); - setState(387); + setState(393); commaExpr(0); - setState(388); + setState(394); match(SEMICOLON); - setState(390); + setState(396); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (SIZEOF - 70)) | (1L << (TYPEID - 70)) | (1L << (LOGIC_NOT - 70)) | (1L << (BOOLEAN - 70)) | (1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)))) != 0)) { { - setState(389); + setState(395); commaExpr(0); } } @@ -2746,25 +2785,25 @@ public class KickCParser extends Parser { _localctx = new ForRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(393); + setState(399); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (STRUCT - 68)) | (1L << (ENUM - 68)) | (1L << (SIGNEDNESS - 68)) | (1L << (SIMPLETYPE - 68)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0)) { { - setState(392); + setState(398); declTypes(); } } - setState(395); + setState(401); match(NAME); - setState(396); + setState(402); match(COLON); - setState(397); + setState(403); expr(0); - setState(398); + setState(404); match(RANGE); - setState(399); + setState(405); expr(0); } break; @@ -2836,19 +2875,19 @@ public class KickCParser extends Parser { enterRule(_localctx, 42, RULE_forClassicInit); int _la; try { - setState(407); + setState(413); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { case 1: _localctx = new ForClassicInitDeclContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(404); + setState(410); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (STRUCT - 68)) | (1L << (ENUM - 68)) | (1L << (SIGNEDNESS - 68)) | (1L << (SIMPLETYPE - 68)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0)) { { - setState(403); + setState(409); declVariables(); } } @@ -2859,7 +2898,7 @@ public class KickCParser extends Parser { _localctx = new ForClassicInitExprContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(406); + setState(412); commaExpr(0); } break; @@ -3118,7 +3157,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(424); + setState(430); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { case 1: @@ -3127,11 +3166,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(410); + setState(416); match(PAR_BEGIN); - setState(411); + setState(417); typeDecl(0); - setState(412); + setState(418); match(PAR_END); } break; @@ -3140,7 +3179,7 @@ public class KickCParser extends Parser { _localctx = new TypeSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(414); + setState(420); match(SIMPLETYPE); } break; @@ -3149,14 +3188,14 @@ public class KickCParser extends Parser { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(415); + setState(421); match(SIGNEDNESS); - setState(417); + setState(423); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { case 1: { - setState(416); + setState(422); match(SIMPLETYPE); } break; @@ -3168,7 +3207,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(419); + setState(425); structDef(); } break; @@ -3177,7 +3216,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(420); + setState(426); structRef(); } break; @@ -3186,7 +3225,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(421); + setState(427); enumDef(); } break; @@ -3195,7 +3234,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(422); + setState(428); enumRef(); } break; @@ -3204,13 +3243,13 @@ public class KickCParser extends Parser { _localctx = new TypeNamedRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(423); + setState(429); match(TYPEDEFNAME); } break; } _ctx.stop = _input.LT(-1); - setState(439); + setState(445); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3218,16 +3257,16 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(437); + setState(443); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { _localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(426); + setState(432); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(427); + setState(433); match(ASTERISK); } break; @@ -3235,21 +3274,21 @@ public class KickCParser extends Parser { { _localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(428); + setState(434); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(429); + setState(435); match(BRACKET_BEGIN); - setState(431); + setState(437); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (SIZEOF - 70)) | (1L << (TYPEID - 70)) | (1L << (LOGIC_NOT - 70)) | (1L << (BOOLEAN - 70)) | (1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)))) != 0)) { { - setState(430); + setState(436); expr(0); } } - setState(433); + setState(439); match(BRACKET_END); } break; @@ -3257,18 +3296,18 @@ public class KickCParser extends Parser { { _localctx = new TypeProcedureContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(434); + setState(440); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(435); + setState(441); match(PAR_BEGIN); - setState(436); + setState(442); match(PAR_END); } break; } } } - setState(441); + setState(447); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } @@ -3313,9 +3352,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(442); + setState(448); match(STRUCT); - setState(443); + setState(449); match(NAME); } } @@ -3367,35 +3406,35 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(445); + setState(451); match(STRUCT); - setState(447); + setState(453); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(446); + setState(452); match(NAME); } } - setState(449); + setState(455); match(CURLY_BEGIN); - setState(451); + setState(457); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(450); + setState(456); structMembers(); } } - setState(453); + setState(459); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (STRUCT - 68)) | (1L << (ENUM - 68)) | (1L << (SIGNEDNESS - 68)) | (1L << (SIMPLETYPE - 68)))) != 0) ); - setState(455); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << REGISTER) | (1L << INLINE) | (1L << VOLATILE) | (1L << INTERRUPT))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0) ); + setState(461); match(CURLY_END); } } @@ -3439,9 +3478,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(457); + setState(463); declVariables(); - setState(458); + setState(464); match(SEMICOLON); } } @@ -3484,9 +3523,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(460); + setState(466); match(ENUM); - setState(461); + setState(467); match(NAME); } } @@ -3535,23 +3574,23 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(463); + setState(469); match(ENUM); - setState(465); + setState(471); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(464); + setState(470); match(NAME); } } - setState(467); + setState(473); match(CURLY_BEGIN); - setState(468); + setState(474); enumMemberList(0); - setState(469); + setState(475); match(CURLY_END); } } @@ -3609,11 +3648,11 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 1); { { - setState(472); + setState(478); enumMember(); } _ctx.stop = _input.LT(-1); - setState(479); + setState(485); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,44,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3624,16 +3663,16 @@ public class KickCParser extends Parser { { _localctx = new EnumMemberListContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_enumMemberList); - setState(474); + setState(480); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(475); + setState(481); match(COMMA); - setState(476); + setState(482); enumMember(); } } } - setState(481); + setState(487); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,44,_ctx); } @@ -3680,16 +3719,16 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(482); + setState(488); match(NAME); - setState(485); + setState(491); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { case 1: { - setState(483); + setState(489); match(ASSIGN); - setState(484); + setState(490); expr(0); } break; @@ -3781,11 +3820,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(488); + setState(494); expr(0); } _ctx.stop = _input.LT(-1); - setState(495); + setState(501); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,46,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3796,16 +3835,16 @@ public class KickCParser extends Parser { { _localctx = new CommaSimpleContext(new CommaExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_commaExpr); - setState(490); + setState(496); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(491); + setState(497); match(COMMA); - setState(492); + setState(498); expr(0); } } } - setState(497); + setState(503); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,46,_ctx); } @@ -4330,7 +4369,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(552); + setState(558); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { case 1: @@ -4339,11 +4378,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(499); + setState(505); match(PAR_BEGIN); - setState(500); + setState(506); commaExpr(0); - setState(501); + setState(507); match(PAR_END); } break; @@ -4352,27 +4391,27 @@ public class KickCParser extends Parser { _localctx = new ExprSizeOfContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(503); + setState(509); match(SIZEOF); - setState(504); + setState(510); match(PAR_BEGIN); - setState(507); + setState(513); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { case 1: { - setState(505); + setState(511); expr(0); } break; case 2: { - setState(506); + setState(512); typeDecl(0); } break; } - setState(509); + setState(515); match(PAR_END); } break; @@ -4381,27 +4420,27 @@ public class KickCParser extends Parser { _localctx = new ExprTypeIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(511); + setState(517); match(TYPEID); - setState(512); + setState(518); match(PAR_BEGIN); - setState(515); + setState(521); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { case 1: { - setState(513); + setState(519); expr(0); } break; case 2: { - setState(514); + setState(520); typeDecl(0); } break; } - setState(517); + setState(523); match(PAR_END); } break; @@ -4410,13 +4449,13 @@ public class KickCParser extends Parser { _localctx = new ExprCastContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(519); + setState(525); match(PAR_BEGIN); - setState(520); + setState(526); typeDecl(0); - setState(521); + setState(527); match(PAR_END); - setState(522); + setState(528); expr(24); } break; @@ -4425,7 +4464,7 @@ public class KickCParser extends Parser { _localctx = new ExprPreModContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(524); + setState(530); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -4435,7 +4474,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(525); + setState(531); expr(23); } break; @@ -4444,9 +4483,9 @@ public class KickCParser extends Parser { _localctx = new ExprPtrContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(526); + setState(532); match(ASTERISK); - setState(527); + setState(533); expr(21); } break; @@ -4455,9 +4494,9 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(528); + setState(534); _la = _input.LA(1); - if ( !(((((_la - 15)) & ~0x3f) == 0 && ((1L << (_la - 15)) & ((1L << (PLUS - 15)) | (1L << (MINUS - 15)) | (1L << (AND - 15)) | (1L << (BIT_NOT - 15)) | (1L << (LOGIC_NOT - 15)))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << MINUS) | (1L << AND) | (1L << BIT_NOT))) != 0) || _la==LOGIC_NOT) ) { _errHandler.recoverInline(this); } else { @@ -4465,7 +4504,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(529); + setState(535); expr(20); } break; @@ -4474,7 +4513,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(530); + setState(536); _la = _input.LA(1); if ( !(_la==LESS_THAN || _la==GREATER_THAN) ) { _errHandler.recoverInline(this); @@ -4484,7 +4523,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(531); + setState(537); expr(16); } break; @@ -4493,27 +4532,27 @@ public class KickCParser extends Parser { _localctx = new InitListContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(532); - match(CURLY_BEGIN); - setState(533); - expr(0); setState(538); + match(CURLY_BEGIN); + setState(539); + expr(0); + setState(544); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(534); + setState(540); match(COMMA); - setState(535); + setState(541); expr(0); } } - setState(540); + setState(546); _errHandler.sync(this); _la = _input.LA(1); } - setState(541); + setState(547); match(CURLY_END); } break; @@ -4522,7 +4561,7 @@ public class KickCParser extends Parser { _localctx = new ExprIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(543); + setState(549); match(NAME); } break; @@ -4531,7 +4570,7 @@ public class KickCParser extends Parser { _localctx = new ExprNumberContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(544); + setState(550); match(NUMBER); } break; @@ -4540,7 +4579,7 @@ public class KickCParser extends Parser { _localctx = new ExprStringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(546); + setState(552); _errHandler.sync(this); _alt = 1; do { @@ -4548,7 +4587,7 @@ public class KickCParser extends Parser { case 1: { { - setState(545); + setState(551); match(STRING); } } @@ -4556,7 +4595,7 @@ public class KickCParser extends Parser { default: throw new NoViableAltException(this); } - setState(548); + setState(554); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,50,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); @@ -4567,7 +4606,7 @@ public class KickCParser extends Parser { _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(550); + setState(556); match(CHAR); } break; @@ -4576,13 +4615,13 @@ public class KickCParser extends Parser { _localctx = new ExprBoolContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(551); + setState(557); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(614); + setState(620); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,54,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -4590,16 +4629,16 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(612); + setState(618); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(554); + setState(560); if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(555); + setState(561); _la = _input.LA(1); if ( !(_la==SHIFT_LEFT || _la==SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -4609,7 +4648,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(556); + setState(562); expr(20); } break; @@ -4617,9 +4656,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(557); + setState(563); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(558); + setState(564); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ASTERISK) | (1L << DIVIDE) | (1L << MODULO))) != 0)) ) { _errHandler.recoverInline(this); @@ -4629,7 +4668,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(559); + setState(565); expr(19); } break; @@ -4637,9 +4676,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(560); + setState(566); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(561); + setState(567); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { _errHandler.recoverInline(this); @@ -4649,7 +4688,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(562); + setState(568); expr(18); } break; @@ -4657,9 +4696,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(563); + setState(569); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(564); + setState(570); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EQUAL) | (1L << NOT_EQUAL) | (1L << LESS_THAN) | (1L << LESS_THAN_EQUAL) | (1L << GREATER_THAN_EQUAL) | (1L << GREATER_THAN))) != 0)) ) { _errHandler.recoverInline(this); @@ -4669,7 +4708,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(565); + setState(571); expr(16); } break; @@ -4677,13 +4716,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(566); + setState(572); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); { - setState(567); + setState(573); match(AND); } - setState(568); + setState(574); expr(15); } break; @@ -4691,13 +4730,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(569); + setState(575); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); { - setState(570); + setState(576); match(BIT_XOR); } - setState(571); + setState(577); expr(14); } break; @@ -4705,13 +4744,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(572); + setState(578); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { - setState(573); + setState(579); match(BIT_OR); } - setState(574); + setState(580); expr(13); } break; @@ -4719,13 +4758,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(575); + setState(581); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { - setState(576); + setState(582); match(LOGIC_AND); } - setState(577); + setState(583); expr(12); } break; @@ -4733,13 +4772,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(578); + setState(584); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(579); + setState(585); match(LOGIC_OR); } - setState(580); + setState(586); expr(11); } break; @@ -4747,15 +4786,15 @@ public class KickCParser extends Parser { { _localctx = new ExprTernaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(581); + setState(587); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(582); + setState(588); match(CONDITION); - setState(583); + setState(589); expr(0); - setState(584); + setState(590); match(COLON); - setState(585); + setState(591); expr(10); } break; @@ -4763,11 +4802,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(587); + setState(593); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(588); + setState(594); match(ASSIGN); - setState(589); + setState(595); expr(8); } break; @@ -4775,11 +4814,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentCompoundContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(590); + setState(596); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(591); + setState(597); match(ASSIGN_COMPOUND); - setState(592); + setState(598); expr(7); } break; @@ -4787,11 +4826,11 @@ public class KickCParser extends Parser { { _localctx = new ExprDotContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(593); + setState(599); if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)"); - setState(594); + setState(600); match(DOT); - setState(595); + setState(601); match(NAME); } break; @@ -4799,11 +4838,11 @@ public class KickCParser extends Parser { { _localctx = new ExprArrowContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(596); + setState(602); if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)"); - setState(597); + setState(603); match(ARROW); - setState(598); + setState(604); match(NAME); } break; @@ -4811,21 +4850,21 @@ public class KickCParser extends Parser { { _localctx = new ExprCallContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(599); + setState(605); if (!(precpred(_ctx, 28))) throw new FailedPredicateException(this, "precpred(_ctx, 28)"); - setState(600); + setState(606); match(PAR_BEGIN); - setState(602); + setState(608); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (SIZEOF - 70)) | (1L << (TYPEID - 70)) | (1L << (LOGIC_NOT - 70)) | (1L << (BOOLEAN - 70)) | (1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)))) != 0)) { { - setState(601); + setState(607); parameterList(); } } - setState(604); + setState(610); match(PAR_END); } break; @@ -4833,13 +4872,13 @@ public class KickCParser extends Parser { { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(605); + setState(611); if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)"); - setState(606); + setState(612); match(BRACKET_BEGIN); - setState(607); + setState(613); commaExpr(0); - setState(608); + setState(614); match(BRACKET_END); } break; @@ -4847,9 +4886,9 @@ public class KickCParser extends Parser { { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(610); + setState(616); if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)"); - setState(611); + setState(617); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -4864,7 +4903,7 @@ public class KickCParser extends Parser { } } } - setState(616); + setState(622); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,54,_ctx); } @@ -4918,21 +4957,21 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(617); + setState(623); expr(0); - setState(622); + setState(628); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(618); + setState(624); match(COMMA); - setState(619); + setState(625); expr(0); } } - setState(624); + setState(630); _errHandler.sync(this); _la = _input.LA(1); } @@ -4981,19 +5020,19 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(625); + setState(631); match(KICKASM); - setState(627); + setState(633); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(626); + setState(632); asmDirectives(); } } - setState(629); + setState(635); match(KICKASM_BODY); } } @@ -5047,27 +5086,27 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(631); - match(PAR_BEGIN); - setState(632); - asmDirective(); setState(637); + match(PAR_BEGIN); + setState(638); + asmDirective(); + setState(643); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(633); + setState(639); match(COMMA); - setState(634); + setState(640); asmDirective(); } } - setState(639); + setState(645); _errHandler.sync(this); _la = _input.LA(1); } - setState(640); + setState(646); match(PAR_END); } } @@ -5213,16 +5252,16 @@ public class KickCParser extends Parser { AsmDirectiveContext _localctx = new AsmDirectiveContext(_ctx, getState()); enterRule(_localctx, 70, RULE_asmDirective); try { - setState(657); + setState(663); _errHandler.sync(this); switch (_input.LA(1)) { case RESOURCE: _localctx = new AsmDirectiveResourceContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(642); + setState(648); match(RESOURCE); - setState(643); + setState(649); match(STRING); } break; @@ -5230,9 +5269,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveUsesContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(644); + setState(650); match(USES); - setState(645); + setState(651); match(NAME); } break; @@ -5240,9 +5279,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveClobberContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(646); + setState(652); match(CLOBBERS); - setState(647); + setState(653); match(STRING); } break; @@ -5250,9 +5289,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveBytesContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(648); + setState(654); match(BYTES); - setState(649); + setState(655); expr(0); } break; @@ -5260,9 +5299,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveCyclesContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(650); + setState(656); match(CYCLES); - setState(651); + setState(657); expr(0); } break; @@ -5270,14 +5309,14 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveAddressContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(652); + setState(658); match(PC); - setState(655); + setState(661); _errHandler.sync(this); switch (_input.LA(1)) { case INLINE: { - setState(653); + setState(659); match(INLINE); } break; @@ -5301,7 +5340,7 @@ public class KickCParser extends Parser { case NUMBER: case NAME: { - setState(654); + setState(660); expr(0); } break; @@ -5358,17 +5397,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(662); + setState(668); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 98)) & ~0x3f) == 0 && ((1L << (_la - 98)) & ((1L << (ASM_BYTE - 98)) | (1L << (ASM_MNEMONIC - 98)) | (1L << (ASM_MULTI_NAME - 98)) | (1L << (ASM_NAME - 98)))) != 0)) { + while (((((_la - 99)) & ~0x3f) == 0 && ((1L << (_la - 99)) & ((1L << (ASM_BYTE - 99)) | (1L << (ASM_MNEMONIC - 99)) | (1L << (ASM_MULTI_NAME - 99)) | (1L << (ASM_NAME - 99)))) != 0)) { { { - setState(659); + setState(665); asmLine(); } } - setState(664); + setState(670); _errHandler.sync(this); _la = _input.LA(1); } @@ -5418,28 +5457,28 @@ public class KickCParser extends Parser { AsmLineContext _localctx = new AsmLineContext(_ctx, getState()); enterRule(_localctx, 74, RULE_asmLine); try { - setState(668); + setState(674); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_MULTI_NAME: case ASM_NAME: enterOuterAlt(_localctx, 1); { - setState(665); + setState(671); asmLabel(); } break; case ASM_MNEMONIC: enterOuterAlt(_localctx, 2); { - setState(666); + setState(672); asmInstruction(); } break; case ASM_BYTE: enterOuterAlt(_localctx, 3); { - setState(667); + setState(673); asmBytes(); } break; @@ -5510,16 +5549,16 @@ public class KickCParser extends Parser { AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState()); enterRule(_localctx, 76, RULE_asmLabel); try { - setState(674); + setState(680); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_NAME: _localctx = new AsmLabelNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(670); + setState(676); match(ASM_NAME); - setState(671); + setState(677); match(ASM_COLON); } break; @@ -5527,9 +5566,9 @@ public class KickCParser extends Parser { _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(672); + setState(678); match(ASM_MULTI_NAME); - setState(673); + setState(679); match(ASM_COLON); } break; @@ -5578,14 +5617,14 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(676); + setState(682); match(ASM_MNEMONIC); - setState(678); + setState(684); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) { case 1: { - setState(677); + setState(683); asmParamMode(); } break; @@ -5641,23 +5680,23 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(680); - match(ASM_BYTE); - setState(681); - asmExpr(0); setState(686); + match(ASM_BYTE); + setState(687); + asmExpr(0); + setState(692); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_COMMA) { { { - setState(682); + setState(688); match(ASM_COMMA); - setState(683); + setState(689); asmExpr(0); } } - setState(688); + setState(694); _errHandler.sync(this); _la = _input.LA(1); } @@ -5817,14 +5856,14 @@ public class KickCParser extends Parser { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); enterRule(_localctx, 82, RULE_asmParamMode); try { - setState(712); + setState(718); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(689); + setState(695); asmExpr(0); } break; @@ -5832,9 +5871,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(690); + setState(696); match(ASM_IMM); - setState(691); + setState(697); asmExpr(0); } break; @@ -5842,11 +5881,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(692); + setState(698); asmExpr(0); - setState(693); + setState(699); match(ASM_COMMA); - setState(694); + setState(700); match(ASM_NAME); } break; @@ -5854,15 +5893,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(696); + setState(702); match(ASM_PAR_BEGIN); - setState(697); + setState(703); asmExpr(0); - setState(698); + setState(704); match(ASM_PAR_END); - setState(699); + setState(705); match(ASM_COMMA); - setState(700); + setState(706); match(ASM_NAME); } break; @@ -5870,15 +5909,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(702); + setState(708); match(ASM_PAR_BEGIN); - setState(703); + setState(709); asmExpr(0); - setState(704); + setState(710); match(ASM_COMMA); - setState(705); + setState(711); match(ASM_NAME); - setState(706); + setState(712); match(ASM_PAR_END); } break; @@ -5886,11 +5925,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(708); + setState(714); match(ASM_PAR_BEGIN); - setState(709); + setState(715); asmExpr(0); - setState(710); + setState(716); match(ASM_PAR_END); } break; @@ -6095,7 +6134,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(728); + setState(734); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_BRACKET_BEGIN: @@ -6104,11 +6143,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(715); + setState(721); match(ASM_BRACKET_BEGIN); - setState(716); + setState(722); asmExpr(0); - setState(717); + setState(723); match(ASM_BRACKET_END); } break; @@ -6120,9 +6159,9 @@ public class KickCParser extends Parser { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(719); + setState(725); _la = _input.LA(1); - if ( !(((((_la - 110)) & ~0x3f) == 0 && ((1L << (_la - 110)) & ((1L << (ASM_PLUS - 110)) | (1L << (ASM_MINUS - 110)) | (1L << (ASM_LESS_THAN - 110)) | (1L << (ASM_GREATER_THAN - 110)))) != 0)) ) { + if ( !(((((_la - 111)) & ~0x3f) == 0 && ((1L << (_la - 111)) & ((1L << (ASM_PLUS - 111)) | (1L << (ASM_MINUS - 111)) | (1L << (ASM_LESS_THAN - 111)) | (1L << (ASM_GREATER_THAN - 111)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -6130,7 +6169,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(720); + setState(726); asmExpr(8); } break; @@ -6139,7 +6178,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(721); + setState(727); match(ASM_NAME); } break; @@ -6148,7 +6187,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(722); + setState(728); match(ASM_MULTI_REL); } break; @@ -6157,11 +6196,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(723); + setState(729); match(ASM_CURLY_BEGIN); - setState(724); + setState(730); match(ASM_NAME); - setState(725); + setState(731); match(ASM_CURLY_END); } break; @@ -6170,7 +6209,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(726); + setState(732); match(ASM_NUMBER); } break; @@ -6179,7 +6218,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(727); + setState(733); match(ASM_CHAR); } break; @@ -6187,7 +6226,7 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(744); + setState(750); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,68,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -6195,20 +6234,20 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(742); + setState(748); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(730); + setState(736); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(731); + setState(737); match(ASM_DOT); } - setState(732); + setState(738); asmExpr(11); } break; @@ -6216,9 +6255,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(733); + setState(739); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(734); + setState(740); _la = _input.LA(1); if ( !(_la==ASM_SHIFT_LEFT || _la==ASM_SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -6228,7 +6267,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(735); + setState(741); asmExpr(10); } break; @@ -6236,9 +6275,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(736); + setState(742); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(737); + setState(743); _la = _input.LA(1); if ( !(_la==ASM_MULTIPLY || _la==ASM_DIVIDE) ) { _errHandler.recoverInline(this); @@ -6248,7 +6287,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(738); + setState(744); asmExpr(8); } break; @@ -6256,9 +6295,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(739); + setState(745); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(740); + setState(746); _la = _input.LA(1); if ( !(_la==ASM_PLUS || _la==ASM_MINUS) ) { _errHandler.recoverInline(this); @@ -6268,14 +6307,14 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(741); + setState(747); asmExpr(7); } break; } } } - setState(746); + setState(752); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,68,_ctx); } @@ -6395,7 +6434,7 @@ public class KickCParser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0087\u02ee\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0088\u02f4\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -6412,277 +6451,280 @@ public class KickCParser extends Parser { "\3\20\3\20\3\20\7\20\u00c9\n\20\f\20\16\20\u00cc\13\20\3\20\3\20\3\20"+ "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+ - "\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00f3\n\20\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u0100\n\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\5\21\u0108\n\21\3\21\3\21\3\21\3\21\3\21\7\21\u010f\n\21\f\21\16"+ - "\21\u0112\13\21\3\21\5\21\u0115\n\21\3\22\6\22\u0118\n\22\r\22\16\22\u0119"+ - "\3\23\3\23\3\23\3\23\3\23\5\23\u0121\n\23\3\23\3\23\3\23\3\23\3\23\3\23"+ - "\3\23\3\23\3\23\3\23\3\23\5\23\u012e\n\23\3\23\7\23\u0131\n\23\f\23\16"+ - "\23\u0134\13\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u013d\n\23\f\23"+ - "\16\23\u0140\13\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u014b"+ - "\n\23\f\23\16\23\u014e\13\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3"+ - "\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u0160\n\23\3\23\3\23\3\23"+ - "\3\23\3\23\3\23\3\23\5\23\u0169\n\23\3\23\3\23\3\23\3\23\3\23\5\23\u0170"+ - "\n\23\3\24\6\24\u0173\n\24\r\24\16\24\u0174\3\24\3\24\3\24\5\24\u017a"+ - "\n\24\5\24\u017c\n\24\3\25\3\25\3\25\3\25\5\25\u0182\n\25\3\26\3\26\3"+ - "\26\3\26\3\26\5\26\u0189\n\26\3\26\5\26\u018c\n\26\3\26\3\26\3\26\3\26"+ - "\3\26\3\26\5\26\u0194\n\26\3\27\5\27\u0197\n\27\3\27\5\27\u019a\n\27\3"+ - "\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u01a4\n\30\3\30\3\30\3\30"+ - "\3\30\3\30\5\30\u01ab\n\30\3\30\3\30\3\30\3\30\3\30\5\30\u01b2\n\30\3"+ - "\30\3\30\3\30\3\30\7\30\u01b8\n\30\f\30\16\30\u01bb\13\30\3\31\3\31\3"+ - "\31\3\32\3\32\5\32\u01c2\n\32\3\32\3\32\6\32\u01c6\n\32\r\32\16\32\u01c7"+ - "\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\5\35\u01d4\n\35\3\35"+ - "\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\7\36\u01e0\n\36\f\36\16"+ - "\36\u01e3\13\36\3\37\3\37\3\37\5\37\u01e8\n\37\3 \3 \3 \3 \3 \3 \7 \u01f0"+ - "\n \f \16 \u01f3\13 \3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u01fe\n!\3!\3!\3!\3"+ - "!\3!\3!\5!\u0206\n!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3"+ - "!\3!\3!\7!\u021b\n!\f!\16!\u021e\13!\3!\3!\3!\3!\3!\6!\u0225\n!\r!\16"+ - "!\u0226\3!\3!\5!\u022b\n!\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!\5!\u025d\n!\3!\3!\3!\3!\3!\3!\3!\3!\7"+ - "!\u0267\n!\f!\16!\u026a\13!\3\"\3\"\3\"\7\"\u026f\n\"\f\"\16\"\u0272\13"+ - "\"\3#\3#\5#\u0276\n#\3#\3#\3$\3$\3$\3$\7$\u027e\n$\f$\16$\u0281\13$\3"+ - "$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u0292\n%\5%\u0294\n%\3"+ - "&\7&\u0297\n&\f&\16&\u029a\13&\3\'\3\'\3\'\5\'\u029f\n\'\3(\3(\3(\3(\5"+ - "(\u02a5\n(\3)\3)\5)\u02a9\n)\3*\3*\3*\3*\7*\u02af\n*\f*\16*\u02b2\13*"+ - "\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+"+ - "\5+\u02cb\n+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02db\n,\3,"+ - "\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\7,\u02e9\n,\f,\16,\u02ec\13,\3,\2\b"+ - "\24.:>@V-\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\66"+ - "8:<>@BDFHJLNPRTV\2\16\4\2WW``\3\2\26\27\5\2\21\22\30\31PP\4\2 ##\3\2"+ - "\34\35\3\2\23\25\3\2\21\22\3\2\36#\3\2ps\3\2no\3\2tu\3\2pq\2\u0355\2X"+ - "\3\2\2\2\4[\3\2\2\2\6a\3\2\2\2\bf\3\2\2\2\nh\3\2\2\2\fz\3\2\2\2\16|\3"+ - "\2\2\2\20\u0084\3\2\2\2\22\u008e\3\2\2\2\24\u0091\3\2\2\2\26\u00a4\3\2"+ - "\2\2\30\u00a6\3\2\2\2\32\u00b3\3\2\2\2\34\u00bf\3\2\2\2\36\u00f2\3\2\2"+ - "\2 \u0114\3\2\2\2\"\u0117\3\2\2\2$\u016f\3\2\2\2&\u0172\3\2\2\2(\u017d"+ - "\3\2\2\2*\u0193\3\2\2\2,\u0199\3\2\2\2.\u01aa\3\2\2\2\60\u01bc\3\2\2\2"+ - "\62\u01bf\3\2\2\2\64\u01cb\3\2\2\2\66\u01ce\3\2\2\28\u01d1\3\2\2\2:\u01d9"+ - "\3\2\2\2<\u01e4\3\2\2\2>\u01e9\3\2\2\2@\u022a\3\2\2\2B\u026b\3\2\2\2D"+ - "\u0273\3\2\2\2F\u0279\3\2\2\2H\u0293\3\2\2\2J\u0298\3\2\2\2L\u029e\3\2"+ - "\2\2N\u02a4\3\2\2\2P\u02a6\3\2\2\2R\u02aa\3\2\2\2T\u02ca\3\2\2\2V\u02da"+ - "\3\2\2\2XY\5\6\4\2YZ\7\2\2\3Z\3\3\2\2\2[\\\5J&\2\\]\7\2\2\3]\5\3\2\2\2"+ - "^`\5\b\5\2_^\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2\2b\7\3\2\2\2ca\3\2\2"+ - "\2dg\5\f\7\2eg\5\n\6\2fd\3\2\2\2fe\3\2\2\2g\t\3\2\2\2hi\7(\2\2ij\7U\2"+ - "\2j\13\3\2\2\2kl\5\22\n\2lm\7\n\2\2m{\3\2\2\2no\5\62\32\2op\7\n\2\2p{"+ - "\3\2\2\2qr\58\35\2rs\7\n\2\2s{\3\2\2\2t{\5\30\r\2u{\5D#\2v{\5\36\20\2"+ - "wx\5\16\b\2xy\7\n\2\2y{\3\2\2\2zk\3\2\2\2zn\3\2\2\2zq\3\2\2\2zt\3\2\2"+ - "\2zu\3\2\2\2zv\3\2\2\2zw\3\2\2\2{\r\3\2\2\2|}\7)\2\2}~\5.\30\2~\177\7"+ - "`\2\2\177\u0080\b\b\1\2\u0080\17\3\2\2\2\u0081\u0083\5 \21\2\u0082\u0081"+ - "\3\2\2\2\u0083\u0086\3\2\2\2\u0084\u0082\3\2\2\2\u0084\u0085\3\2\2\2\u0085"+ - "\u0087\3\2\2\2\u0086\u0084\3\2\2\2\u0087\u008b\5.\30\2\u0088\u008a\5 "+ - "\21\2\u0089\u0088\3\2\2\2\u008a\u008d\3\2\2\2\u008b\u0089\3\2\2\2\u008b"+ - "\u008c\3\2\2\2\u008c\21\3\2\2\2\u008d\u008b\3\2\2\2\u008e\u008f\5\20\t"+ - "\2\u008f\u0090\5\24\13\2\u0090\23\3\2\2\2\u0091\u0092\b\13\1\2\u0092\u0093"+ - "\5\26\f\2\u0093\u0099\3\2\2\2\u0094\u0095\f\3\2\2\u0095\u0096\7\f\2\2"+ - "\u0096\u0098\5\26\f\2\u0097\u0094\3\2\2\2\u0098\u009b\3\2\2\2\u0099\u0097"+ - "\3\2\2\2\u0099\u009a\3\2\2\2\u009a\25\3\2\2\2\u009b\u0099\3\2\2\2\u009c"+ - "\u009f\7`\2\2\u009d\u009e\7&\2\2\u009e\u00a0\5@!\2\u009f\u009d\3\2\2\2"+ - "\u009f\u00a0\3\2\2\2\u00a0\u00a5\3\2\2\2\u00a1\u00a2\7`\2\2\u00a2\u00a3"+ - "\7&\2\2\u00a3\u00a5\5D#\2\u00a4\u009c\3\2\2\2\u00a4\u00a1\3\2\2\2\u00a5"+ - "\27\3\2\2\2\u00a6\u00a7\5\20\t\2\u00a7\u00a8\7`\2\2\u00a8\u00aa\7\b\2"+ - "\2\u00a9\u00ab\5\32\16\2\u00aa\u00a9\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab"+ - "\u00ac\3\2\2\2\u00ac\u00ad\7\t\2\2\u00ad\u00af\7\4\2\2\u00ae\u00b0\5\""+ - "\22\2\u00af\u00ae\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1"+ - "\u00b2\7\5\2\2\u00b2\31\3\2\2\2\u00b3\u00b8\5\34\17\2\u00b4\u00b5\7\f"+ - "\2\2\u00b5\u00b7\5\34\17\2\u00b6\u00b4\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8"+ - "\u00b6\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\33\3\2\2\2\u00ba\u00b8\3\2\2"+ - "\2\u00bb\u00bc\5\20\t\2\u00bc\u00bd\7`\2\2\u00bd\u00c0\3\2\2\2\u00be\u00c0"+ - "\7R\2\2\u00bf\u00bb\3\2\2\2\u00bf\u00be\3\2\2\2\u00c0\35\3\2\2\2\u00c1"+ - "\u00c2\7*\2\2\u00c2\u00c3\7+\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c5\7\b\2"+ - "\2\u00c5\u00ca\7W\2\2\u00c6\u00c7\7\f\2\2\u00c7\u00c9\7W\2\2\u00c8\u00c6"+ - "\3\2\2\2\u00c9\u00cc\3\2\2\2\u00ca\u00c8\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb"+ - "\u00cd\3\2\2\2\u00cc\u00ca\3\2\2\2\u00cd\u00f3\7\t\2\2\u00ce\u00cf\7*"+ - "\2\2\u00cf\u00d0\7,\2\2\u00d0\u00d1\3\2\2\2\u00d1\u00d2\7\b\2\2\u00d2"+ - "\u00d3\7W\2\2\u00d3\u00f3\7\t\2\2\u00d4\u00d5\7*\2\2\u00d5\u00d6\7-\2"+ - "\2\u00d6\u00d7\3\2\2\2\u00d7\u00d8\7\b\2\2\u00d8\u00d9\7`\2\2\u00d9\u00f3"+ - "\7\t\2\2\u00da\u00db\7*\2\2\u00db\u00dc\7.\2\2\u00dc\u00dd\3\2\2\2\u00dd"+ - "\u00de\7\b\2\2\u00de\u00df\7U\2\2\u00df\u00f3\7\t\2\2\u00e0\u00e1\7*\2"+ - "\2\u00e1\u00e2\7/\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e4\7\b\2\2\u00e4\u00e5"+ - "\7`\2\2\u00e5\u00f3\7\t\2\2\u00e6\u00e7\7*\2\2\u00e7\u00e8\7\60\2\2\u00e8"+ - "\u00e9\3\2\2\2\u00e9\u00ea\7\b\2\2\u00ea\u00eb\7`\2\2\u00eb\u00f3\7\t"+ - "\2\2\u00ec\u00ed\7*\2\2\u00ed\u00ee\7\61\2\2\u00ee\u00ef\3\2\2\2\u00ef"+ - "\u00f0\7\b\2\2\u00f0\u00f1\7`\2\2\u00f1\u00f3\7\t\2\2\u00f2\u00c1\3\2"+ - "\2\2\u00f2\u00ce\3\2\2\2\u00f2\u00d4\3\2\2\2\u00f2\u00da\3\2\2\2\u00f2"+ - "\u00e0\3\2\2\2\u00f2\u00e6\3\2\2\2\u00f2\u00ec\3\2\2\2\u00f3\37\3\2\2"+ - "\2\u00f4\u0115\7\62\2\2\u00f5\u0115\7\63\2\2\u00f6\u0115\7\64\2\2\u00f7"+ - "\u00f8\7\65\2\2\u00f8\u00f9\7\b\2\2\u00f9\u00fa\7W\2\2\u00fa\u0115\7\t"+ - "\2\2\u00fb\u00ff\7\66\2\2\u00fc\u00fd\7\b\2\2\u00fd\u00fe\t\2\2\2\u00fe"+ - "\u0100\7\t\2\2\u00ff\u00fc\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0115\3\2"+ - "\2\2\u0101\u0115\7\67\2\2\u0102\u0115\78\2\2\u0103\u0107\79\2\2\u0104"+ - "\u0105\7\b\2\2\u0105\u0106\7`\2\2\u0106\u0108\7\t\2\2\u0107\u0104\3\2"+ - "\2\2\u0107\u0108\3\2\2\2\u0108\u0115\3\2\2\2\u0109\u010a\7+\2\2\u010a"+ - "\u010b\7\b\2\2\u010b\u0110\7W\2\2\u010c\u010d\7\f\2\2\u010d\u010f\7W\2"+ - "\2\u010e\u010c\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e\3\2\2\2\u0110\u0111"+ - "\3\2\2\2\u0111\u0113\3\2\2\2\u0112\u0110\3\2\2\2\u0113\u0115\7\t\2\2\u0114"+ - "\u00f4\3\2\2\2\u0114\u00f5\3\2\2\2\u0114\u00f6\3\2\2\2\u0114\u00f7\3\2"+ - "\2\2\u0114\u00fb\3\2\2\2\u0114\u0101\3\2\2\2\u0114\u0102\3\2\2\2\u0114"+ - "\u0103\3\2\2\2\u0114\u0109\3\2\2\2\u0115!\3\2\2\2\u0116\u0118\5$\23\2"+ - "\u0117\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u0117\3\2\2\2\u0119\u011a"+ - "\3\2\2\2\u011a#\3\2\2\2\u011b\u011c\5\22\n\2\u011c\u011d\7\n\2\2\u011d"+ - "\u0170\3\2\2\2\u011e\u0120\7\4\2\2\u011f\u0121\5\"\22\2\u0120\u011f\3"+ - "\2\2\2\u0120\u0121\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0170\7\5\2\2\u0123"+ - "\u0124\5> \2\u0124\u0125\7\n\2\2\u0125\u0170\3\2\2\2\u0126\u0127\7:\2"+ - "\2\u0127\u0128\7\b\2\2\u0128\u0129\5> \2\u0129\u012a\7\t\2\2\u012a\u012d"+ - "\5$\23\2\u012b\u012c\7;\2\2\u012c\u012e\5$\23\2\u012d\u012b\3\2\2\2\u012d"+ - "\u012e\3\2\2\2\u012e\u0170\3\2\2\2\u012f\u0131\5 \21\2\u0130\u012f\3\2"+ - "\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133\3\2\2\2\u0133"+ - "\u0135\3\2\2\2\u0134\u0132\3\2\2\2\u0135\u0136\7<\2\2\u0136\u0137\7\b"+ - "\2\2\u0137\u0138\5> \2\u0138\u0139\7\t\2\2\u0139\u013a\5$\23\2\u013a\u0170"+ - "\3\2\2\2\u013b\u013d\5 \21\2\u013c\u013b\3\2\2\2\u013d\u0140\3\2\2\2\u013e"+ - "\u013c\3\2\2\2\u013e\u013f\3\2\2\2\u013f\u0141\3\2\2\2\u0140\u013e\3\2"+ - "\2\2\u0141\u0142\7=\2\2\u0142\u0143\5$\23\2\u0143\u0144\7<\2\2\u0144\u0145"+ - "\7\b\2\2\u0145\u0146\5> \2\u0146\u0147\7\t\2\2\u0147\u0148\7\n\2\2\u0148"+ - "\u0170\3\2\2\2\u0149\u014b\5 \21\2\u014a\u0149\3\2\2\2\u014b\u014e\3\2"+ - "\2\2\u014c\u014a\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014f\3\2\2\2\u014e"+ - "\u014c\3\2\2\2\u014f\u0150\7>\2\2\u0150\u0151\7\b\2\2\u0151\u0152\5*\26"+ - "\2\u0152\u0153\7\t\2\2\u0153\u0154\5$\23\2\u0154\u0170\3\2\2\2\u0155\u0156"+ - "\7?\2\2\u0156\u0157\7\b\2\2\u0157\u0158\5> \2\u0158\u0159\7\t\2\2\u0159"+ - "\u015a\7\4\2\2\u015a\u015b\5&\24\2\u015b\u015c\7\5\2\2\u015c\u0170\3\2"+ - "\2\2\u015d\u015f\7@\2\2\u015e\u0160\5> \2\u015f\u015e\3\2\2\2\u015f\u0160"+ - "\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u0170\7\n\2\2\u0162\u0163\7A\2\2\u0163"+ - "\u0170\7\n\2\2\u0164\u0165\7B\2\2\u0165\u0170\7\n\2\2\u0166\u0168\7C\2"+ - "\2\u0167\u0169\5F$\2\u0168\u0167\3\2\2\2\u0168\u0169\3\2\2\2\u0169\u016a"+ - "\3\2\2\2\u016a\u016b\7\4\2\2\u016b\u016c\5J&\2\u016c\u016d\7w\2\2\u016d"+ - "\u0170\3\2\2\2\u016e\u0170\5D#\2\u016f\u011b\3\2\2\2\u016f\u011e\3\2\2"+ - "\2\u016f\u0123\3\2\2\2\u016f\u0126\3\2\2\2\u016f\u0132\3\2\2\2\u016f\u013e"+ - "\3\2\2\2\u016f\u014c\3\2\2\2\u016f\u0155\3\2\2\2\u016f\u015d\3\2\2\2\u016f"+ - "\u0162\3\2\2\2\u016f\u0164\3\2\2\2\u016f\u0166\3\2\2\2\u016f\u016e\3\2"+ - "\2\2\u0170%\3\2\2\2\u0171\u0173\5(\25\2\u0172\u0171\3\2\2\2\u0173\u0174"+ - "\3\2\2\2\u0174\u0172\3\2\2\2\u0174\u0175\3\2\2\2\u0175\u017b\3\2\2\2\u0176"+ - "\u0177\7D\2\2\u0177\u0179\7\13\2\2\u0178\u017a\5\"\22\2\u0179\u0178\3"+ - "\2\2\2\u0179\u017a\3\2\2\2\u017a\u017c\3\2\2\2\u017b\u0176\3\2\2\2\u017b"+ - "\u017c\3\2\2\2\u017c\'\3\2\2\2\u017d\u017e\7E\2\2\u017e\u017f\5@!\2\u017f"+ - "\u0181\7\13\2\2\u0180\u0182\5\"\22\2\u0181\u0180\3\2\2\2\u0181\u0182\3"+ - "\2\2\2\u0182)\3\2\2\2\u0183\u0184\5,\27\2\u0184\u0185\7\n\2\2\u0185\u0186"+ - "\5> \2\u0186\u0188\7\n\2\2\u0187\u0189\5> \2\u0188\u0187\3\2\2\2\u0188"+ - "\u0189\3\2\2\2\u0189\u0194\3\2\2\2\u018a\u018c\5\20\t\2\u018b\u018a\3"+ - "\2\2\2\u018b\u018c\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\7`\2\2\u018e"+ - "\u018f\7\13\2\2\u018f\u0190\5@!\2\u0190\u0191\7\r\2\2\u0191\u0192\5@!"+ - "\2\u0192\u0194\3\2\2\2\u0193\u0183\3\2\2\2\u0193\u018b\3\2\2\2\u0194+"+ - "\3\2\2\2\u0195\u0197\5\22\n\2\u0196\u0195\3\2\2\2\u0196\u0197\3\2\2\2"+ - "\u0197\u019a\3\2\2\2\u0198\u019a\5> \2\u0199\u0196\3\2\2\2\u0199\u0198"+ - "\3\2\2\2\u019a-\3\2\2\2\u019b\u019c\b\30\1\2\u019c\u019d\7\b\2\2\u019d"+ - "\u019e\5.\30\2\u019e\u019f\7\t\2\2\u019f\u01ab\3\2\2\2\u01a0\u01ab\7R"+ - "\2\2\u01a1\u01a3\7Q\2\2\u01a2\u01a4\7R\2\2\u01a3\u01a2\3\2\2\2\u01a3\u01a4"+ - "\3\2\2\2\u01a4\u01ab\3\2\2\2\u01a5\u01ab\5\62\32\2\u01a6\u01ab\5\60\31"+ - "\2\u01a7\u01ab\58\35\2\u01a8\u01ab\5\66\34\2\u01a9\u01ab\7\3\2\2\u01aa"+ - "\u019b\3\2\2\2\u01aa\u01a0\3\2\2\2\u01aa\u01a1\3\2\2\2\u01aa\u01a5\3\2"+ - "\2\2\u01aa\u01a6\3\2\2\2\u01aa\u01a7\3\2\2\2\u01aa\u01a8\3\2\2\2\u01aa"+ - "\u01a9\3\2\2\2\u01ab\u01b9\3\2\2\2\u01ac\u01ad\f\n\2\2\u01ad\u01b8\7\23"+ - "\2\2\u01ae\u01af\f\t\2\2\u01af\u01b1\7\6\2\2\u01b0\u01b2\5@!\2\u01b1\u01b0"+ - "\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2\u01b3\3\2\2\2\u01b3\u01b8\7\7\2\2\u01b4"+ - "\u01b5\f\b\2\2\u01b5\u01b6\7\b\2\2\u01b6\u01b8\7\t\2\2\u01b7\u01ac\3\2"+ - "\2\2\u01b7\u01ae\3\2\2\2\u01b7\u01b4\3\2\2\2\u01b8\u01bb\3\2\2\2\u01b9"+ - "\u01b7\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba/\3\2\2\2\u01bb\u01b9\3\2\2\2"+ - "\u01bc\u01bd\7F\2\2\u01bd\u01be\7`\2\2\u01be\61\3\2\2\2\u01bf\u01c1\7"+ - "F\2\2\u01c0\u01c2\7`\2\2\u01c1\u01c0\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2"+ - "\u01c3\3\2\2\2\u01c3\u01c5\7\4\2\2\u01c4\u01c6\5\64\33\2\u01c5\u01c4\3"+ - "\2\2\2\u01c6\u01c7\3\2\2\2\u01c7\u01c5\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8"+ - "\u01c9\3\2\2\2\u01c9\u01ca\7\5\2\2\u01ca\63\3\2\2\2\u01cb\u01cc\5\22\n"+ - "\2\u01cc\u01cd\7\n\2\2\u01cd\65\3\2\2\2\u01ce\u01cf\7G\2\2\u01cf\u01d0"+ - "\7`\2\2\u01d0\67\3\2\2\2\u01d1\u01d3\7G\2\2\u01d2\u01d4\7`\2\2\u01d3\u01d2"+ - "\3\2\2\2\u01d3\u01d4\3\2\2\2\u01d4\u01d5\3\2\2\2\u01d5\u01d6\7\4\2\2\u01d6"+ - "\u01d7\5:\36\2\u01d7\u01d8\7\5\2\2\u01d89\3\2\2\2\u01d9\u01da\b\36\1\2"+ - "\u01da\u01db\5<\37\2\u01db\u01e1\3\2\2\2\u01dc\u01dd\f\3\2\2\u01dd\u01de"+ - "\7\f\2\2\u01de\u01e0\5<\37\2\u01df\u01dc\3\2\2\2\u01e0\u01e3\3\2\2\2\u01e1"+ - "\u01df\3\2\2\2\u01e1\u01e2\3\2\2\2\u01e2;\3\2\2\2\u01e3\u01e1\3\2\2\2"+ - "\u01e4\u01e7\7`\2\2\u01e5\u01e6\7&\2\2\u01e6\u01e8\5@!\2\u01e7\u01e5\3"+ - "\2\2\2\u01e7\u01e8\3\2\2\2\u01e8=\3\2\2\2\u01e9\u01ea\b \1\2\u01ea\u01eb"+ - "\5@!\2\u01eb\u01f1\3\2\2\2\u01ec\u01ed\f\3\2\2\u01ed\u01ee\7\f\2\2\u01ee"+ - "\u01f0\5@!\2\u01ef\u01ec\3\2\2\2\u01f0\u01f3\3\2\2\2\u01f1\u01ef\3\2\2"+ - "\2\u01f1\u01f2\3\2\2\2\u01f2?\3\2\2\2\u01f3\u01f1\3\2\2\2\u01f4\u01f5"+ - "\b!\1\2\u01f5\u01f6\7\b\2\2\u01f6\u01f7\5> \2\u01f7\u01f8\7\t\2\2\u01f8"+ - "\u022b\3\2\2\2\u01f9\u01fa\7H\2\2\u01fa\u01fd\7\b\2\2\u01fb\u01fe\5@!"+ - "\2\u01fc\u01fe\5.\30\2\u01fd\u01fb\3\2\2\2\u01fd\u01fc\3\2\2\2\u01fe\u01ff"+ - "\3\2\2\2\u01ff\u0200\7\t\2\2\u0200\u022b\3\2\2\2\u0201\u0202\7I\2\2\u0202"+ - "\u0205\7\b\2\2\u0203\u0206\5@!\2\u0204\u0206\5.\30\2\u0205\u0203\3\2\2"+ - "\2\u0205\u0204\3\2\2\2\u0206\u0207\3\2\2\2\u0207\u0208\7\t\2\2\u0208\u022b"+ - "\3\2\2\2\u0209\u020a\7\b\2\2\u020a\u020b\5.\30\2\u020b\u020c\7\t\2\2\u020c"+ - "\u020d\5@!\32\u020d\u022b\3\2\2\2\u020e\u020f\t\3\2\2\u020f\u022b\5@!"+ - "\31\u0210\u0211\7\23\2\2\u0211\u022b\5@!\27\u0212\u0213\t\4\2\2\u0213"+ - "\u022b\5@!\26\u0214\u0215\t\5\2\2\u0215\u022b\5@!\22\u0216\u0217\7\4\2"+ - "\2\u0217\u021c\5@!\2\u0218\u0219\7\f\2\2\u0219\u021b\5@!\2\u021a\u0218"+ - "\3\2\2\2\u021b\u021e\3\2\2\2\u021c\u021a\3\2\2\2\u021c\u021d\3\2\2\2\u021d"+ - "\u021f\3\2\2\2\u021e\u021c\3\2\2\2\u021f\u0220\7\5\2\2\u0220\u022b\3\2"+ - "\2\2\u0221\u022b\7`\2\2\u0222\u022b\7W\2\2\u0223\u0225\7U\2\2\u0224\u0223"+ - "\3\2\2\2\u0225\u0226\3\2\2\2\u0226\u0224\3\2\2\2\u0226\u0227\3\2\2\2\u0227"+ - "\u022b\3\2\2\2\u0228\u022b\7V\2\2\u0229\u022b\7S\2\2\u022a\u01f4\3\2\2"+ - "\2\u022a\u01f9\3\2\2\2\u022a\u0201\3\2\2\2\u022a\u0209\3\2\2\2\u022a\u020e"+ - "\3\2\2\2\u022a\u0210\3\2\2\2\u022a\u0212\3\2\2\2\u022a\u0214\3\2\2\2\u022a"+ - "\u0216\3\2\2\2\u022a\u0221\3\2\2\2\u022a\u0222\3\2\2\2\u022a\u0224\3\2"+ - "\2\2\u022a\u0228\3\2\2\2\u022a\u0229\3\2\2\2\u022b\u0268\3\2\2\2\u022c"+ - "\u022d\f\25\2\2\u022d\u022e\t\6\2\2\u022e\u0267\5@!\26\u022f\u0230\f\24"+ - "\2\2\u0230\u0231\t\7\2\2\u0231\u0267\5@!\25\u0232\u0233\f\23\2\2\u0233"+ - "\u0234\t\b\2\2\u0234\u0267\5@!\24\u0235\u0236\f\21\2\2\u0236\u0237\t\t"+ - "\2\2\u0237\u0267\5@!\22\u0238\u0239\f\20\2\2\u0239\u023a\7\30\2\2\u023a"+ - "\u0267\5@!\21\u023b\u023c\f\17\2\2\u023c\u023d\7\32\2\2\u023d\u0267\5"+ - "@!\20\u023e\u023f\f\16\2\2\u023f\u0240\7\33\2\2\u0240\u0267\5@!\17\u0241"+ - "\u0242\f\r\2\2\u0242\u0243\7$\2\2\u0243\u0267\5@!\16\u0244\u0245\f\f\2"+ - "\2\u0245\u0246\7%\2\2\u0246\u0267\5@!\r\u0247\u0248\f\13\2\2\u0248\u0249"+ - "\7\16\2\2\u0249\u024a\5@!\2\u024a\u024b\7\13\2\2\u024b\u024c\5@!\f\u024c"+ - "\u0267\3\2\2\2\u024d\u024e\f\n\2\2\u024e\u024f\7&\2\2\u024f\u0267\5@!"+ - "\n\u0250\u0251\f\t\2\2\u0251\u0252\7\'\2\2\u0252\u0267\5@!\t\u0253\u0254"+ - "\f \2\2\u0254\u0255\7\17\2\2\u0255\u0267\7`\2\2\u0256\u0257\f\37\2\2\u0257"+ - "\u0258\7\20\2\2\u0258\u0267\7`\2\2\u0259\u025a\f\36\2\2\u025a\u025c\7"+ - "\b\2\2\u025b\u025d\5B\"\2\u025c\u025b\3\2\2\2\u025c\u025d\3\2\2\2\u025d"+ - "\u025e\3\2\2\2\u025e\u0267\7\t\2\2\u025f\u0260\f\33\2\2\u0260\u0261\7"+ - "\6\2\2\u0261\u0262\5> \2\u0262\u0263\7\7\2\2\u0263\u0267\3\2\2\2\u0264"+ - "\u0265\f\30\2\2\u0265\u0267\t\3\2\2\u0266\u022c\3\2\2\2\u0266\u022f\3"+ - "\2\2\2\u0266\u0232\3\2\2\2\u0266\u0235\3\2\2\2\u0266\u0238\3\2\2\2\u0266"+ - "\u023b\3\2\2\2\u0266\u023e\3\2\2\2\u0266\u0241\3\2\2\2\u0266\u0244\3\2"+ - "\2\2\u0266\u0247\3\2\2\2\u0266\u024d\3\2\2\2\u0266\u0250\3\2\2\2\u0266"+ - "\u0253\3\2\2\2\u0266\u0256\3\2\2\2\u0266\u0259\3\2\2\2\u0266\u025f\3\2"+ - "\2\2\u0266\u0264\3\2\2\2\u0267\u026a\3\2\2\2\u0268\u0266\3\2\2\2\u0268"+ - "\u0269\3\2\2\2\u0269A\3\2\2\2\u026a\u0268\3\2\2\2\u026b\u0270\5@!\2\u026c"+ - "\u026d\7\f\2\2\u026d\u026f\5@!\2\u026e\u026c\3\2\2\2\u026f\u0272\3\2\2"+ - "\2\u0270\u026e\3\2\2\2\u0270\u0271\3\2\2\2\u0271C\3\2\2\2\u0272\u0270"+ - "\3\2\2\2\u0273\u0275\7J\2\2\u0274\u0276\5F$\2\u0275\u0274\3\2\2\2\u0275"+ - "\u0276\3\2\2\2\u0276\u0277\3\2\2\2\u0277\u0278\7T\2\2\u0278E\3\2\2\2\u0279"+ - "\u027a\7\b\2\2\u027a\u027f\5H%\2\u027b\u027c\7\f\2\2\u027c\u027e\5H%\2"+ - "\u027d\u027b\3\2\2\2\u027e\u0281\3\2\2\2\u027f\u027d\3\2\2\2\u027f\u0280"+ - "\3\2\2\2\u0280\u0282\3\2\2\2\u0281\u027f\3\2\2\2\u0282\u0283\7\t\2\2\u0283"+ - "G\3\2\2\2\u0284\u0285\7K\2\2\u0285\u0294\7U\2\2\u0286\u0287\7L\2\2\u0287"+ - "\u0294\7`\2\2\u0288\u0289\7M\2\2\u0289\u0294\7U\2\2\u028a\u028b\7N\2\2"+ - "\u028b\u0294\5@!\2\u028c\u028d\7O\2\2\u028d\u0294\5@!\2\u028e\u0291\7"+ - ",\2\2\u028f\u0292\7\67\2\2\u0290\u0292\5@!\2\u0291\u028f\3\2\2\2\u0291"+ - "\u0290\3\2\2\2\u0292\u0294\3\2\2\2\u0293\u0284\3\2\2\2\u0293\u0286\3\2"+ - "\2\2\u0293\u0288\3\2\2\2\u0293\u028a\3\2\2\2\u0293\u028c\3\2\2\2\u0293"+ - "\u028e\3\2\2\2\u0294I\3\2\2\2\u0295\u0297\5L\'\2\u0296\u0295\3\2\2\2\u0297"+ - "\u029a\3\2\2\2\u0298\u0296\3\2\2\2\u0298\u0299\3\2\2\2\u0299K\3\2\2\2"+ - "\u029a\u0298\3\2\2\2\u029b\u029f\5N(\2\u029c\u029f\5P)\2\u029d\u029f\5"+ - "R*\2\u029e\u029b\3\2\2\2\u029e\u029c\3\2\2\2\u029e\u029d\3\2\2\2\u029f"+ - "M\3\2\2\2\u02a0\u02a1\7\u0084\2\2\u02a1\u02a5\7g\2\2\u02a2\u02a3\7\u0083"+ - "\2\2\u02a3\u02a5\7g\2\2\u02a4\u02a0\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a5"+ - "O\3\2\2\2\u02a6\u02a8\7e\2\2\u02a7\u02a9\5T+\2\u02a8\u02a7\3\2\2\2\u02a8"+ - "\u02a9\3\2\2\2\u02a9Q\3\2\2\2\u02aa\u02ab\7d\2\2\u02ab\u02b0\5V,\2\u02ac"+ - "\u02ad\7h\2\2\u02ad\u02af\5V,\2\u02ae\u02ac\3\2\2\2\u02af\u02b2\3\2\2"+ - "\2\u02b0\u02ae\3\2\2\2\u02b0\u02b1\3\2\2\2\u02b1S\3\2\2\2\u02b2\u02b0"+ - "\3\2\2\2\u02b3\u02cb\5V,\2\u02b4\u02b5\7f\2\2\u02b5\u02cb\5V,\2\u02b6"+ - "\u02b7\5V,\2\u02b7\u02b8\7h\2\2\u02b8\u02b9\7\u0084\2\2\u02b9\u02cb\3"+ - "\2\2\2\u02ba\u02bb\7i\2\2\u02bb\u02bc\5V,\2\u02bc\u02bd\7j\2\2\u02bd\u02be"+ - "\7h\2\2\u02be\u02bf\7\u0084\2\2\u02bf\u02cb\3\2\2\2\u02c0\u02c1\7i\2\2"+ - "\u02c1\u02c2\5V,\2\u02c2\u02c3\7h\2\2\u02c3\u02c4\7\u0084\2\2\u02c4\u02c5"+ - "\7j\2\2\u02c5\u02cb\3\2\2\2\u02c6\u02c7\7i\2\2\u02c7\u02c8\5V,\2\u02c8"+ - "\u02c9\7j\2\2\u02c9\u02cb\3\2\2\2\u02ca\u02b3\3\2\2\2\u02ca\u02b4\3\2"+ - "\2\2\u02ca\u02b6\3\2\2\2\u02ca\u02ba\3\2\2\2\u02ca\u02c0\3\2\2\2\u02ca"+ - "\u02c6\3\2\2\2\u02cbU\3\2\2\2\u02cc\u02cd\b,\1\2\u02cd\u02ce\7k\2\2\u02ce"+ - "\u02cf\5V,\2\u02cf\u02d0\7l\2\2\u02d0\u02db\3\2\2\2\u02d1\u02d2\t\n\2"+ - "\2\u02d2\u02db\5V,\n\u02d3\u02db\7\u0084\2\2\u02d4\u02db\7\u0082\2\2\u02d5"+ - "\u02d6\7v\2\2\u02d6\u02d7\7\u0084\2\2\u02d7\u02db\7w\2\2\u02d8\u02db\7"+ - "x\2\2\u02d9\u02db\7\u0081\2\2\u02da\u02cc\3\2\2\2\u02da\u02d1\3\2\2\2"+ - "\u02da\u02d3\3\2\2\2\u02da\u02d4\3\2\2\2\u02da\u02d5\3\2\2\2\u02da\u02d8"+ - "\3\2\2\2\u02da\u02d9\3\2\2\2\u02db\u02ea\3\2\2\2\u02dc\u02dd\f\f\2\2\u02dd"+ - "\u02de\7m\2\2\u02de\u02e9\5V,\r\u02df\u02e0\f\13\2\2\u02e0\u02e1\t\13"+ - "\2\2\u02e1\u02e9\5V,\f\u02e2\u02e3\f\t\2\2\u02e3\u02e4\t\f\2\2\u02e4\u02e9"+ - "\5V,\n\u02e5\u02e6\f\b\2\2\u02e6\u02e7\t\r\2\2\u02e7\u02e9\5V,\t\u02e8"+ - "\u02dc\3\2\2\2\u02e8\u02df\3\2\2\2\u02e8\u02e2\3\2\2\2\u02e8\u02e5\3\2"+ - "\2\2\u02e9\u02ec\3\2\2\2\u02ea\u02e8\3\2\2\2\u02ea\u02eb\3\2\2\2\u02eb"+ - "W\3\2\2\2\u02ec\u02ea\3\2\2\2Gafz\u0084\u008b\u0099\u009f\u00a4\u00aa"+ - "\u00af\u00b8\u00bf\u00ca\u00f2\u00ff\u0107\u0110\u0114\u0119\u0120\u012d"+ - "\u0132\u013e\u014c\u015f\u0168\u016f\u0174\u0179\u017b\u0181\u0188\u018b"+ - "\u0193\u0196\u0199\u01a3\u01aa\u01b1\u01b7\u01b9\u01c1\u01c7\u01d3\u01e1"+ - "\u01e7\u01f1\u01fd\u0205\u021c\u0226\u022a\u025c\u0266\u0268\u0270\u0275"+ - "\u027f\u0291\u0293\u0298\u029e\u02a4\u02a8\u02b0\u02ca\u02da\u02e8\u02ea"; + "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00f9"+ + "\n\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u0106"+ + "\n\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u010e\n\21\3\21\3\21\3\21\3\21"+ + "\3\21\7\21\u0115\n\21\f\21\16\21\u0118\13\21\3\21\5\21\u011b\n\21\3\22"+ + "\6\22\u011e\n\22\r\22\16\22\u011f\3\23\3\23\3\23\3\23\3\23\5\23\u0127"+ + "\n\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u0134"+ + "\n\23\3\23\7\23\u0137\n\23\f\23\16\23\u013a\13\23\3\23\3\23\3\23\3\23"+ + "\3\23\3\23\3\23\7\23\u0143\n\23\f\23\16\23\u0146\13\23\3\23\3\23\3\23"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\7\23\u0151\n\23\f\23\16\23\u0154\13\23"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+ + "\3\23\3\23\5\23\u0166\n\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u016f"+ + "\n\23\3\23\3\23\3\23\3\23\3\23\5\23\u0176\n\23\3\24\6\24\u0179\n\24\r"+ + "\24\16\24\u017a\3\24\3\24\3\24\5\24\u0180\n\24\5\24\u0182\n\24\3\25\3"+ + "\25\3\25\3\25\5\25\u0188\n\25\3\26\3\26\3\26\3\26\3\26\5\26\u018f\n\26"+ + "\3\26\5\26\u0192\n\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u019a\n\26\3"+ + "\27\5\27\u019d\n\27\3\27\5\27\u01a0\n\27\3\30\3\30\3\30\3\30\3\30\3\30"+ + "\3\30\3\30\5\30\u01aa\n\30\3\30\3\30\3\30\3\30\3\30\5\30\u01b1\n\30\3"+ + "\30\3\30\3\30\3\30\3\30\5\30\u01b8\n\30\3\30\3\30\3\30\3\30\7\30\u01be"+ + "\n\30\f\30\16\30\u01c1\13\30\3\31\3\31\3\31\3\32\3\32\5\32\u01c8\n\32"+ + "\3\32\3\32\6\32\u01cc\n\32\r\32\16\32\u01cd\3\32\3\32\3\33\3\33\3\33\3"+ + "\34\3\34\3\34\3\35\3\35\5\35\u01da\n\35\3\35\3\35\3\35\3\35\3\36\3\36"+ + "\3\36\3\36\3\36\3\36\7\36\u01e6\n\36\f\36\16\36\u01e9\13\36\3\37\3\37"+ + "\3\37\5\37\u01ee\n\37\3 \3 \3 \3 \3 \3 \7 \u01f6\n \f \16 \u01f9\13 \3"+ + "!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u0204\n!\3!\3!\3!\3!\3!\3!\5!\u020c\n!\3"+ + "!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\7!\u0221\n!\f"+ + "!\16!\u0224\13!\3!\3!\3!\3!\3!\6!\u022b\n!\r!\16!\u022c\3!\3!\5!\u0231"+ + "\n!\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!\5!\u0263\n!\3!\3!\3!\3!\3!\3!\3!\3!\7!\u026d\n!\f!\16!\u0270"+ + "\13!\3\"\3\"\3\"\7\"\u0275\n\"\f\"\16\"\u0278\13\"\3#\3#\5#\u027c\n#\3"+ + "#\3#\3$\3$\3$\3$\7$\u0284\n$\f$\16$\u0287\13$\3$\3$\3%\3%\3%\3%\3%\3%"+ + "\3%\3%\3%\3%\3%\3%\3%\5%\u0298\n%\5%\u029a\n%\3&\7&\u029d\n&\f&\16&\u02a0"+ + "\13&\3\'\3\'\3\'\5\'\u02a5\n\'\3(\3(\3(\3(\5(\u02ab\n(\3)\3)\5)\u02af"+ + "\n)\3*\3*\3*\3*\7*\u02b5\n*\f*\16*\u02b8\13*\3+\3+\3+\3+\3+\3+\3+\3+\3"+ + "+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\5+\u02d1\n+\3,\3,\3,\3,\3"+ + ",\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02e1\n,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3"+ + ",\3,\3,\7,\u02ef\n,\f,\16,\u02f2\13,\3,\2\b\24.:>@V-\2\4\6\b\n\f\16\20"+ + "\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTV\2\16\4\2XX"+ + "aa\3\2\26\27\5\2\21\22\30\31QQ\4\2 ##\3\2\34\35\3\2\23\25\3\2\21\22\3"+ + "\2\36#\3\2qt\3\2op\3\2uv\3\2qr\2\u035c\2X\3\2\2\2\4[\3\2\2\2\6a\3\2\2"+ + "\2\bf\3\2\2\2\nh\3\2\2\2\fz\3\2\2\2\16|\3\2\2\2\20\u0084\3\2\2\2\22\u008e"+ + "\3\2\2\2\24\u0091\3\2\2\2\26\u00a4\3\2\2\2\30\u00a6\3\2\2\2\32\u00b3\3"+ + "\2\2\2\34\u00bf\3\2\2\2\36\u00f8\3\2\2\2 \u011a\3\2\2\2\"\u011d\3\2\2"+ + "\2$\u0175\3\2\2\2&\u0178\3\2\2\2(\u0183\3\2\2\2*\u0199\3\2\2\2,\u019f"+ + "\3\2\2\2.\u01b0\3\2\2\2\60\u01c2\3\2\2\2\62\u01c5\3\2\2\2\64\u01d1\3\2"+ + "\2\2\66\u01d4\3\2\2\28\u01d7\3\2\2\2:\u01df\3\2\2\2<\u01ea\3\2\2\2>\u01ef"+ + "\3\2\2\2@\u0230\3\2\2\2B\u0271\3\2\2\2D\u0279\3\2\2\2F\u027f\3\2\2\2H"+ + "\u0299\3\2\2\2J\u029e\3\2\2\2L\u02a4\3\2\2\2N\u02aa\3\2\2\2P\u02ac\3\2"+ + "\2\2R\u02b0\3\2\2\2T\u02d0\3\2\2\2V\u02e0\3\2\2\2XY\5\6\4\2YZ\7\2\2\3"+ + "Z\3\3\2\2\2[\\\5J&\2\\]\7\2\2\3]\5\3\2\2\2^`\5\b\5\2_^\3\2\2\2`c\3\2\2"+ + "\2a_\3\2\2\2ab\3\2\2\2b\7\3\2\2\2ca\3\2\2\2dg\5\f\7\2eg\5\n\6\2fd\3\2"+ + "\2\2fe\3\2\2\2g\t\3\2\2\2hi\7(\2\2ij\7V\2\2j\13\3\2\2\2kl\5\22\n\2lm\7"+ + "\n\2\2m{\3\2\2\2no\5\62\32\2op\7\n\2\2p{\3\2\2\2qr\58\35\2rs\7\n\2\2s"+ + "{\3\2\2\2t{\5\30\r\2u{\5D#\2v{\5\36\20\2wx\5\16\b\2xy\7\n\2\2y{\3\2\2"+ + "\2zk\3\2\2\2zn\3\2\2\2zq\3\2\2\2zt\3\2\2\2zu\3\2\2\2zv\3\2\2\2zw\3\2\2"+ + "\2{\r\3\2\2\2|}\7)\2\2}~\5.\30\2~\177\7a\2\2\177\u0080\b\b\1\2\u0080\17"+ + "\3\2\2\2\u0081\u0083\5 \21\2\u0082\u0081\3\2\2\2\u0083\u0086\3\2\2\2\u0084"+ + "\u0082\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0087\3\2\2\2\u0086\u0084\3\2"+ + "\2\2\u0087\u008b\5.\30\2\u0088\u008a\5 \21\2\u0089\u0088\3\2\2\2\u008a"+ + "\u008d\3\2\2\2\u008b\u0089\3\2\2\2\u008b\u008c\3\2\2\2\u008c\21\3\2\2"+ + "\2\u008d\u008b\3\2\2\2\u008e\u008f\5\20\t\2\u008f\u0090\5\24\13\2\u0090"+ + "\23\3\2\2\2\u0091\u0092\b\13\1\2\u0092\u0093\5\26\f\2\u0093\u0099\3\2"+ + "\2\2\u0094\u0095\f\3\2\2\u0095\u0096\7\f\2\2\u0096\u0098\5\26\f\2\u0097"+ + "\u0094\3\2\2\2\u0098\u009b\3\2\2\2\u0099\u0097\3\2\2\2\u0099\u009a\3\2"+ + "\2\2\u009a\25\3\2\2\2\u009b\u0099\3\2\2\2\u009c\u009f\7a\2\2\u009d\u009e"+ + "\7&\2\2\u009e\u00a0\5@!\2\u009f\u009d\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0"+ + "\u00a5\3\2\2\2\u00a1\u00a2\7a\2\2\u00a2\u00a3\7&\2\2\u00a3\u00a5\5D#\2"+ + "\u00a4\u009c\3\2\2\2\u00a4\u00a1\3\2\2\2\u00a5\27\3\2\2\2\u00a6\u00a7"+ + "\5\20\t\2\u00a7\u00a8\7a\2\2\u00a8\u00aa\7\b\2\2\u00a9\u00ab\5\32\16\2"+ + "\u00aa\u00a9\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ad"+ + "\7\t\2\2\u00ad\u00af\7\4\2\2\u00ae\u00b0\5\"\22\2\u00af\u00ae\3\2\2\2"+ + "\u00af\u00b0\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b2\7\5\2\2\u00b2\31"+ + "\3\2\2\2\u00b3\u00b8\5\34\17\2\u00b4\u00b5\7\f\2\2\u00b5\u00b7\5\34\17"+ + "\2\u00b6\u00b4\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8\u00b9"+ + "\3\2\2\2\u00b9\33\3\2\2\2\u00ba\u00b8\3\2\2\2\u00bb\u00bc\5\20\t\2\u00bc"+ + "\u00bd\7a\2\2\u00bd\u00c0\3\2\2\2\u00be\u00c0\7S\2\2\u00bf\u00bb\3\2\2"+ + "\2\u00bf\u00be\3\2\2\2\u00c0\35\3\2\2\2\u00c1\u00c2\7*\2\2\u00c2\u00c3"+ + "\7+\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c5\7\b\2\2\u00c5\u00ca\7X\2\2\u00c6"+ + "\u00c7\7\f\2\2\u00c7\u00c9\7X\2\2\u00c8\u00c6\3\2\2\2\u00c9\u00cc\3\2"+ + "\2\2\u00ca\u00c8\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cd\3\2\2\2\u00cc"+ + "\u00ca\3\2\2\2\u00cd\u00f9\7\t\2\2\u00ce\u00cf\7*\2\2\u00cf\u00d0\7,\2"+ + "\2\u00d0\u00d1\3\2\2\2\u00d1\u00d2\7\b\2\2\u00d2\u00d3\7X\2\2\u00d3\u00f9"+ + "\7\t\2\2\u00d4\u00d5\7*\2\2\u00d5\u00d6\7-\2\2\u00d6\u00d7\3\2\2\2\u00d7"+ + "\u00d8\7\b\2\2\u00d8\u00d9\7a\2\2\u00d9\u00f9\7\t\2\2\u00da\u00db\7*\2"+ + "\2\u00db\u00dc\7/\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00de\7\b\2\2\u00de\u00df"+ + "\7a\2\2\u00df\u00f9\7\t\2\2\u00e0\u00e1\7*\2\2\u00e1\u00e2\7.\2\2\u00e2"+ + "\u00e3\3\2\2\2\u00e3\u00e4\7\b\2\2\u00e4\u00e5\7V\2\2\u00e5\u00f9\7\t"+ + "\2\2\u00e6\u00e7\7*\2\2\u00e7\u00e8\7\60\2\2\u00e8\u00e9\3\2\2\2\u00e9"+ + "\u00ea\7\b\2\2\u00ea\u00eb\7a\2\2\u00eb\u00f9\7\t\2\2\u00ec\u00ed\7*\2"+ + "\2\u00ed\u00ee\7\61\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\7\b\2\2\u00f0"+ + "\u00f1\7a\2\2\u00f1\u00f9\7\t\2\2\u00f2\u00f3\7*\2\2\u00f3\u00f4\7\62"+ + "\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f6\7\b\2\2\u00f6\u00f7\7a\2\2\u00f7"+ + "\u00f9\7\t\2\2\u00f8\u00c1\3\2\2\2\u00f8\u00ce\3\2\2\2\u00f8\u00d4\3\2"+ + "\2\2\u00f8\u00da\3\2\2\2\u00f8\u00e0\3\2\2\2\u00f8\u00e6\3\2\2\2\u00f8"+ + "\u00ec\3\2\2\2\u00f8\u00f2\3\2\2\2\u00f9\37\3\2\2\2\u00fa\u011b\7\63\2"+ + "\2\u00fb\u011b\7\64\2\2\u00fc\u011b\7\65\2\2\u00fd\u00fe\7\66\2\2\u00fe"+ + "\u00ff\7\b\2\2\u00ff\u0100\7X\2\2\u0100\u011b\7\t\2\2\u0101\u0105\7\67"+ + "\2\2\u0102\u0103\7\b\2\2\u0103\u0104\t\2\2\2\u0104\u0106\7\t\2\2\u0105"+ + "\u0102\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u011b\3\2\2\2\u0107\u011b\78"+ + "\2\2\u0108\u011b\79\2\2\u0109\u010d\7:\2\2\u010a\u010b\7\b\2\2\u010b\u010c"+ + "\7a\2\2\u010c\u010e\7\t\2\2\u010d\u010a\3\2\2\2\u010d\u010e\3\2\2\2\u010e"+ + "\u011b\3\2\2\2\u010f\u0110\7+\2\2\u0110\u0111\7\b\2\2\u0111\u0116\7X\2"+ + "\2\u0112\u0113\7\f\2\2\u0113\u0115\7X\2\2\u0114\u0112\3\2\2\2\u0115\u0118"+ + "\3\2\2\2\u0116\u0114\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u0119\3\2\2\2\u0118"+ + "\u0116\3\2\2\2\u0119\u011b\7\t\2\2\u011a\u00fa\3\2\2\2\u011a\u00fb\3\2"+ + "\2\2\u011a\u00fc\3\2\2\2\u011a\u00fd\3\2\2\2\u011a\u0101\3\2\2\2\u011a"+ + "\u0107\3\2\2\2\u011a\u0108\3\2\2\2\u011a\u0109\3\2\2\2\u011a\u010f\3\2"+ + "\2\2\u011b!\3\2\2\2\u011c\u011e\5$\23\2\u011d\u011c\3\2\2\2\u011e\u011f"+ + "\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120#\3\2\2\2\u0121"+ + "\u0122\5\22\n\2\u0122\u0123\7\n\2\2\u0123\u0176\3\2\2\2\u0124\u0126\7"+ + "\4\2\2\u0125\u0127\5\"\22\2\u0126\u0125\3\2\2\2\u0126\u0127\3\2\2\2\u0127"+ + "\u0128\3\2\2\2\u0128\u0176\7\5\2\2\u0129\u012a\5> \2\u012a\u012b\7\n\2"+ + "\2\u012b\u0176\3\2\2\2\u012c\u012d\7;\2\2\u012d\u012e\7\b\2\2\u012e\u012f"+ + "\5> \2\u012f\u0130\7\t\2\2\u0130\u0133\5$\23\2\u0131\u0132\7<\2\2\u0132"+ + "\u0134\5$\23\2\u0133\u0131\3\2\2\2\u0133\u0134\3\2\2\2\u0134\u0176\3\2"+ + "\2\2\u0135\u0137\5 \21\2\u0136\u0135\3\2\2\2\u0137\u013a\3\2\2\2\u0138"+ + "\u0136\3\2\2\2\u0138\u0139\3\2\2\2\u0139\u013b\3\2\2\2\u013a\u0138\3\2"+ + "\2\2\u013b\u013c\7=\2\2\u013c\u013d\7\b\2\2\u013d\u013e\5> \2\u013e\u013f"+ + "\7\t\2\2\u013f\u0140\5$\23\2\u0140\u0176\3\2\2\2\u0141\u0143\5 \21\2\u0142"+ + "\u0141\3\2\2\2\u0143\u0146\3\2\2\2\u0144\u0142\3\2\2\2\u0144\u0145\3\2"+ + "\2\2\u0145\u0147\3\2\2\2\u0146\u0144\3\2\2\2\u0147\u0148\7>\2\2\u0148"+ + "\u0149\5$\23\2\u0149\u014a\7=\2\2\u014a\u014b\7\b\2\2\u014b\u014c\5> "+ + "\2\u014c\u014d\7\t\2\2\u014d\u014e\7\n\2\2\u014e\u0176\3\2\2\2\u014f\u0151"+ + "\5 \21\2\u0150\u014f\3\2\2\2\u0151\u0154\3\2\2\2\u0152\u0150\3\2\2\2\u0152"+ + "\u0153\3\2\2\2\u0153\u0155\3\2\2\2\u0154\u0152\3\2\2\2\u0155\u0156\7?"+ + "\2\2\u0156\u0157\7\b\2\2\u0157\u0158\5*\26\2\u0158\u0159\7\t\2\2\u0159"+ + "\u015a\5$\23\2\u015a\u0176\3\2\2\2\u015b\u015c\7@\2\2\u015c\u015d\7\b"+ + "\2\2\u015d\u015e\5> \2\u015e\u015f\7\t\2\2\u015f\u0160\7\4\2\2\u0160\u0161"+ + "\5&\24\2\u0161\u0162\7\5\2\2\u0162\u0176\3\2\2\2\u0163\u0165\7A\2\2\u0164"+ + "\u0166\5> \2\u0165\u0164\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0167\3\2\2"+ + "\2\u0167\u0176\7\n\2\2\u0168\u0169\7B\2\2\u0169\u0176\7\n\2\2\u016a\u016b"+ + "\7C\2\2\u016b\u0176\7\n\2\2\u016c\u016e\7D\2\2\u016d\u016f\5F$\2\u016e"+ + "\u016d\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u0171\7\4"+ + "\2\2\u0171\u0172\5J&\2\u0172\u0173\7x\2\2\u0173\u0176\3\2\2\2\u0174\u0176"+ + "\5D#\2\u0175\u0121\3\2\2\2\u0175\u0124\3\2\2\2\u0175\u0129\3\2\2\2\u0175"+ + "\u012c\3\2\2\2\u0175\u0138\3\2\2\2\u0175\u0144\3\2\2\2\u0175\u0152\3\2"+ + "\2\2\u0175\u015b\3\2\2\2\u0175\u0163\3\2\2\2\u0175\u0168\3\2\2\2\u0175"+ + "\u016a\3\2\2\2\u0175\u016c\3\2\2\2\u0175\u0174\3\2\2\2\u0176%\3\2\2\2"+ + "\u0177\u0179\5(\25\2\u0178\u0177\3\2\2\2\u0179\u017a\3\2\2\2\u017a\u0178"+ + "\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u0181\3\2\2\2\u017c\u017d\7E\2\2\u017d"+ + "\u017f\7\13\2\2\u017e\u0180\5\"\22\2\u017f\u017e\3\2\2\2\u017f\u0180\3"+ + "\2\2\2\u0180\u0182\3\2\2\2\u0181\u017c\3\2\2\2\u0181\u0182\3\2\2\2\u0182"+ + "\'\3\2\2\2\u0183\u0184\7F\2\2\u0184\u0185\5@!\2\u0185\u0187\7\13\2\2\u0186"+ + "\u0188\5\"\22\2\u0187\u0186\3\2\2\2\u0187\u0188\3\2\2\2\u0188)\3\2\2\2"+ + "\u0189\u018a\5,\27\2\u018a\u018b\7\n\2\2\u018b\u018c\5> \2\u018c\u018e"+ + "\7\n\2\2\u018d\u018f\5> \2\u018e\u018d\3\2\2\2\u018e\u018f\3\2\2\2\u018f"+ + "\u019a\3\2\2\2\u0190\u0192\5\20\t\2\u0191\u0190\3\2\2\2\u0191\u0192\3"+ + "\2\2\2\u0192\u0193\3\2\2\2\u0193\u0194\7a\2\2\u0194\u0195\7\13\2\2\u0195"+ + "\u0196\5@!\2\u0196\u0197\7\r\2\2\u0197\u0198\5@!\2\u0198\u019a\3\2\2\2"+ + "\u0199\u0189\3\2\2\2\u0199\u0191\3\2\2\2\u019a+\3\2\2\2\u019b\u019d\5"+ + "\22\n\2\u019c\u019b\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u01a0\3\2\2\2\u019e"+ + "\u01a0\5> \2\u019f\u019c\3\2\2\2\u019f\u019e\3\2\2\2\u01a0-\3\2\2\2\u01a1"+ + "\u01a2\b\30\1\2\u01a2\u01a3\7\b\2\2\u01a3\u01a4\5.\30\2\u01a4\u01a5\7"+ + "\t\2\2\u01a5\u01b1\3\2\2\2\u01a6\u01b1\7S\2\2\u01a7\u01a9\7R\2\2\u01a8"+ + "\u01aa\7S\2\2\u01a9\u01a8\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01b1\3\2"+ + "\2\2\u01ab\u01b1\5\62\32\2\u01ac\u01b1\5\60\31\2\u01ad\u01b1\58\35\2\u01ae"+ + "\u01b1\5\66\34\2\u01af\u01b1\7\3\2\2\u01b0\u01a1\3\2\2\2\u01b0\u01a6\3"+ + "\2\2\2\u01b0\u01a7\3\2\2\2\u01b0\u01ab\3\2\2\2\u01b0\u01ac\3\2\2\2\u01b0"+ + "\u01ad\3\2\2\2\u01b0\u01ae\3\2\2\2\u01b0\u01af\3\2\2\2\u01b1\u01bf\3\2"+ + "\2\2\u01b2\u01b3\f\n\2\2\u01b3\u01be\7\23\2\2\u01b4\u01b5\f\t\2\2\u01b5"+ + "\u01b7\7\6\2\2\u01b6\u01b8\5@!\2\u01b7\u01b6\3\2\2\2\u01b7\u01b8\3\2\2"+ + "\2\u01b8\u01b9\3\2\2\2\u01b9\u01be\7\7\2\2\u01ba\u01bb\f\b\2\2\u01bb\u01bc"+ + "\7\b\2\2\u01bc\u01be\7\t\2\2\u01bd\u01b2\3\2\2\2\u01bd\u01b4\3\2\2\2\u01bd"+ + "\u01ba\3\2\2\2\u01be\u01c1\3\2\2\2\u01bf\u01bd\3\2\2\2\u01bf\u01c0\3\2"+ + "\2\2\u01c0/\3\2\2\2\u01c1\u01bf\3\2\2\2\u01c2\u01c3\7G\2\2\u01c3\u01c4"+ + "\7a\2\2\u01c4\61\3\2\2\2\u01c5\u01c7\7G\2\2\u01c6\u01c8\7a\2\2\u01c7\u01c6"+ + "\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\u01cb\7\4\2\2\u01ca"+ + "\u01cc\5\64\33\2\u01cb\u01ca\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01cb\3"+ + "\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01cf\3\2\2\2\u01cf\u01d0\7\5\2\2\u01d0"+ + "\63\3\2\2\2\u01d1\u01d2\5\22\n\2\u01d2\u01d3\7\n\2\2\u01d3\65\3\2\2\2"+ + "\u01d4\u01d5\7H\2\2\u01d5\u01d6\7a\2\2\u01d6\67\3\2\2\2\u01d7\u01d9\7"+ + "H\2\2\u01d8\u01da\7a\2\2\u01d9\u01d8\3\2\2\2\u01d9\u01da\3\2\2\2\u01da"+ + "\u01db\3\2\2\2\u01db\u01dc\7\4\2\2\u01dc\u01dd\5:\36\2\u01dd\u01de\7\5"+ + "\2\2\u01de9\3\2\2\2\u01df\u01e0\b\36\1\2\u01e0\u01e1\5<\37\2\u01e1\u01e7"+ + "\3\2\2\2\u01e2\u01e3\f\3\2\2\u01e3\u01e4\7\f\2\2\u01e4\u01e6\5<\37\2\u01e5"+ + "\u01e2\3\2\2\2\u01e6\u01e9\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7\u01e8\3\2"+ + "\2\2\u01e8;\3\2\2\2\u01e9\u01e7\3\2\2\2\u01ea\u01ed\7a\2\2\u01eb\u01ec"+ + "\7&\2\2\u01ec\u01ee\5@!\2\u01ed\u01eb\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee"+ + "=\3\2\2\2\u01ef\u01f0\b \1\2\u01f0\u01f1\5@!\2\u01f1\u01f7\3\2\2\2\u01f2"+ + "\u01f3\f\3\2\2\u01f3\u01f4\7\f\2\2\u01f4\u01f6\5@!\2\u01f5\u01f2\3\2\2"+ + "\2\u01f6\u01f9\3\2\2\2\u01f7\u01f5\3\2\2\2\u01f7\u01f8\3\2\2\2\u01f8?"+ + "\3\2\2\2\u01f9\u01f7\3\2\2\2\u01fa\u01fb\b!\1\2\u01fb\u01fc\7\b\2\2\u01fc"+ + "\u01fd\5> \2\u01fd\u01fe\7\t\2\2\u01fe\u0231\3\2\2\2\u01ff\u0200\7I\2"+ + "\2\u0200\u0203\7\b\2\2\u0201\u0204\5@!\2\u0202\u0204\5.\30\2\u0203\u0201"+ + "\3\2\2\2\u0203\u0202\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0206\7\t\2\2\u0206"+ + "\u0231\3\2\2\2\u0207\u0208\7J\2\2\u0208\u020b\7\b\2\2\u0209\u020c\5@!"+ + "\2\u020a\u020c\5.\30\2\u020b\u0209\3\2\2\2\u020b\u020a\3\2\2\2\u020c\u020d"+ + "\3\2\2\2\u020d\u020e\7\t\2\2\u020e\u0231\3\2\2\2\u020f\u0210\7\b\2\2\u0210"+ + "\u0211\5.\30\2\u0211\u0212\7\t\2\2\u0212\u0213\5@!\32\u0213\u0231\3\2"+ + "\2\2\u0214\u0215\t\3\2\2\u0215\u0231\5@!\31\u0216\u0217\7\23\2\2\u0217"+ + "\u0231\5@!\27\u0218\u0219\t\4\2\2\u0219\u0231\5@!\26\u021a\u021b\t\5\2"+ + "\2\u021b\u0231\5@!\22\u021c\u021d\7\4\2\2\u021d\u0222\5@!\2\u021e\u021f"+ + "\7\f\2\2\u021f\u0221\5@!\2\u0220\u021e\3\2\2\2\u0221\u0224\3\2\2\2\u0222"+ + "\u0220\3\2\2\2\u0222\u0223\3\2\2\2\u0223\u0225\3\2\2\2\u0224\u0222\3\2"+ + "\2\2\u0225\u0226\7\5\2\2\u0226\u0231\3\2\2\2\u0227\u0231\7a\2\2\u0228"+ + "\u0231\7X\2\2\u0229\u022b\7V\2\2\u022a\u0229\3\2\2\2\u022b\u022c\3\2\2"+ + "\2\u022c\u022a\3\2\2\2\u022c\u022d\3\2\2\2\u022d\u0231\3\2\2\2\u022e\u0231"+ + "\7W\2\2\u022f\u0231\7T\2\2\u0230\u01fa\3\2\2\2\u0230\u01ff\3\2\2\2\u0230"+ + "\u0207\3\2\2\2\u0230\u020f\3\2\2\2\u0230\u0214\3\2\2\2\u0230\u0216\3\2"+ + "\2\2\u0230\u0218\3\2\2\2\u0230\u021a\3\2\2\2\u0230\u021c\3\2\2\2\u0230"+ + "\u0227\3\2\2\2\u0230\u0228\3\2\2\2\u0230\u022a\3\2\2\2\u0230\u022e\3\2"+ + "\2\2\u0230\u022f\3\2\2\2\u0231\u026e\3\2\2\2\u0232\u0233\f\25\2\2\u0233"+ + "\u0234\t\6\2\2\u0234\u026d\5@!\26\u0235\u0236\f\24\2\2\u0236\u0237\t\7"+ + "\2\2\u0237\u026d\5@!\25\u0238\u0239\f\23\2\2\u0239\u023a\t\b\2\2\u023a"+ + "\u026d\5@!\24\u023b\u023c\f\21\2\2\u023c\u023d\t\t\2\2\u023d\u026d\5@"+ + "!\22\u023e\u023f\f\20\2\2\u023f\u0240\7\30\2\2\u0240\u026d\5@!\21\u0241"+ + "\u0242\f\17\2\2\u0242\u0243\7\32\2\2\u0243\u026d\5@!\20\u0244\u0245\f"+ + "\16\2\2\u0245\u0246\7\33\2\2\u0246\u026d\5@!\17\u0247\u0248\f\r\2\2\u0248"+ + "\u0249\7$\2\2\u0249\u026d\5@!\16\u024a\u024b\f\f\2\2\u024b\u024c\7%\2"+ + "\2\u024c\u026d\5@!\r\u024d\u024e\f\13\2\2\u024e\u024f\7\16\2\2\u024f\u0250"+ + "\5@!\2\u0250\u0251\7\13\2\2\u0251\u0252\5@!\f\u0252\u026d\3\2\2\2\u0253"+ + "\u0254\f\n\2\2\u0254\u0255\7&\2\2\u0255\u026d\5@!\n\u0256\u0257\f\t\2"+ + "\2\u0257\u0258\7\'\2\2\u0258\u026d\5@!\t\u0259\u025a\f \2\2\u025a\u025b"+ + "\7\17\2\2\u025b\u026d\7a\2\2\u025c\u025d\f\37\2\2\u025d\u025e\7\20\2\2"+ + "\u025e\u026d\7a\2\2\u025f\u0260\f\36\2\2\u0260\u0262\7\b\2\2\u0261\u0263"+ + "\5B\"\2\u0262\u0261\3\2\2\2\u0262\u0263\3\2\2\2\u0263\u0264\3\2\2\2\u0264"+ + "\u026d\7\t\2\2\u0265\u0266\f\33\2\2\u0266\u0267\7\6\2\2\u0267\u0268\5"+ + "> \2\u0268\u0269\7\7\2\2\u0269\u026d\3\2\2\2\u026a\u026b\f\30\2\2\u026b"+ + "\u026d\t\3\2\2\u026c\u0232\3\2\2\2\u026c\u0235\3\2\2\2\u026c\u0238\3\2"+ + "\2\2\u026c\u023b\3\2\2\2\u026c\u023e\3\2\2\2\u026c\u0241\3\2\2\2\u026c"+ + "\u0244\3\2\2\2\u026c\u0247\3\2\2\2\u026c\u024a\3\2\2\2\u026c\u024d\3\2"+ + "\2\2\u026c\u0253\3\2\2\2\u026c\u0256\3\2\2\2\u026c\u0259\3\2\2\2\u026c"+ + "\u025c\3\2\2\2\u026c\u025f\3\2\2\2\u026c\u0265\3\2\2\2\u026c\u026a\3\2"+ + "\2\2\u026d\u0270\3\2\2\2\u026e\u026c\3\2\2\2\u026e\u026f\3\2\2\2\u026f"+ + "A\3\2\2\2\u0270\u026e\3\2\2\2\u0271\u0276\5@!\2\u0272\u0273\7\f\2\2\u0273"+ + "\u0275\5@!\2\u0274\u0272\3\2\2\2\u0275\u0278\3\2\2\2\u0276\u0274\3\2\2"+ + "\2\u0276\u0277\3\2\2\2\u0277C\3\2\2\2\u0278\u0276\3\2\2\2\u0279\u027b"+ + "\7K\2\2\u027a\u027c\5F$\2\u027b\u027a\3\2\2\2\u027b\u027c\3\2\2\2\u027c"+ + "\u027d\3\2\2\2\u027d\u027e\7U\2\2\u027eE\3\2\2\2\u027f\u0280\7\b\2\2\u0280"+ + "\u0285\5H%\2\u0281\u0282\7\f\2\2\u0282\u0284\5H%\2\u0283\u0281\3\2\2\2"+ + "\u0284\u0287\3\2\2\2\u0285\u0283\3\2\2\2\u0285\u0286\3\2\2\2\u0286\u0288"+ + "\3\2\2\2\u0287\u0285\3\2\2\2\u0288\u0289\7\t\2\2\u0289G\3\2\2\2\u028a"+ + "\u028b\7L\2\2\u028b\u029a\7V\2\2\u028c\u028d\7M\2\2\u028d\u029a\7a\2\2"+ + "\u028e\u028f\7N\2\2\u028f\u029a\7V\2\2\u0290\u0291\7O\2\2\u0291\u029a"+ + "\5@!\2\u0292\u0293\7P\2\2\u0293\u029a\5@!\2\u0294\u0297\7,\2\2\u0295\u0298"+ + "\78\2\2\u0296\u0298\5@!\2\u0297\u0295\3\2\2\2\u0297\u0296\3\2\2\2\u0298"+ + "\u029a\3\2\2\2\u0299\u028a\3\2\2\2\u0299\u028c\3\2\2\2\u0299\u028e\3\2"+ + "\2\2\u0299\u0290\3\2\2\2\u0299\u0292\3\2\2\2\u0299\u0294\3\2\2\2\u029a"+ + "I\3\2\2\2\u029b\u029d\5L\'\2\u029c\u029b\3\2\2\2\u029d\u02a0\3\2\2\2\u029e"+ + "\u029c\3\2\2\2\u029e\u029f\3\2\2\2\u029fK\3\2\2\2\u02a0\u029e\3\2\2\2"+ + "\u02a1\u02a5\5N(\2\u02a2\u02a5\5P)\2\u02a3\u02a5\5R*\2\u02a4\u02a1\3\2"+ + "\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a3\3\2\2\2\u02a5M\3\2\2\2\u02a6\u02a7"+ + "\7\u0085\2\2\u02a7\u02ab\7h\2\2\u02a8\u02a9\7\u0084\2\2\u02a9\u02ab\7"+ + "h\2\2\u02aa\u02a6\3\2\2\2\u02aa\u02a8\3\2\2\2\u02abO\3\2\2\2\u02ac\u02ae"+ + "\7f\2\2\u02ad\u02af\5T+\2\u02ae\u02ad\3\2\2\2\u02ae\u02af\3\2\2\2\u02af"+ + "Q\3\2\2\2\u02b0\u02b1\7e\2\2\u02b1\u02b6\5V,\2\u02b2\u02b3\7i\2\2\u02b3"+ + "\u02b5\5V,\2\u02b4\u02b2\3\2\2\2\u02b5\u02b8\3\2\2\2\u02b6\u02b4\3\2\2"+ + "\2\u02b6\u02b7\3\2\2\2\u02b7S\3\2\2\2\u02b8\u02b6\3\2\2\2\u02b9\u02d1"+ + "\5V,\2\u02ba\u02bb\7g\2\2\u02bb\u02d1\5V,\2\u02bc\u02bd\5V,\2\u02bd\u02be"+ + "\7i\2\2\u02be\u02bf\7\u0085\2\2\u02bf\u02d1\3\2\2\2\u02c0\u02c1\7j\2\2"+ + "\u02c1\u02c2\5V,\2\u02c2\u02c3\7k\2\2\u02c3\u02c4\7i\2\2\u02c4\u02c5\7"+ + "\u0085\2\2\u02c5\u02d1\3\2\2\2\u02c6\u02c7\7j\2\2\u02c7\u02c8\5V,\2\u02c8"+ + "\u02c9\7i\2\2\u02c9\u02ca\7\u0085\2\2\u02ca\u02cb\7k\2\2\u02cb\u02d1\3"+ + "\2\2\2\u02cc\u02cd\7j\2\2\u02cd\u02ce\5V,\2\u02ce\u02cf\7k\2\2\u02cf\u02d1"+ + "\3\2\2\2\u02d0\u02b9\3\2\2\2\u02d0\u02ba\3\2\2\2\u02d0\u02bc\3\2\2\2\u02d0"+ + "\u02c0\3\2\2\2\u02d0\u02c6\3\2\2\2\u02d0\u02cc\3\2\2\2\u02d1U\3\2\2\2"+ + "\u02d2\u02d3\b,\1\2\u02d3\u02d4\7l\2\2\u02d4\u02d5\5V,\2\u02d5\u02d6\7"+ + "m\2\2\u02d6\u02e1\3\2\2\2\u02d7\u02d8\t\n\2\2\u02d8\u02e1\5V,\n\u02d9"+ + "\u02e1\7\u0085\2\2\u02da\u02e1\7\u0083\2\2\u02db\u02dc\7w\2\2\u02dc\u02dd"+ + "\7\u0085\2\2\u02dd\u02e1\7x\2\2\u02de\u02e1\7y\2\2\u02df\u02e1\7\u0082"+ + "\2\2\u02e0\u02d2\3\2\2\2\u02e0\u02d7\3\2\2\2\u02e0\u02d9\3\2\2\2\u02e0"+ + "\u02da\3\2\2\2\u02e0\u02db\3\2\2\2\u02e0\u02de\3\2\2\2\u02e0\u02df\3\2"+ + "\2\2\u02e1\u02f0\3\2\2\2\u02e2\u02e3\f\f\2\2\u02e3\u02e4\7n\2\2\u02e4"+ + "\u02ef\5V,\r\u02e5\u02e6\f\13\2\2\u02e6\u02e7\t\13\2\2\u02e7\u02ef\5V"+ + ",\f\u02e8\u02e9\f\t\2\2\u02e9\u02ea\t\f\2\2\u02ea\u02ef\5V,\n\u02eb\u02ec"+ + "\f\b\2\2\u02ec\u02ed\t\r\2\2\u02ed\u02ef\5V,\t\u02ee\u02e2\3\2\2\2\u02ee"+ + "\u02e5\3\2\2\2\u02ee\u02e8\3\2\2\2\u02ee\u02eb\3\2\2\2\u02ef\u02f2\3\2"+ + "\2\2\u02f0\u02ee\3\2\2\2\u02f0\u02f1\3\2\2\2\u02f1W\3\2\2\2\u02f2\u02f0"+ + "\3\2\2\2Gafz\u0084\u008b\u0099\u009f\u00a4\u00aa\u00af\u00b8\u00bf\u00ca"+ + "\u00f8\u0105\u010d\u0116\u011a\u011f\u0126\u0133\u0138\u0144\u0152\u0165"+ + "\u016e\u0175\u017a\u017f\u0181\u0187\u018e\u0191\u0199\u019c\u019f\u01a9"+ + "\u01b0\u01b7\u01bd\u01bf\u01c7\u01cd\u01d9\u01e7\u01ed\u01f7\u0203\u020b"+ + "\u0222\u022c\u0230\u0262\u026c\u026e\u0276\u027b\u0285\u0297\u0299\u029e"+ + "\u02a4\u02aa\u02ae\u02b6\u02d0\u02e0\u02ee\u02f0"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens index c1a5d096f..db1cd5f56 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens @@ -42,95 +42,96 @@ RESERVE=41 PC=42 TARGET=43 LINK=44 -CODESEG=45 -DATASEG=46 -ENCODING=47 -CONST=48 -EXTERN=49 -EXPORT=50 -ALIGN=51 -REGISTER=52 -INLINE=53 -VOLATILE=54 -INTERRUPT=55 -IF=56 -ELSE=57 -WHILE=58 -DO=59 -FOR=60 -SWITCH=61 -RETURN=62 -BREAK=63 -CONTINUE=64 -ASM=65 -DEFAULT=66 -CASE=67 -STRUCT=68 -ENUM=69 -SIZEOF=70 -TYPEID=71 -KICKASM=72 -RESOURCE=73 -USES=74 -CLOBBERS=75 -BYTES=76 -CYCLES=77 -LOGIC_NOT=78 -SIGNEDNESS=79 -SIMPLETYPE=80 -BOOLEAN=81 -KICKASM_BODY=82 -STRING=83 -CHAR=84 -NUMBER=85 -NUMFLOAT=86 -BINFLOAT=87 -DECFLOAT=88 -HEXFLOAT=89 -NUMINT=90 -BININTEGER=91 -DECINTEGER=92 -HEXINTEGER=93 -NAME=94 -WS=95 -COMMENT_LINE=96 -COMMENT_BLOCK=97 -ASM_BYTE=98 -ASM_MNEMONIC=99 -ASM_IMM=100 -ASM_COLON=101 -ASM_COMMA=102 -ASM_PAR_BEGIN=103 -ASM_PAR_END=104 -ASM_BRACKET_BEGIN=105 -ASM_BRACKET_END=106 -ASM_DOT=107 -ASM_SHIFT_LEFT=108 -ASM_SHIFT_RIGHT=109 -ASM_PLUS=110 -ASM_MINUS=111 -ASM_LESS_THAN=112 -ASM_GREATER_THAN=113 -ASM_MULTIPLY=114 -ASM_DIVIDE=115 -ASM_CURLY_BEGIN=116 -ASM_CURLY_END=117 -ASM_NUMBER=118 -ASM_NUMFLOAT=119 -ASM_BINFLOAT=120 -ASM_DECFLOAT=121 -ASM_HEXFLOAT=122 -ASM_NUMINT=123 -ASM_BININTEGER=124 -ASM_DECINTEGER=125 -ASM_HEXINTEGER=126 -ASM_CHAR=127 -ASM_MULTI_REL=128 -ASM_MULTI_NAME=129 -ASM_NAME=130 -ASM_WS=131 -ASM_COMMENT_LINE=132 -ASM_COMMENT_BLOCK=133 +CPU=45 +CODESEG=46 +DATASEG=47 +ENCODING=48 +CONST=49 +EXTERN=50 +EXPORT=51 +ALIGN=52 +REGISTER=53 +INLINE=54 +VOLATILE=55 +INTERRUPT=56 +IF=57 +ELSE=58 +WHILE=59 +DO=60 +FOR=61 +SWITCH=62 +RETURN=63 +BREAK=64 +CONTINUE=65 +ASM=66 +DEFAULT=67 +CASE=68 +STRUCT=69 +ENUM=70 +SIZEOF=71 +TYPEID=72 +KICKASM=73 +RESOURCE=74 +USES=75 +CLOBBERS=76 +BYTES=77 +CYCLES=78 +LOGIC_NOT=79 +SIGNEDNESS=80 +SIMPLETYPE=81 +BOOLEAN=82 +KICKASM_BODY=83 +STRING=84 +CHAR=85 +NUMBER=86 +NUMFLOAT=87 +BINFLOAT=88 +DECFLOAT=89 +HEXFLOAT=90 +NUMINT=91 +BININTEGER=92 +DECINTEGER=93 +HEXINTEGER=94 +NAME=95 +WS=96 +COMMENT_LINE=97 +COMMENT_BLOCK=98 +ASM_BYTE=99 +ASM_MNEMONIC=100 +ASM_IMM=101 +ASM_COLON=102 +ASM_COMMA=103 +ASM_PAR_BEGIN=104 +ASM_PAR_END=105 +ASM_BRACKET_BEGIN=106 +ASM_BRACKET_END=107 +ASM_DOT=108 +ASM_SHIFT_LEFT=109 +ASM_SHIFT_RIGHT=110 +ASM_PLUS=111 +ASM_MINUS=112 +ASM_LESS_THAN=113 +ASM_GREATER_THAN=114 +ASM_MULTIPLY=115 +ASM_DIVIDE=116 +ASM_CURLY_BEGIN=117 +ASM_CURLY_END=118 +ASM_NUMBER=119 +ASM_NUMFLOAT=120 +ASM_BINFLOAT=121 +ASM_DECFLOAT=122 +ASM_HEXFLOAT=123 +ASM_NUMINT=124 +ASM_BININTEGER=125 +ASM_DECINTEGER=126 +ASM_HEXINTEGER=127 +ASM_CHAR=128 +ASM_MULTI_REL=129 +ASM_MULTI_NAME=130 +ASM_NAME=131 +ASM_WS=132 +ASM_COMMENT_LINE=133 +ASM_COMMENT_BLOCK=134 ';'=8 '..'=11 '?'=12 @@ -156,39 +157,40 @@ ASM_COMMENT_BLOCK=133 'pc'=42 'target'=43 'link'=44 -'code_seg'=45 -'data_seg'=46 -'encoding'=47 -'const'=48 -'extern'=49 -'export'=50 -'align'=51 -'register'=52 -'inline'=53 -'volatile'=54 -'interrupt'=55 -'if'=56 -'else'=57 -'while'=58 -'do'=59 -'for'=60 -'switch'=61 -'return'=62 -'break'=63 -'continue'=64 -'asm'=65 -'default'=66 -'case'=67 -'struct'=68 -'enum'=69 -'sizeof'=70 -'typeid'=71 -'kickasm'=72 -'resource'=73 -'uses'=74 -'clobbers'=75 -'bytes'=76 -'cycles'=77 -'!'=78 -'.byte'=98 -'#'=100 +'cpu'=45 +'code_seg'=46 +'data_seg'=47 +'encoding'=48 +'const'=49 +'extern'=50 +'export'=51 +'align'=52 +'register'=53 +'inline'=54 +'volatile'=55 +'interrupt'=56 +'if'=57 +'else'=58 +'while'=59 +'do'=60 +'for'=61 +'switch'=62 +'return'=63 +'break'=64 +'continue'=65 +'asm'=66 +'default'=67 +'case'=68 +'struct'=69 +'enum'=70 +'sizeof'=71 +'typeid'=72 +'kickasm'=73 +'resource'=74 +'uses'=75 +'clobbers'=76 +'bytes'=77 +'cycles'=78 +'!'=79 +'.byte'=99 +'#'=101 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java index a1ae8c22f..543992e35 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java @@ -241,6 +241,18 @@ public class KickCParserBaseListener implements KickCParserListener { *

The default implementation does nothing.

*/ @Override public void exitGlobalDirectivePlatform(KickCParser.GlobalDirectivePlatformContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGlobalDirectiveCpu(KickCParser.GlobalDirectiveCpuContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGlobalDirectiveCpu(KickCParser.GlobalDirectiveCpuContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java index 0e882d15e..26453ce5b 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java @@ -146,6 +146,13 @@ public class KickCParserBaseVisitor extends AbstractParseTreeVisitor imple * {@link #visitChildren} on {@code ctx}.

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

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

+ */ + @Override public T visitGlobalDirectiveCpu(KickCParser.GlobalDirectiveCpuContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java index 9a60419b9..98bcb647b 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java @@ -213,6 +213,18 @@ public interface KickCParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitGlobalDirectivePlatform(KickCParser.GlobalDirectivePlatformContext ctx); + /** + * Enter a parse tree produced by the {@code globalDirectiveCpu} + * labeled alternative in {@link KickCParser#globalDirective}. + * @param ctx the parse tree + */ + void enterGlobalDirectiveCpu(KickCParser.GlobalDirectiveCpuContext ctx); + /** + * Exit a parse tree produced by the {@code globalDirectiveCpu} + * labeled alternative in {@link KickCParser#globalDirective}. + * @param ctx the parse tree + */ + void exitGlobalDirectiveCpu(KickCParser.GlobalDirectiveCpuContext ctx); /** * Enter a parse tree produced by the {@code globalDirectiveLinkScript} * labeled alternative in {@link KickCParser#globalDirective}. diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java index 078ae3d39..8681ae34c 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java @@ -133,6 +133,13 @@ public interface KickCParserVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitGlobalDirectivePlatform(KickCParser.GlobalDirectivePlatformContext ctx); + /** + * Visit a parse tree produced by the {@code globalDirectiveCpu} + * labeled alternative in {@link KickCParser#globalDirective}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGlobalDirectiveCpu(KickCParser.GlobalDirectiveCpuContext ctx); /** * Visit a parse tree produced by the {@code globalDirectiveLinkScript} * labeled alternative in {@link KickCParser#globalDirective}. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 9ea19d090..deeaa2d5b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -141,7 +141,18 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor templates = @@ -201,7 +201,7 @@ public class TestFragments { private void testFragments(String fileName, Collection signatures) throws IOException { CompileLog log = new CompileLog(); - AsmFragmentTemplateSynthesizer.initialize(new File("src/main/fragment/").toPath(), null, log); + AsmFragmentTemplateSynthesizer.initialize(new File("src/main/fragment/").toPath(), new File("src/main/fragment/6502X/").toPath(), null, log); List sigs = new ArrayList<>(signatures); // Always test max 1000 signatures diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 0a57dfa33..d65316cec 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -324,16 +324,6 @@ public class TestPrograms { compileAndCompare("platform-asm6502"); } - @Test - public void testPlatformC64BasicSegments() throws IOException, URISyntaxException { - compileAndCompare("platform-c64basic_segments"); - } - - @Test - public void testPlatformAsm6502Segments() throws IOException, URISyntaxException { - compileAndCompare("platform-asm6502_segments"); - } - @Test public void testEuclid2() throws IOException, URISyntaxException { compileAndCompare("euclid-3"); @@ -3092,7 +3082,7 @@ public class TestPrograms { @BeforeClass public static void setUp() { - AsmFragmentTemplateSynthesizer.initialize(new File("src/main/fragment/").toPath(), getFragmentCacheDir().toPath(), new CompileLog()); + AsmFragmentTemplateSynthesizer.initialize(new File("src/main/fragment/").toPath(), new File("src/main/fragment/6502X/").toPath(), getFragmentCacheDir().toPath(), new CompileLog()); } @AfterClass diff --git a/src/test/kc/encoding-literal-char.kc b/src/test/kc/encoding-literal-char.kc index 2ef5f2801..0e0820d1d 100644 --- a/src/test/kc/encoding-literal-char.kc +++ b/src/test/kc/encoding-literal-char.kc @@ -4,7 +4,7 @@ const char cpm = 'A'; const char[] spm = "A"; #pragma encoding(petscii_upper) -const char cpu = 'A'; +const char ccpu = 'A'; const char[] spu = "A"; #pragma encoding(screencode_mixed) const char csm = 'A'; @@ -17,7 +17,7 @@ const char* screen = 0x0400; void main() { char idx = 0; screen[idx++] = cpm; - screen[idx++] = cpu; + screen[idx++] = ccpu; screen[idx++] = csm; screen[idx++] = csu; idx = 0x28; diff --git a/src/test/kc/platform-asm6502_segments.kc b/src/test/kc/platform-asm6502_segments.kc deleted file mode 100644 index 1d2e85708..000000000 --- a/src/test/kc/platform-asm6502_segments.kc +++ /dev/null @@ -1,10 +0,0 @@ -// Tests the target platform ASM6502_SEGMENTS - -#pragma target(asm6502_segments) - -unsigned char[10] TABLE; - -void main() { - for(char i=0;i<10;i++) - TABLE[i] = i; -} \ No newline at end of file diff --git a/src/test/kc/platform-c64basic_segments.kc b/src/test/kc/platform-c64basic_segments.kc deleted file mode 100644 index c40887062..000000000 --- a/src/test/kc/platform-c64basic_segments.kc +++ /dev/null @@ -1,10 +0,0 @@ -// Tests the target platform C64BASIC_SEGMENTS - -#pragma target(c64basic_segments) - -unsigned char[10] TABLE; - -void main() { - for(char i=0;i<10;i++) - TABLE[i] = i; -} \ No newline at end of file diff --git a/src/test/ref/address-of-0.log b/src/test/ref/address-of-0.log index 94cdb16df..bbb43c8db 100644 --- a/src/test/ref/address-of-0.log +++ b/src/test/ref/address-of-0.log @@ -145,7 +145,7 @@ Allocated zp ZP_BYTE:2 [ main::b#2 main::b#0 main::b#1 ] Allocated zp ZP_BYTE:3 [ main::c#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test address-of - use the pointer to get the value // Upstart diff --git a/src/test/ref/address-of-1.log b/src/test/ref/address-of-1.log index 83c0a2948..0a5633b53 100644 --- a/src/test/ref/address-of-1.log +++ b/src/test/ref/address-of-1.log @@ -261,7 +261,7 @@ Allocated zp ZP_BYTE:6 [ main::b2#0 ] Allocated zp ZP_BYTE:7 [ main::b3#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test address-of - pass the pointer as parameter // Upstart diff --git a/src/test/ref/address-of-2.log b/src/test/ref/address-of-2.log index b4dde3bb8..3a931a160 100644 --- a/src/test/ref/address-of-2.log +++ b/src/test/ref/address-of-2.log @@ -364,7 +364,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ val#0 val#1 val#2 val#12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test address-of by assigning the affected variable in multiple ways // Upstart diff --git a/src/test/ref/address-of-3.log b/src/test/ref/address-of-3.log index 21a851426..dff061791 100644 --- a/src/test/ref/address-of-3.log +++ b/src/test/ref/address-of-3.log @@ -318,7 +318,7 @@ Allocated zp ZP_BYTE:6 [ main::$7 ] Allocated zp ZP_BYTE:7 [ print::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test address-of an array element // Upstart diff --git a/src/test/ref/array-16bit-lookup.log b/src/test/ref/array-16bit-lookup.log index 4eed31059..4d127e9e4 100644 --- a/src/test/ref/array-16bit-lookup.log +++ b/src/test/ref/array-16bit-lookup.log @@ -267,7 +267,7 @@ Allocated zp ZP_BYTE:13 [ getValue::$2 ] Allocated zp ZP_WORD:14 [ getValue::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test KickC performance for 16-bit array lookup function from article "Optimizing C array lookups for the 6502" // http://8bitworkshop.com/blog/compilers/2019/03/17/cc65-optimization.html diff --git a/src/test/ref/array-length-symbolic-min.log b/src/test/ref/array-length-symbolic-min.log index a39e365c5..8325b0349 100644 --- a/src/test/ref/array-length-symbolic-min.log +++ b/src/test/ref/array-length-symbolic-min.log @@ -143,7 +143,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::sub#2 main::sub#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates symbolic array lengths // Upstart diff --git a/src/test/ref/array-length-symbolic.log b/src/test/ref/array-length-symbolic.log index b7bd75d62..fa5f0024f 100644 --- a/src/test/ref/array-length-symbolic.log +++ b/src/test/ref/array-length-symbolic.log @@ -285,7 +285,7 @@ Allocated zp ZP_BYTE:6 [ main::$2 ] Allocated zp ZP_BYTE:7 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates symbolic array lengths // Upstart diff --git a/src/test/ref/arrays-init-kasm-0.log b/src/test/ref/arrays-init-kasm-0.log index 26534385a..8b9d97cd4 100644 --- a/src/test/ref/arrays-init-kasm-0.log +++ b/src/test/ref/arrays-init-kasm-0.log @@ -91,7 +91,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test initializing array using KickAssembler // Upstart diff --git a/src/test/ref/arrays-init.log b/src/test/ref/arrays-init.log index 15eebded9..a93cc3f00 100644 --- a/src/test/ref/arrays-init.log +++ b/src/test/ref/arrays-init.log @@ -139,7 +139,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/asm-culling-jmp.log b/src/test/ref/asm-culling-jmp.log index c37abb906..30eb369b1 100644 --- a/src/test/ref/asm-culling-jmp.log +++ b/src/test/ref/asm-culling-jmp.log @@ -74,7 +74,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Example of inline ASM where a JMP is erronously culled during compilation // https://gitlab.com/camelot/kickc/issues/302 diff --git a/src/test/ref/asm-mnemonic-names.log b/src/test/ref/asm-mnemonic-names.log index 02a399290..306045ddf 100644 --- a/src/test/ref/asm-mnemonic-names.log +++ b/src/test/ref/asm-mnemonic-names.log @@ -128,7 +128,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test using an ASM mnemonic as a C symbol names // Works if the C-lexer and the ASM-lexer are separated properly diff --git a/src/test/ref/asm-uses-0.log b/src/test/ref/asm-uses-0.log index 7fe1e5887..4ef91a4fa 100644 --- a/src/test/ref/asm-uses-0.log +++ b/src/test/ref/asm-uses-0.log @@ -100,7 +100,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that inline asm uses clause makes the compiler not cull a procedure referenced // Upstart diff --git a/src/test/ref/assignment-chained.log b/src/test/ref/assignment-chained.log index 5c1b6a9ab..d221498c8 100644 --- a/src/test/ref/assignment-chained.log +++ b/src/test/ref/assignment-chained.log @@ -149,7 +149,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::a#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that chained assignments work as intended // Upstart diff --git a/src/test/ref/assignment-compound.log b/src/test/ref/assignment-compound.log index 83c02fe8f..58cf6d34f 100644 --- a/src/test/ref/assignment-compound.log +++ b/src/test/ref/assignment-compound.log @@ -744,7 +744,7 @@ Allocated zp ZP_BYTE:2 [ test::a#11 ] Allocated zp ZP_BYTE:3 [ test::i#11 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test compound assignment operators // Upstart diff --git a/src/test/ref/bgblack.log b/src/test/ref/bgblack.log index 8653ea653..5100df901 100644 --- a/src/test/ref/bgblack.log +++ b/src/test/ref/bgblack.log @@ -83,7 +83,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index 9465a5fad..4f109fb2f 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1191,7 +1191,7 @@ Allocated zp ZP_BYTE:46 [ plot::$6 ] Allocated zp ZP_WORD:47 [ fill::end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Plots a circle on a bitmap using Bresenham's Circle algorithm // Coded by Richard-William Loerakker diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 6443e8014..bc5d1fe05 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1819,7 +1819,7 @@ Allocated zp ZP_BYTE:35 [ bitmap_init::$5 ] Allocated zp ZP_BYTE:36 [ bitmap_init::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ // Plots simple plots diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index d04eac657..c1238ec70 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -4063,7 +4063,7 @@ Allocated zp ZP_BYTE:224 [ divr16u::$2 ] Allocated zp ZP_WORD:225 [ rem16u#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ // Plots a fullscreen elipsis diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index c8ecb0c36..58480dfbb 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -4298,7 +4298,7 @@ Allocated zp ZP_BYTE:223 [ divr16u::$2 ] Allocated zp ZP_WORD:224 [ rem16u#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ // Plots a spiral diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index ce9fb54ba..3aae369fd 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -2532,7 +2532,7 @@ Allocated zp ZP_BYTE:72 [ bitmap_init::$5 ] Allocated zp ZP_BYTE:73 [ bitmap_init::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the simple bitmap plotter // Plots a few lines using the bresenham line algorithm diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index ee54bb279..679d34166 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -1048,7 +1048,7 @@ Allocated zp ZP_BYTE:32 [ init_plot_tables::$8 ] Allocated zp ZP_BYTE:33 [ init_plot_tables::$9 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/bitwise-not.log b/src/test/ref/bitwise-not.log index 53cf6be4b..54482db7c 100644 --- a/src/test/ref/bitwise-not.log +++ b/src/test/ref/bitwise-not.log @@ -124,7 +124,7 @@ Allocated zp ZP_BYTE:2 [ main::c#2 main::c#1 ] Allocated zp ZP_BYTE:3 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/bool-const.log b/src/test/ref/bool-const.log index 65d4146a4..4cb9d7dd3 100644 --- a/src/test/ref/bool-const.log +++ b/src/test/ref/bool-const.log @@ -379,7 +379,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A Minimal test of boolean constants. // Upstart diff --git a/src/test/ref/bool-function.log b/src/test/ref/bool-function.log index 345f3e606..1af865a4c 100644 --- a/src/test/ref/bool-function.log +++ b/src/test/ref/bool-function.log @@ -275,7 +275,7 @@ Allocated zp ZP_BOOL:9 [ isSet::$1 ] Allocated zp ZP_BOOL:10 [ isSet::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a function taking boolean parameter and returning boolean result // Upstart diff --git a/src/test/ref/bool-ifs-min.log b/src/test/ref/bool-ifs-min.log index e42865848..615418540 100644 --- a/src/test/ref/bool-ifs-min.log +++ b/src/test/ref/bool-ifs-min.log @@ -178,7 +178,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A test of boolean conditions using && || and ! // Upstart diff --git a/src/test/ref/bool-nullpointer-exception.log b/src/test/ref/bool-nullpointer-exception.log index 8cf3849af..40443692d 100644 --- a/src/test/ref/bool-nullpointer-exception.log +++ b/src/test/ref/bool-nullpointer-exception.log @@ -139,7 +139,7 @@ Complete equivalence classes Allocated zp ZP_BOOL:2 [ framedone#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Some bool code that causes a NullPointerException // Upstart diff --git a/src/test/ref/bool-pointer.log b/src/test/ref/bool-pointer.log index 4ccf72aa0..972b1b0e9 100644 --- a/src/test/ref/bool-pointer.log +++ b/src/test/ref/bool-pointer.log @@ -133,7 +133,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a pointer to a boolean // Upstart diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index d24f92c7a..3f02833d8 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -703,7 +703,7 @@ Allocated zp ZP_BYTE:10 [ bool_or::$1 ] Allocated zp ZP_BYTE:11 [ bool_and::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A test of boolean conditions using && || and ! // Upstart diff --git a/src/test/ref/bresenham.log b/src/test/ref/bresenham.log index d44ba2890..75b3d620e 100644 --- a/src/test/ref/bresenham.log +++ b/src/test/ref/bresenham.log @@ -390,7 +390,7 @@ Allocated zp ZP_BYTE:5 [ main::e#3 main::e#5 main::e#1 main::e#2 ] Allocated zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/bresenhamarr.log b/src/test/ref/bresenhamarr.log index 773ca8918..4803764f8 100644 --- a/src/test/ref/bresenhamarr.log +++ b/src/test/ref/bresenhamarr.log @@ -401,7 +401,7 @@ Allocated zp ZP_BYTE:6 [ main::y#2 main::y#4 main::y#1 ] Allocated zp ZP_WORD:7 [ main::$15 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index df8e502a6..0b8ab589d 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -2302,7 +2302,7 @@ Allocated zp ZP_BYTE:24 [ print_byte::$0 ] Allocated zp ZP_BYTE:25 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the different standard C types // Upstart diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 520dea64b..ff697443d 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1603,7 +1603,7 @@ Allocated zp ZP_BYTE:25 [ gfx_init_screen0::$2 ] Allocated zp ZP_BYTE:26 [ gfx_init_screen0::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // C64DTV 8bpp charmode stretcher // Upstart diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 945ac8511..0aeb74b6c 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -1134,7 +1134,7 @@ Allocated zp ZP_WORD:14 [ gfx_init_chunky::$8 ] Allocated zp ZP_BYTE:16 [ gfx_init_chunky::c#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // C64DTV 8bpp charmode stretcher // Upstart diff --git a/src/test/ref/c64dtv-blitter-box.log b/src/test/ref/c64dtv-blitter-box.log index 1e1a1c385..1d0c9c7a4 100644 --- a/src/test/ref/c64dtv-blitter-box.log +++ b/src/test/ref/c64dtv-blitter-box.log @@ -641,7 +641,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::$13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Fill a box on the screen using the blitter // Upstart diff --git a/src/test/ref/c64dtv-blittermin.log b/src/test/ref/c64dtv-blittermin.log index e3f4af108..ad5607cc0 100644 --- a/src/test/ref/c64dtv-blittermin.log +++ b/src/test/ref/c64dtv-blittermin.log @@ -683,7 +683,7 @@ Allocated zp ZP_BYTE:2 [ main::r#2 main::r#1 ] Allocated zp ZP_BYTE:3 [ main::$9 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/c64dtv-color.log b/src/test/ref/c64dtv-color.log index 002bc377e..a9f846dca 100644 --- a/src/test/ref/c64dtv-color.log +++ b/src/test/ref/c64dtv-color.log @@ -329,7 +329,7 @@ Allocated zp ZP_BYTE:2 [ main::r#2 main::r#1 ] Allocated zp ZP_BYTE:3 [ main::c#2 main::c#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test C64DTV v2 256-colors and the 16-color redefinable palette // Upstart diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index 63911107a..82b3d6ef0 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -15199,7 +15199,7 @@ Allocated zp ZP_BYTE:341 [ gfx_init_screen0::$2 ] Allocated zp ZP_BYTE:342 [ gfx_init_screen0::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Interactive Explorer for C64DTV Screen Modes // Upstart diff --git a/src/test/ref/c64dtv-gfxmodes.log b/src/test/ref/c64dtv-gfxmodes.log index c2cf523cc..974a2494c 100644 --- a/src/test/ref/c64dtv-gfxmodes.log +++ b/src/test/ref/c64dtv-gfxmodes.log @@ -14126,7 +14126,7 @@ Allocated zp ZP_BYTE:293 [ mode_stdchar::$30 ] Allocated zp ZP_BYTE:294 [ print_str_lines::ch#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Exploring C64DTV Screen Modes // Upstart diff --git a/src/test/ref/call-parameter-autocast.log b/src/test/ref/call-parameter-autocast.log index 0a9db42b5..7369656c1 100644 --- a/src/test/ref/call-parameter-autocast.log +++ b/src/test/ref/call-parameter-autocast.log @@ -260,7 +260,7 @@ Allocated zp ZP_WORD:3 [ print::w#3 ] Allocated zp ZP_BYTE:5 [ print::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test auto-casting of call-parameters // Upstart diff --git a/src/test/ref/callconstparam.log b/src/test/ref/callconstparam.log index 3336335c3..1f371e9af 100644 --- a/src/test/ref/callconstparam.log +++ b/src/test/ref/callconstparam.log @@ -265,7 +265,7 @@ Allocated zp ZP_WORD:3 [ screen#16 screen#10 screen#4 ] Allocated zp ZP_BYTE:5 [ line::x#2 line::x#0 line::x#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Multiple calls with different (constant?) parameters should yield different values at runtime // Currently the same constant parameter is passed on every call. diff --git a/src/test/ref/cast-deref.log b/src/test/ref/cast-deref.log index fa61383b8..4eb860f6c 100644 --- a/src/test/ref/cast-deref.log +++ b/src/test/ref/cast-deref.log @@ -136,7 +136,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Example of NOP-casting a dereferenced signed byte to a byte // Upstart diff --git a/src/test/ref/cast-not-needed-2.log b/src/test/ref/cast-not-needed-2.log index 127a33235..9b20d1ed0 100644 --- a/src/test/ref/cast-not-needed-2.log +++ b/src/test/ref/cast-not-needed-2.log @@ -227,7 +227,7 @@ Allocated zp ZP_WORD:2 [ main::getScreen1_return#0 ] Allocated zp ZP_WORD:4 [ main::spritePtr1_return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a cast that is not needed // Upstart diff --git a/src/test/ref/cast-not-needed-3.log b/src/test/ref/cast-not-needed-3.log index 60ca421e5..85741a94c 100644 --- a/src/test/ref/cast-not-needed-3.log +++ b/src/test/ref/cast-not-needed-3.log @@ -232,7 +232,7 @@ Allocated zp ZP_WORD:4 [ main::spritePtr1_$0#0 ] Allocated zp ZP_BYTE:6 [ main::spritePtr1_return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a cast that is not needed // Upstart diff --git a/src/test/ref/cast-not-needed.log b/src/test/ref/cast-not-needed.log index 8a96dcd33..6d361fb31 100644 --- a/src/test/ref/cast-not-needed.log +++ b/src/test/ref/cast-not-needed.log @@ -120,7 +120,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a cast that is not needed // Upstart diff --git a/src/test/ref/cast-precedence-problem.log b/src/test/ref/cast-precedence-problem.log index 04e771d61..5943cf3a0 100644 --- a/src/test/ref/cast-precedence-problem.log +++ b/src/test/ref/cast-precedence-problem.log @@ -233,7 +233,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that casting inside constants in the output handles precedence between cast and + correctly - should generate the following KA-expression ($ff & sumw>>1)+1 // Upstart diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index 32c719774..72382c59c 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -362,7 +362,7 @@ Allocated zp ZP_BYTE:5 [ main::sb#0 ] Allocated zp ZP_BYTE:6 [ w::b2#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/chargen.log b/src/test/ref/chargen.log index 704ed7328..2b26e2d67 100644 --- a/src/test/ref/chargen.log +++ b/src/test/ref/chargen.log @@ -381,7 +381,7 @@ Allocated zp ZP_BYTE:7 [ main::c#2 ] Allocated zp ZP_BYTE:8 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/chessboard.log b/src/test/ref/chessboard.log index 10dfa5c18..9f4d2e7e9 100644 --- a/src/test/ref/chessboard.log +++ b/src/test/ref/chessboard.log @@ -284,7 +284,7 @@ Allocated zp ZP_BYTE:7 [ main::column#2 main::column#1 ] Allocated zp ZP_BYTE:8 [ main::color#3 main::color#5 main::color#2 main::color#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Draws a chess board in the upper left corner of the screen // Upstart diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index cdb2c207e..782c41d9f 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -721,7 +721,7 @@ Allocated zp ZP_BYTE:29 [ print_byte_at::$2 ] Allocated zp ZP_DWORD:30 [ clock::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Counting cycles using a CIA timer // Upstart diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index b3a088472..7a592f8b5 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -689,7 +689,7 @@ Allocated zp ZP_BYTE:21 [ print_byte_at::$2 ] Allocated zp ZP_DWORD:22 [ clock::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Setup and run a simple CIA-timer // Upstart diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index ec76a1269..0d103031f 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -244,7 +244,7 @@ Allocated zp ZP_BYTE:3 [ irq_raster_next#0 irq_raster_next#1 ] Allocated zp ZP_BYTE:4 [ irq::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/coalesce-assignment.log b/src/test/ref/coalesce-assignment.log index 420f1eec8..f0fc6dc53 100644 --- a/src/test/ref/coalesce-assignment.log +++ b/src/test/ref/coalesce-assignment.log @@ -245,7 +245,7 @@ Allocated zp ZP_BYTE:6 [ main::f#0 ] Allocated zp ZP_BYTE:7 [ main::g#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests variable coalescing over assignments // Upstart diff --git a/src/test/ref/code-after-return-1.log b/src/test/ref/code-after-return-1.log index e4b9d3a84..1fc40b59c 100644 --- a/src/test/ref/code-after-return-1.log +++ b/src/test/ref/code-after-return-1.log @@ -155,7 +155,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test code after return in main() // Upstart diff --git a/src/test/ref/code-after-return.log b/src/test/ref/code-after-return.log index 7645b3047..d59ab3a12 100644 --- a/src/test/ref/code-after-return.log +++ b/src/test/ref/code-after-return.log @@ -88,7 +88,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test code after return in main() // Upstart diff --git a/src/test/ref/comma-decl-for.log b/src/test/ref/comma-decl-for.log index 7ab54aee2..eebbed745 100644 --- a/src/test/ref/comma-decl-for.log +++ b/src/test/ref/comma-decl-for.log @@ -146,7 +146,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests comma-separated declarations inside for() // Upstart diff --git a/src/test/ref/comma-decl.log b/src/test/ref/comma-decl.log index 90fd818b4..9be428afd 100644 --- a/src/test/ref/comma-decl.log +++ b/src/test/ref/comma-decl.log @@ -131,7 +131,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests comma-separated declarations // Upstart diff --git a/src/test/ref/comma-expr-1.log b/src/test/ref/comma-expr-1.log index ce2b6603c..8fe64eacc 100644 --- a/src/test/ref/comma-expr-1.log +++ b/src/test/ref/comma-expr-1.log @@ -106,7 +106,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple comma-expression (in parenthesis) // Upstart diff --git a/src/test/ref/comma-expr-2.log b/src/test/ref/comma-expr-2.log index 1c43b1424..a91127b00 100644 --- a/src/test/ref/comma-expr-2.log +++ b/src/test/ref/comma-expr-2.log @@ -93,7 +93,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple comma-expressions (without parenthesis) // Upstart diff --git a/src/test/ref/comma-expr-for.log b/src/test/ref/comma-expr-for.log index 9f9321323..c209abbbb 100644 --- a/src/test/ref/comma-expr-for.log +++ b/src/test/ref/comma-expr-for.log @@ -150,7 +150,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests comma-expressions in for()-statement // Upstart diff --git a/src/test/ref/comparison-rewriting-pointer.log b/src/test/ref/comparison-rewriting-pointer.log index 9e0493d01..debc56ba8 100644 --- a/src/test/ref/comparison-rewriting-pointer.log +++ b/src/test/ref/comparison-rewriting-pointer.log @@ -204,7 +204,7 @@ Allocated zp ZP_WORD:2 [ main::sc#2 main::sc#1 ] Allocated zp ZP_WORD:4 [ main::cc#2 main::cc#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test rewriting of constant comparisons for pointers // Upstart diff --git a/src/test/ref/comparison-rewriting.log b/src/test/ref/comparison-rewriting.log index 938bf3faa..43a752cc6 100644 --- a/src/test/ref/comparison-rewriting.log +++ b/src/test/ref/comparison-rewriting.log @@ -509,7 +509,7 @@ Allocated zp ZP_WORD:6 [ main::screen#11 main::screen#1 ] Allocated zp ZP_BYTE:8 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test rewriting of constant comparisons // Upstart diff --git a/src/test/ref/complex-conditional-problem.log b/src/test/ref/complex-conditional-problem.log index 6d2d902dd..77eac6347 100644 --- a/src/test/ref/complex-conditional-problem.log +++ b/src/test/ref/complex-conditional-problem.log @@ -179,7 +179,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::key#2 main::key#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test to provoke Exception when using complex || condition // Upstart diff --git a/src/test/ref/complex/ataritempest/ataritempest.log b/src/test/ref/complex/ataritempest/ataritempest.log index d122b77b2..d923c842b 100644 --- a/src/test/ref/complex/ataritempest/ataritempest.log +++ b/src/test/ref/complex/ataritempest/ataritempest.log @@ -183,7 +183,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ entryPoint::i#2 entryPoint::i#1 ] INITIAL ASM -Target platform is custom +Target platform is custom / 6502X // File Comments // Atari Tempest ROM Development Template // Each function of the kernal is a no-args function diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index 6b5134e26..b1e9d24b2 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -5211,7 +5211,7 @@ Allocated zp ZP_BYTE:184 [ processChars::$39 ] Allocated zp ZP_BYTE:185 [ processChars::$33 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Clears start screen throwing around the letters (by turning them into sprites) // Upstart diff --git a/src/test/ref/complex/medusa/medusa.log b/src/test/ref/complex/medusa/medusa.log index 5a5ebd4ea..e58976ba6 100644 --- a/src/test/ref/complex/medusa/medusa.log +++ b/src/test/ref/complex/medusa/medusa.log @@ -384,7 +384,7 @@ Allocated zp ZP_WORD:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] Allocated zp ZP_WORD:10 [ memcpy::src_end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Display MEDUSA PETSCII by Buzz_clik // https://csdb.dk/release/?id=178673 diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log index b502c9ea1..34bde2868 100644 --- a/src/test/ref/complex/splines/truetype-splines.log +++ b/src/test/ref/complex/splines/truetype-splines.log @@ -6221,7 +6221,7 @@ Allocated zp ZP_BYTE:310 [ mulf_init::$12 ] Allocated zp ZP_BYTE:311 [ mulf_init::$13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Show a few simple splines using the splines library // Upstart diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 8dd3dda08..ba1d58e86 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -2136,7 +2136,7 @@ Allocated zp ZP_BYTE:25 [ sprites_irq::ptr#1 ] Allocated zp ZP_BYTE:26 [ sprites_irq::ptr#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index ef1b7933f..9b68ae779 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -13834,7 +13834,7 @@ Allocated zp ZP_BYTE:222 [ sprites_irq::ptr#1 ] Allocated zp ZP_BYTE:223 [ sprites_irq::ptr#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tetris Game for the Commodore 64 // The tetris game tries to match NES tetris gameplay pretty closely diff --git a/src/test/ref/complex/xmega65/xmega65.log b/src/test/ref/complex/xmega65/xmega65.log index 194e41d90..fa5878132 100644 --- a/src/test/ref/complex/xmega65/xmega65.log +++ b/src/test/ref/complex/xmega65/xmega65.log @@ -622,7 +622,7 @@ Allocated zp ZP_WORD:11 [ memset::dst#2 memset::dst#4 memset::dst#1 ] Allocated zp ZP_WORD:13 [ memset::end#0 ] INITIAL ASM -Target platform is custom +Target platform is custom / 6502X // File Comments // XMega65 Kernal Development Template // Each function of the kernal is a no-args function diff --git a/src/test/ref/condition-integer-0.log b/src/test/ref/condition-integer-0.log index 149c9897d..885fd151e 100644 --- a/src/test/ref/condition-integer-0.log +++ b/src/test/ref/condition-integer-0.log @@ -382,7 +382,7 @@ Allocated zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] Allocated zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests using integer conditions in if() // This should produce '+ ++ ++' at the top of the screen diff --git a/src/test/ref/condition-integer-1.log b/src/test/ref/condition-integer-1.log index a9fbd101c..a489af45d 100644 --- a/src/test/ref/condition-integer-1.log +++ b/src/test/ref/condition-integer-1.log @@ -384,7 +384,7 @@ Allocated zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] Allocated zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests using integer conditions in if() // This should produce '0 0 0' at the top of the screen diff --git a/src/test/ref/condition-integer-2.log b/src/test/ref/condition-integer-2.log index e5724462b..9753dbcbf 100644 --- a/src/test/ref/condition-integer-2.log +++ b/src/test/ref/condition-integer-2.log @@ -323,7 +323,7 @@ Allocated zp ZP_BYTE:6 [ main::k#2 main::k#1 ] Allocated zp ZP_BYTE:7 [ idx#12 idx#13 idx#4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests using integer conditions in while() / for() / do..while // This should produce 'ba ba ba' at the top of the screen diff --git a/src/test/ref/condition-integer-3.log b/src/test/ref/condition-integer-3.log index 517b92b75..0a829da38 100644 --- a/src/test/ref/condition-integer-3.log +++ b/src/test/ref/condition-integer-3.log @@ -210,7 +210,7 @@ Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] Allocated zp ZP_BYTE:4 [ main::j#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests using integer conditions in ternary operator // This should produce '++0++' at the top of the screen diff --git a/src/test/ref/condition-integer-4.log b/src/test/ref/condition-integer-4.log index b15b0cc0e..1bd1ef35a 100644 --- a/src/test/ref/condition-integer-4.log +++ b/src/test/ref/condition-integer-4.log @@ -408,7 +408,7 @@ Allocated zp ZP_BYTE:8 [ main::$11 ] Allocated zp ZP_BYTE:9 [ main::$12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests using integer conditions in && and || operator // This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen diff --git a/src/test/ref/condition-type-mismatch.log b/src/test/ref/condition-type-mismatch.log index 9889c96f0..ba9c1360d 100644 --- a/src/test/ref/condition-type-mismatch.log +++ b/src/test/ref/condition-type-mismatch.log @@ -112,7 +112,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a condition type mismatch (not boolean) // Upstart diff --git a/src/test/ref/consolidate-array-index-problem.log b/src/test/ref/consolidate-array-index-problem.log index f9f3cac0e..d3055de0e 100644 --- a/src/test/ref/consolidate-array-index-problem.log +++ b/src/test/ref/consolidate-array-index-problem.log @@ -158,7 +158,7 @@ Allocated zp ZP_BYTE:2 [ main::x#2 main::x#1 ] Allocated zp ZP_BYTE:3 [ main::y#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/consolidate-constant-problem.log b/src/test/ref/consolidate-constant-problem.log index 679cbc230..c4772daa8 100644 --- a/src/test/ref/consolidate-constant-problem.log +++ b/src/test/ref/consolidate-constant-problem.log @@ -226,7 +226,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/const-condition.log b/src/test/ref/const-condition.log index 0aa68f00b..b41d07779 100644 --- a/src/test/ref/const-condition.log +++ b/src/test/ref/const-condition.log @@ -103,7 +103,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Ensure that if()'s with constant comparisons are identified and eliminated // Upstart diff --git a/src/test/ref/const-early-identification.log b/src/test/ref/const-early-identification.log index 405c9c671..2cebb8d3e 100644 --- a/src/test/ref/const-early-identification.log +++ b/src/test/ref/const-early-identification.log @@ -184,7 +184,7 @@ Allocated zp ZP_BYTE:2 [ A#0 ] Allocated zp ZP_BYTE:3 [ sub::D#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that constants are identified early // Upstart diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index 93f96b342..4bf856c4a 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -347,7 +347,7 @@ Allocated zp ZP_BYTE:5 [ plot::idx#0 ] Allocated zp ZP_BYTE:6 [ plot::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/const-if-problem.log b/src/test/ref/const-if-problem.log index c93bd8851..7f17d4b48 100644 --- a/src/test/ref/const-if-problem.log +++ b/src/test/ref/const-if-problem.log @@ -151,7 +151,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Constant if() contains call to (unused) function - should be optimized away // Upstart diff --git a/src/test/ref/const-int-cast-problem.log b/src/test/ref/const-int-cast-problem.log index 65ac9c7e8..e109600ce 100644 --- a/src/test/ref/const-int-cast-problem.log +++ b/src/test/ref/const-int-cast-problem.log @@ -129,7 +129,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a problem with converting casted constant numbers to fixed type constant integers // Upstart diff --git a/src/test/ref/const-mult-div.log b/src/test/ref/const-mult-div.log index b21765fb2..5afd42833 100644 --- a/src/test/ref/const-mult-div.log +++ b/src/test/ref/const-mult-div.log @@ -90,7 +90,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a constant with multiplication and division // Upstart diff --git a/src/test/ref/const-param.log b/src/test/ref/const-param.log index 09e2efc5f..26c855d01 100644 --- a/src/test/ref/const-param.log +++ b/src/test/ref/const-param.log @@ -258,7 +258,7 @@ Allocated zp ZP_BYTE:8 [ main::$2 ] Allocated zp ZP_BYTE:9 [ sum::return#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test that the compiler optimizes when the same parameter value is passed into a function in all calls // Upstart diff --git a/src/test/ref/const-pointer.log b/src/test/ref/const-pointer.log index 544aa29ef..afafad483 100644 --- a/src/test/ref/const-pointer.log +++ b/src/test/ref/const-pointer.log @@ -126,7 +126,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments //Test that constant pointers are detected correctly // Upstart diff --git a/src/test/ref/const-signed-promotion.log b/src/test/ref/const-signed-promotion.log index 2bc13c2ea..253efd139 100644 --- a/src/test/ref/const-signed-promotion.log +++ b/src/test/ref/const-signed-promotion.log @@ -166,7 +166,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test fragment promotion of a constant (400) to signed word even if it also matches an unsigned word // Upstart diff --git a/src/test/ref/const-word-pointer.log b/src/test/ref/const-word-pointer.log index 56b615107..d3ad1c995 100644 --- a/src/test/ref/const-word-pointer.log +++ b/src/test/ref/const-word-pointer.log @@ -157,7 +157,7 @@ Allocated zp ZP_BYTE:6 [ main::$3 ] Allocated zp ZP_BYTE:7 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a constant word pointers (pointing to a word placed on zeropage). // The result when running is "CML!" on the screen. diff --git a/src/test/ref/constabsmin.log b/src/test/ref/constabsmin.log index 859d35e5c..3301512c9 100644 --- a/src/test/ref/constabsmin.log +++ b/src/test/ref/constabsmin.log @@ -78,7 +78,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/constant-string-concat-0.log b/src/test/ref/constant-string-concat-0.log index 2dbf8b585..ffdbe85e2 100644 --- a/src/test/ref/constant-string-concat-0.log +++ b/src/test/ref/constant-string-concat-0.log @@ -136,7 +136,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Concatenates string constants in different ways // Upstart diff --git a/src/test/ref/constant-string-concat.log b/src/test/ref/constant-string-concat.log index c3f712d3b..cf095e06f 100644 --- a/src/test/ref/constant-string-concat.log +++ b/src/test/ref/constant-string-concat.log @@ -125,7 +125,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Concatenates string constants in different ways // Upstart diff --git a/src/test/ref/constantmin.log b/src/test/ref/constantmin.log index a5fda27fc..eb07e3c1b 100644 --- a/src/test/ref/constantmin.log +++ b/src/test/ref/constantmin.log @@ -188,7 +188,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index 6d89ccfb6..7d47ed123 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -1631,7 +1631,7 @@ Allocated zp ZP_BYTE:15 [ assert_byte::c#3 ] Allocated zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log index f7551f1f6..d0ce635ed 100644 --- a/src/test/ref/cordic-atan2-16-ref.log +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -2430,7 +2430,7 @@ Allocated zp ZP_BYTE:67 [ init_font_hex::$2 ] Allocated zp ZP_BYTE:68 [ init_font_hex::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index d75d40fbe..3c1bd9ffa 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1844,7 +1844,7 @@ Allocated zp ZP_BYTE:49 [ init_font_hex::$2 ] Allocated zp ZP_BYTE:50 [ init_font_hex::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index 7152400d8..61c50ae43 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -2072,7 +2072,7 @@ Allocated zp ZP_BYTE:60 [ init_font_hex::$2 ] Allocated zp ZP_BYTE:61 [ init_font_hex::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index 20a2869fe..4d3c2c90f 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1527,7 +1527,7 @@ Allocated zp ZP_BYTE:29 [ init_font_hex::$2 ] Allocated zp ZP_BYTE:30 [ init_font_hex::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Find atan2(x, y) using the CORDIC method // See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf diff --git a/src/test/ref/danny-joystick-problem.log b/src/test/ref/danny-joystick-problem.log index dd0bb1ccd..3c1868fad 100644 --- a/src/test/ref/danny-joystick-problem.log +++ b/src/test/ref/danny-joystick-problem.log @@ -107,7 +107,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::port4Value#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests problem writing/reading joystick encountered by Danny Spijksma // https://www.protovision.games/hardw/build4player.php?language=en&fbclid=IwAR1MJLgQjOU0zVa0ax2aNeGa-xVbE9IGY9zC6b6eInTV4HQzoUAoCPoXu14 diff --git a/src/test/ref/deep-nesting.log b/src/test/ref/deep-nesting.log index cd540de22..81076e2cb 100644 --- a/src/test/ref/deep-nesting.log +++ b/src/test/ref/deep-nesting.log @@ -7179,7 +7179,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test that the compiler handles deep nesting well -- mainly a performance issue. // Upstart diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index 4994d2166..98a74db8a 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -450,7 +450,7 @@ Allocated zp ZP_BYTE:6 [ main::y#2 main::y#1 ] Allocated zp ZP_WORD:7 [ memset::dst#2 memset::dst#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Show default font on screen // Upstart diff --git a/src/test/ref/deref-to-derefidx-2.log b/src/test/ref/deref-to-derefidx-2.log index d546f536a..cd2bc0016 100644 --- a/src/test/ref/deref-to-derefidx-2.log +++ b/src/test/ref/deref-to-derefidx-2.log @@ -232,7 +232,7 @@ Allocated zp ZP_BYTE:4 [ screen_idx#10 screen_idx#11 ] Allocated zp ZP_BYTE:5 [ print::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimizing derefs of *(ptr+b) to ptr[b - even when a noop-cast is needed // Upstart diff --git a/src/test/ref/deref-to-derefidx.log b/src/test/ref/deref-to-derefidx.log index 8a654c80a..03997b3ea 100644 --- a/src/test/ref/deref-to-derefidx.log +++ b/src/test/ref/deref-to-derefidx.log @@ -214,7 +214,7 @@ Allocated zp ZP_WORD:2 [ print::m#2 ] Allocated zp ZP_BYTE:4 [ idx#10 idx#11 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimizing derefs of *(ptr+b) to ptr[b] // Upstart diff --git a/src/test/ref/derefidx-word-0.log b/src/test/ref/derefidx-word-0.log index fda49b703..262a47df0 100644 --- a/src/test/ref/derefidx-word-0.log +++ b/src/test/ref/derefidx-word-0.log @@ -138,7 +138,7 @@ Allocated zp ZP_WORD:2 [ main::i#2 main::i#1 ] Allocated zp ZP_WORD:4 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that array-indexing by a word variable is turned into pointer addition // Upstart diff --git a/src/test/ref/derefidx-word-1.log b/src/test/ref/derefidx-word-1.log index 720f3f21c..1dd3b0ef2 100644 --- a/src/test/ref/derefidx-word-1.log +++ b/src/test/ref/derefidx-word-1.log @@ -82,7 +82,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that array-indexing by a constant word is turned into a constant pointer // Upstart diff --git a/src/test/ref/derefidx-word-2.log b/src/test/ref/derefidx-word-2.log index bef8eb0d6..9e7b4d547 100644 --- a/src/test/ref/derefidx-word-2.log +++ b/src/test/ref/derefidx-word-2.log @@ -133,7 +133,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that array-indexing by a word variable that is a sum of a constant word and a byte is turned back into derefidx // Upstart diff --git a/src/test/ref/divide-2s.log b/src/test/ref/divide-2s.log index 51a2ad7fd..524eb7c94 100644 --- a/src/test/ref/divide-2s.log +++ b/src/test/ref/divide-2s.log @@ -248,7 +248,7 @@ Allocated zp ZP_BYTE:6 [ main::sb#0 ] Allocated zp ZP_BYTE:7 [ main::$12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Check that division by factors of 2 is converted to shifts // Upstart diff --git a/src/test/ref/double-assignment.log b/src/test/ref/double-assignment.log index 3a4f5f962..a8da454a5 100644 --- a/src/test/ref/double-assignment.log +++ b/src/test/ref/double-assignment.log @@ -111,7 +111,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test that a double-assignment works. // Upstart diff --git a/src/test/ref/double-import.log b/src/test/ref/double-import.log index db79a225d..db732917b 100644 --- a/src/test/ref/double-import.log +++ b/src/test/ref/double-import.log @@ -83,7 +83,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/double-indexing-arrays.log b/src/test/ref/double-indexing-arrays.log index 335658fee..66bd8fff2 100644 --- a/src/test/ref/double-indexing-arrays.log +++ b/src/test/ref/double-indexing-arrays.log @@ -334,7 +334,7 @@ Complete equivalence classes [ main::x#2 main::x#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that constant offset indexing into arrays is handled correctly // Upstart diff --git a/src/test/ref/duplicate-loop-problem.log b/src/test/ref/duplicate-loop-problem.log index 53bb33cad..575b97a03 100644 --- a/src/test/ref/duplicate-loop-problem.log +++ b/src/test/ref/duplicate-loop-problem.log @@ -163,7 +163,7 @@ Allocated zp ZP_BYTE:2 [ key#1 ] Allocated zp ZP_BYTE:3 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Duplicate Loop Problem from Richard-William Loerakker // Resulted in infinite loop in loop depth analysis diff --git a/src/test/ref/dword.log b/src/test/ref/dword.log index b65f2b322..238ea24c3 100644 --- a/src/test/ref/dword.log +++ b/src/test/ref/dword.log @@ -155,7 +155,7 @@ Allocated zp ZP_DWORD:3 [ main::b#0 ] Allocated zp ZP_BYTE:7 [ main::c#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/emptyblock-error.log b/src/test/ref/emptyblock-error.log index 938b29c16..f6dd94b76 100644 --- a/src/test/ref/emptyblock-error.log +++ b/src/test/ref/emptyblock-error.log @@ -210,7 +210,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Error cleaning up unused blocks // Upstart diff --git a/src/test/ref/enum-0.log b/src/test/ref/enum-0.log index 57bd786f8..0608d31fe 100644 --- a/src/test/ref/enum-0.log +++ b/src/test/ref/enum-0.log @@ -83,7 +83,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - two-value enum // Upstart diff --git a/src/test/ref/enum-1.log b/src/test/ref/enum-1.log index 09dcb1c50..f37d8ca67 100644 --- a/src/test/ref/enum-1.log +++ b/src/test/ref/enum-1.log @@ -84,7 +84,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - three-value enum with specified integer values and increment // Upstart diff --git a/src/test/ref/enum-2.log b/src/test/ref/enum-2.log index 9f2002770..d45802a18 100644 --- a/src/test/ref/enum-2.log +++ b/src/test/ref/enum-2.log @@ -84,7 +84,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - char values with increment // Upstart diff --git a/src/test/ref/enum-3.log b/src/test/ref/enum-3.log index 60df54664..15267fbc9 100644 --- a/src/test/ref/enum-3.log +++ b/src/test/ref/enum-3.log @@ -86,7 +86,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - value with complex calculation // Upstart diff --git a/src/test/ref/enum-4.log b/src/test/ref/enum-4.log index ce65a4066..ad0aa6bd2 100644 --- a/src/test/ref/enum-4.log +++ b/src/test/ref/enum-4.log @@ -81,7 +81,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - inline enum definitions // Upstart diff --git a/src/test/ref/enum-5.log b/src/test/ref/enum-5.log index dc1fe0ae6..f6124506e 100644 --- a/src/test/ref/enum-5.log +++ b/src/test/ref/enum-5.log @@ -121,7 +121,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - multiple inline enum definitions // Upstart diff --git a/src/test/ref/enum-6.log b/src/test/ref/enum-6.log index 86b5786e7..852fed2d9 100644 --- a/src/test/ref/enum-6.log +++ b/src/test/ref/enum-6.log @@ -99,7 +99,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - anonymous enum definition // Upstart diff --git a/src/test/ref/enum-7.log b/src/test/ref/enum-7.log index 8fe61ae6f..f1031987e 100644 --- a/src/test/ref/enum-7.log +++ b/src/test/ref/enum-7.log @@ -118,7 +118,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - struct with enum // Upstart diff --git a/src/test/ref/enum-8.log b/src/test/ref/enum-8.log index cd35bfb3b..d465a8872 100644 --- a/src/test/ref/enum-8.log +++ b/src/test/ref/enum-8.log @@ -120,7 +120,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test of simple enum - struct with inline anonymous enum // Upstart diff --git a/src/test/ref/euclid-3.log b/src/test/ref/euclid-3.log index 0c725430e..a2705f44b 100644 --- a/src/test/ref/euclid-3.log +++ b/src/test/ref/euclid-3.log @@ -1251,7 +1251,7 @@ Allocated zp ZP_BYTE:15 [ print_byte::$0 ] Allocated zp ZP_BYTE:16 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments /* * Find greatest common denominator using subtraction-based Euclidian algorithm diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log index 1ab1c3a34..b893420bf 100644 --- a/src/test/ref/euclid-problem-2.log +++ b/src/test/ref/euclid-problem-2.log @@ -465,7 +465,7 @@ Allocated zp ZP_BYTE:10 [ euclid::return#3 ] Allocated zp ZP_BYTE:11 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. diff --git a/src/test/ref/euclid-problem.log b/src/test/ref/euclid-problem.log index 411bfb55c..0ae22e1f1 100644 --- a/src/test/ref/euclid-problem.log +++ b/src/test/ref/euclid-problem.log @@ -192,7 +192,7 @@ Allocated zp ZP_BYTE:2 [ main::a#2 main::a#1 ] Allocated zp ZP_BYTE:3 [ main::b#2 main::b#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates a problem where wrong alive ranges result in clobbering an alive variable // The compiler does not realize that A is alive in the statement b=b-a - and thus can clobber it. diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index b9f540166..c971287c9 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -4747,7 +4747,7 @@ Allocated zp ZP_WORD:97 [ debug_print_init::$62 ] Allocated zp ZP_WORD:99 [ debug_print_init::$65 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // 3D Rotation using a Rotation Matrix // Based on: diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index fe29cf9a3..71914ac50 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -1725,7 +1725,7 @@ Allocated zp ZP_BYTE:22 [ mulf_init::$8 ] Allocated zp ZP_BYTE:23 [ mulf_init::$10 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // 3D Rotation using a Rotation Matrix // Based on: diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.log b/src/test/ref/examples/bresenham/bitmap-bresenham.log index e1cbbcd96..deb111553 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.log @@ -2757,7 +2757,7 @@ Allocated zp ZP_BYTE:66 [ bitmap_init::$8 ] Allocated zp ZP_BYTE:67 [ bitmap_init::$9 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index be6051de1..c62407142 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -2561,7 +2561,7 @@ Allocated zp ZP_BYTE:60 [ keyboard_matrix_read::return#0 ] Allocated zp ZP_BYTE:61 [ keyboard_get_keycode::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Allows analysis of the CHARGEN ROM font // Upstart diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.log b/src/test/ref/examples/fastmultiply/fastmultiply8.log index cc3be23d3..7eefd17af 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.log @@ -1303,7 +1303,7 @@ Allocated zp ZP_BYTE:31 [ print_byte_at::$2 ] Allocated zp ZP_BYTE:32 [ fmul8::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Seriously fast multiply 8-bit version (8bit*8bit=8bit) // Multiplies two signed 8-bit numbers and results in an 8-bit number diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index abacbcbf9..c836bc46f 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -1746,7 +1746,7 @@ Allocated zp ZP_BYTE:44 [ makecharset::$12 ] Allocated zp ZP_BYTE:45 [ makecharset::$13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A KickC version of the fire routine from the CC65 samples // (w)2002 by groepaz/hitmen diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index f5967d59f..1e4d8a2ca 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -376,7 +376,7 @@ Allocated zp ZP_WORD:4 [ print_str::str#2 print_str::str#0 ] Allocated zp ZP_WORD:6 [ print_char_cursor#10 print_char_cursor#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/examples/irq/irq-hyperscreen.log b/src/test/ref/examples/irq/irq-hyperscreen.log index 27e7e2180..ca036482c 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.log +++ b/src/test/ref/examples/irq/irq-hyperscreen.log @@ -294,7 +294,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A raster IRQ that opens the top/bottom border. // Upstart diff --git a/src/test/ref/examples/linking/linking.log b/src/test/ref/examples/linking/linking.log index f3b75aaef..fd8a80f24 100644 --- a/src/test/ref/examples/linking/linking.log +++ b/src/test/ref/examples/linking/linking.log @@ -295,7 +295,7 @@ Allocated zp ZP_BYTE:6 [ fillscreen::c#0 ] Allocated zp ZP_BYTE:7 [ fillscreen::$2 ] INITIAL ASM -Target platform is custom +Target platform is custom / 6502X // File Comments // Example showing how to perform linking using a linker-file // The linker file is created using KickAssembler segments. diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index e4cb5b696..5f2bd4220 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -2259,7 +2259,7 @@ Allocated zp ZP_BYTE:32 [ plexSort::s#2 ] Allocated zp ZP_BYTE:33 [ init::$8 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A simple usage of the flexible sprite multiplexer routine // Upstart diff --git a/src/test/ref/examples/music/music.log b/src/test/ref/examples/music/music.log index 69f589256..c95997866 100644 --- a/src/test/ref/examples/music/music.log +++ b/src/test/ref/examples/music/music.log @@ -138,7 +138,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A simple SID music player playing music in the main loop. // Upstart diff --git a/src/test/ref/examples/music/music_irq.log b/src/test/ref/examples/music/music_irq.log index d53835b2c..fced4571a 100644 --- a/src/test/ref/examples/music/music_irq.log +++ b/src/test/ref/examples/music/music_irq.log @@ -209,7 +209,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A simple SID music player using RASTER IRQ // Upstart diff --git a/src/test/ref/examples/nmisamples/nmisamples.log b/src/test/ref/examples/nmisamples/nmisamples.log index 502d49eff..28ce0daa8 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.log +++ b/src/test/ref/examples/nmisamples/nmisamples.log @@ -346,7 +346,7 @@ Allocated zp ZP_BYTE:5 [ nmi2::$2 ] Allocated zp ZP_BYTE:6 [ nmi::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // NMI Sample Player using the SID volume register // Code by Scan of Desire (Richard-William Loerakker) diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log index 0d88b3172..aa6647eda 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.log +++ b/src/test/ref/examples/plasma/plasma-unroll.log @@ -3371,7 +3371,7 @@ Allocated zp ZP_BYTE:65 [ makecharset::$7 ] Allocated zp ZP_BYTE:66 [ sid_rnd::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A KickC version of the plasma routine from the CC65 samples // This version has an unrolled inner loop to reach 50+FPS diff --git a/src/test/ref/examples/plasma/plasma.log b/src/test/ref/examples/plasma/plasma.log index a7dcd8fca..fc7429e46 100644 --- a/src/test/ref/examples/plasma/plasma.log +++ b/src/test/ref/examples/plasma/plasma.log @@ -2646,7 +2646,7 @@ Allocated zp ZP_BYTE:41 [ makecharset::$7 ] Allocated zp ZP_BYTE:42 [ sid_rnd::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A KickC version of the plasma routine from the CC65 samples // (w)2001 by groepaz/hitmen diff --git a/src/test/ref/examples/rasterbars/raster-bars.log b/src/test/ref/examples/rasterbars/raster-bars.log index 937200f5c..97785e18a 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.log +++ b/src/test/ref/examples/rasterbars/raster-bars.log @@ -273,7 +273,7 @@ Allocated zp ZP_BYTE:2 [ raster::col#2 raster::col#0 raster::col#1 ] Allocated zp ZP_BYTE:3 [ raster::i#2 raster::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/examples/rotate/rotate.log b/src/test/ref/examples/rotate/rotate.log index e972d9b04..e419122df 100644 --- a/src/test/ref/examples/rotate/rotate.log +++ b/src/test/ref/examples/rotate/rotate.log @@ -2688,7 +2688,7 @@ Allocated zp ZP_BYTE:96 [ mulf_init::$12 ] Allocated zp ZP_BYTE:97 [ mulf_init::$13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // 2D rotattion of 8 sprites // Upstart diff --git a/src/test/ref/examples/scroll/scroll.log b/src/test/ref/examples/scroll/scroll.log index 09b54af92..ea0982897 100644 --- a/src/test/ref/examples/scroll/scroll.log +++ b/src/test/ref/examples/scroll/scroll.log @@ -535,7 +535,7 @@ Allocated zp ZP_WORD:5 [ main::nxt#4 main::nxt#10 main::nxt#11 main::nxt#1 ] Allocated zp ZP_WORD:7 [ fillscreen::cursor#2 fillscreen::cursor#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/examples/scrollbig/scrollbig.log b/src/test/ref/examples/scrollbig/scrollbig.log index a668f09d3..25c9c80a1 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.log +++ b/src/test/ref/examples/scrollbig/scrollbig.log @@ -1380,7 +1380,7 @@ Allocated zp ZP_BYTE:21 [ scroll_bit::bits#0 ] Allocated zp ZP_BYTE:22 [ scroll_bit::$9 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // An 8x8 char letter scroller // Upstart diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index e10794c06..aed300de1 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -4300,7 +4300,7 @@ Allocated zp ZP_WORD:177 [ rem16u#1 ] Allocated zp ZP_WORD:179 [ memset::end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/examples/showlogo/showlogo.log b/src/test/ref/examples/showlogo/showlogo.log index 43daa575d..ddb235203 100644 --- a/src/test/ref/examples/showlogo/showlogo.log +++ b/src/test/ref/examples/showlogo/showlogo.log @@ -688,7 +688,7 @@ Allocated zp ZP_WORD:8 [ memset::dst#2 memset::dst#4 memset::dst#1 ] Allocated zp ZP_WORD:10 [ memset::end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index dab8c0198..98d9814d4 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -4002,7 +4002,7 @@ Allocated zp ZP_BYTE:191 [ bitmap_init::$5 ] Allocated zp ZP_BYTE:192 [ bitmap_init::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Generate a big sinus and plot it on a bitmap // Upstart diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index d7ea96c86..7c6a72dc8 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -3697,7 +3697,7 @@ Allocated zp ZP_BYTE:78 [ gen_chargen_sprite::$6 ] Allocated zp ZP_BYTE:79 [ place_sprites::j2#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/examples/zpcode/zpcode.log b/src/test/ref/examples/zpcode/zpcode.log index ad568f782..125a54b57 100644 --- a/src/test/ref/examples/zpcode/zpcode.log +++ b/src/test/ref/examples/zpcode/zpcode.log @@ -356,7 +356,7 @@ Allocated zp ZP_BYTE:3 [ zpLoop::i#2 zpLoop::i#1 ] Allocated zp ZP_BYTE:4 [ loop::i#2 loop::i#1 ] INITIAL ASM -Target platform is custom +Target platform is custom / 6502X // File Comments // Example showing how to use KickAsm segments to compile meant to be transfered to zeropage before execution. // The linker-file defines the ZpCode segment to be on zeropage and does not include it directly in the PRG-file (by excluding it from the Program segment). diff --git a/src/test/ref/fastmultiply-127.log b/src/test/ref/fastmultiply-127.log index 13cab9bf8..ef38ba4cf 100644 --- a/src/test/ref/fastmultiply-127.log +++ b/src/test/ref/fastmultiply-127.log @@ -2815,7 +2815,7 @@ Allocated zp ZP_WORD:47 [ mulf8u127::return#0 ] Allocated zp ZP_WORD:49 [ print_mulf8u127::c#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // An implementation of seriously fast multiply for integer values in the interval [-1;1] with the best possible precision // NOTE: So far unsuccessful - since the handling of sign and values where a+b>sqrt2) makes the code slower than regular fast multiply diff --git a/src/test/ref/fibmem.log b/src/test/ref/fibmem.log index 2e22a75f0..3010b27e7 100644 --- a/src/test/ref/fibmem.log +++ b/src/test/ref/fibmem.log @@ -162,7 +162,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/fill-square.log b/src/test/ref/fill-square.log index f750f4dfe..d869ab35d 100644 --- a/src/test/ref/fill-square.log +++ b/src/test/ref/fill-square.log @@ -224,7 +224,7 @@ Allocated zp ZP_WORD:12 [ main::line#0 ] Allocated zp ZP_BYTE:14 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Fill a square on the screen // Upstart diff --git a/src/test/ref/fillscreen.log b/src/test/ref/fillscreen.log index 5c1a718ac..3174c024b 100644 --- a/src/test/ref/fillscreen.log +++ b/src/test/ref/fillscreen.log @@ -213,7 +213,7 @@ Allocated zp ZP_BYTE:3 [ main::c#0 ] Allocated zp ZP_BYTE:4 [ fillscreen::c#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index edae7dd62..068d13260 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -702,7 +702,7 @@ Allocated zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] Allocated zp ZP_BYTE:13 [ prepare::i#2 prepare::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index 8d93b41a0..f5a1b336c 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -754,7 +754,7 @@ Allocated zp ZP_BYTE:15 [ init_font_hex::$2 ] Allocated zp ZP_BYTE:16 [ init_font_hex::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Shows a font where each char contains the number of the char (00-ff) // Upstart diff --git a/src/test/ref/for-empty-increment.log b/src/test/ref/for-empty-increment.log index 4bfd1d799..5122bf81b 100644 --- a/src/test/ref/for-empty-increment.log +++ b/src/test/ref/for-empty-increment.log @@ -128,7 +128,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that for()-loops can have empty increments // Upstart diff --git a/src/test/ref/for-empty-init.log b/src/test/ref/for-empty-init.log index 2892bee9c..4ca7eefc3 100644 --- a/src/test/ref/for-empty-init.log +++ b/src/test/ref/for-empty-init.log @@ -128,7 +128,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that for()-loops can have empty inits // Upstart diff --git a/src/test/ref/for-two-vars.log b/src/test/ref/for-two-vars.log index 2a8d7a9d3..f3931bc29 100644 --- a/src/test/ref/for-two-vars.log +++ b/src/test/ref/for-two-vars.log @@ -159,7 +159,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_WORD:3 [ main::sc#2 main::sc#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a for-loop with two iterating variables // Illustrates that for()-loops currently cannot contain two variable declarations. diff --git a/src/test/ref/forced-zeropage.log b/src/test/ref/forced-zeropage.log index 61e487e41..57e2f0676 100644 --- a/src/test/ref/forced-zeropage.log +++ b/src/test/ref/forced-zeropage.log @@ -126,7 +126,7 @@ Allocated zp ZP_WORD:2 [ main::u#1 ] Allocated zp ZP_WORD:4 [ main::$5 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test some forced zeropage access // Upstart diff --git a/src/test/ref/forclassicmin.log b/src/test/ref/forclassicmin.log index 10a55319e..841452f5b 100644 --- a/src/test/ref/forclassicmin.log +++ b/src/test/ref/forclassicmin.log @@ -143,7 +143,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal classic for() loop // Upstart diff --git a/src/test/ref/forincrementassign.log b/src/test/ref/forincrementassign.log index 0dfaab525..8e43e9826 100644 --- a/src/test/ref/forincrementassign.log +++ b/src/test/ref/forincrementassign.log @@ -137,7 +137,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Classic for() does not allow assignment as increment, eg. for(byte i=0;i<40;i=i+2) {} // The following should give a program rendering a char on every second char of the first line - but results in a syntax error diff --git a/src/test/ref/forrangedwords.log b/src/test/ref/forrangedwords.log index f9a2ae12b..8a87e837b 100644 --- a/src/test/ref/forrangedwords.log +++ b/src/test/ref/forrangedwords.log @@ -214,7 +214,7 @@ Allocated zp ZP_BYTE:8 [ main::$3 ] Allocated zp ZP_BYTE:9 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/forrangemin.log b/src/test/ref/forrangemin.log index eb7040492..bddd925db 100644 --- a/src/test/ref/forrangemin.log +++ b/src/test/ref/forrangemin.log @@ -181,7 +181,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::j#3 main::j#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal range based for() loop // Upstart diff --git a/src/test/ref/forrangesymbolic.log b/src/test/ref/forrangesymbolic.log index bef624556..c6fa1a462 100644 --- a/src/test/ref/forrangesymbolic.log +++ b/src/test/ref/forrangesymbolic.log @@ -134,7 +134,7 @@ Complete equivalence classes Allocated zp ZP_WORD:2 [ main::b#2 main::b#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Range-based for does not recognize symbolic constants. // The following should work but gives a not-constant exception diff --git a/src/test/ref/fragment-synth.log b/src/test/ref/fragment-synth.log index a09c9354f..dfac6118e 100644 --- a/src/test/ref/fragment-synth.log +++ b/src/test/ref/fragment-synth.log @@ -286,7 +286,7 @@ Allocated zp ZP_BYTE:7 [ main::a2#0 ] Allocated zp ZP_BYTE:8 [ fct::return#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a sub-optimal fragment synthesis // vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 < vbuaa=pbuz1_derefidx_vbuc1_band_vbuxx < vbuaa=pbuz1_derefidx_vbuaa_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuxx < vbuaa=pbuz1_derefidx_vbuyy_band_vbuaa < vbuaa=vbuaa_band_pbuz1_derefidx_vbuyy - clobber:A Y cycles:11.5 diff --git a/src/test/ref/fragment-variations.log b/src/test/ref/fragment-variations.log index cdc971eac..46f7a64b0 100644 --- a/src/test/ref/fragment-variations.log +++ b/src/test/ref/fragment-variations.log @@ -256,7 +256,7 @@ Allocated zp ZP_DWORD:20 [ main::$1 ] Allocated zp ZP_DWORD:24 [ mul16u::return#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that ASM fragment variations works // ASM fragment variations "cast" constants to different types diff --git a/src/test/ref/function-pointer-noarg-2.log b/src/test/ref/function-pointer-noarg-2.log index 265ccf379..b91469bbe 100644 --- a/src/test/ref/function-pointer-noarg-2.log +++ b/src/test/ref/function-pointer-noarg-2.log @@ -195,7 +195,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating and assigning pointers to non-args no-return functions // Upstart diff --git a/src/test/ref/function-pointer-noarg-3.log b/src/test/ref/function-pointer-noarg-3.log index 9aa06b498..0adedd6a5 100644 --- a/src/test/ref/function-pointer-noarg-3.log +++ b/src/test/ref/function-pointer-noarg-3.log @@ -259,7 +259,7 @@ Allocated zp ZP_WORD:3 [ main::f#3 ] Allocated zp ZP_BYTE:5 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating and assigning pointers to non-args no-return functions - plus inline kickasm-based calling // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index 0cd359ab7..9f13c5789 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -383,7 +383,7 @@ Allocated zp ZP_BYTE:7 [ print::i#2 print::i#1 ] Allocated zp ZP_BYTE:8 [ idx#11 idx#16 idx#12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests calling into different function pointers which call a common sub-method // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-2.log b/src/test/ref/function-pointer-noarg-call-2.log index 5a0b114cd..39c95b860 100644 --- a/src/test/ref/function-pointer-noarg-call-2.log +++ b/src/test/ref/function-pointer-noarg-call-2.log @@ -247,7 +247,7 @@ Allocated zp ZP_WORD:3 [ main::f#3 ] Allocated zp ZP_BYTE:5 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating, assigning and calling pointers to non-args no-return functions // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-3.log b/src/test/ref/function-pointer-noarg-call-3.log index 10510efba..6d8d75061 100644 --- a/src/test/ref/function-pointer-noarg-call-3.log +++ b/src/test/ref/function-pointer-noarg-call-3.log @@ -288,7 +288,7 @@ Allocated zp ZP_WORD:8 [ main::$1 ] Allocated zp ZP_BYTE:10 [ getfn::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating, assigning returning and calling pointers to non-args no-return functions // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-4.log b/src/test/ref/function-pointer-noarg-call-4.log index 397c7633c..74f82eb20 100644 --- a/src/test/ref/function-pointer-noarg-call-4.log +++ b/src/test/ref/function-pointer-noarg-call-4.log @@ -210,7 +210,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating, assigning returning and calling pointers to non-args no-return functions // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-5.log b/src/test/ref/function-pointer-noarg-call-5.log index c49d6e3a4..c05e20ad4 100644 --- a/src/test/ref/function-pointer-noarg-call-5.log +++ b/src/test/ref/function-pointer-noarg-call-5.log @@ -218,7 +218,7 @@ Allocated zp ZP_BYTE:4 [ main::$2 ] Allocated zp ZP_WORD:5 [ main::f#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests calling into arrays of pointers to non-args no-return functions // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-6.log b/src/test/ref/function-pointer-noarg-call-6.log index 21b01b571..ed2143df6 100644 --- a/src/test/ref/function-pointer-noarg-call-6.log +++ b/src/test/ref/function-pointer-noarg-call-6.log @@ -208,7 +208,7 @@ Allocated zp ZP_WORD:2 [ main::cols#2 main::cols#1 ] Allocated zp ZP_WORD:4 [ fn1::screen#2 fn1::screen#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests calling into a function pointer with local variables // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 203e3bf37..690717a0c 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -282,7 +282,7 @@ Allocated zp ZP_BYTE:3 [ hello::i#2 hello::i#1 ] Allocated zp ZP_BYTE:4 [ idx#0 idx#3 idx#7 idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests calling into a function pointer with local variables // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index 754da843e..8b3d43506 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -345,7 +345,7 @@ Allocated zp ZP_WORD:4 [ msg#0 msg#1 msg#10 ] Allocated zp ZP_BYTE:6 [ idx#0 idx#3 idx#7 idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests calling into a function pointer with local variables // Upstart diff --git a/src/test/ref/function-pointer-noarg-call-9.log b/src/test/ref/function-pointer-noarg-call-9.log index c964f785c..a07f3c6a3 100644 --- a/src/test/ref/function-pointer-noarg-call-9.log +++ b/src/test/ref/function-pointer-noarg-call-9.log @@ -145,7 +145,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ idx#0 idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests calling into a function pointer which modifies global volatile // Upstart diff --git a/src/test/ref/function-pointer-noarg-call.log b/src/test/ref/function-pointer-noarg-call.log index 0b9420627..1fb35c655 100644 --- a/src/test/ref/function-pointer-noarg-call.log +++ b/src/test/ref/function-pointer-noarg-call.log @@ -109,7 +109,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating, assigning and calling pointers to non-args no-return functions // Upstart diff --git a/src/test/ref/function-pointer-noarg.log b/src/test/ref/function-pointer-noarg.log index 6f6a631b4..7eee9c044 100644 --- a/src/test/ref/function-pointer-noarg.log +++ b/src/test/ref/function-pointer-noarg.log @@ -223,7 +223,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating pointers to non-args no-return functions // Upstart diff --git a/src/test/ref/function-pointer-return.log b/src/test/ref/function-pointer-return.log index f381782f4..c433ab47d 100644 --- a/src/test/ref/function-pointer-return.log +++ b/src/test/ref/function-pointer-return.log @@ -289,7 +289,7 @@ Allocated zp ZP_BYTE:5 [ main::$0 ] Allocated zp ZP_BYTE:6 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating and assigning pointers to non-args return with function value // Upstart diff --git a/src/test/ref/gfxbank.log b/src/test/ref/gfxbank.log index b9252ca2f..7d2458586 100644 --- a/src/test/ref/gfxbank.log +++ b/src/test/ref/gfxbank.log @@ -211,7 +211,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test minimization of constants // Upstart diff --git a/src/test/ref/global-pc-multiple.log b/src/test/ref/global-pc-multiple.log index bd00d35ad..da450a8a8 100644 --- a/src/test/ref/global-pc-multiple.log +++ b/src/test/ref/global-pc-multiple.log @@ -155,7 +155,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test setting the program PC through a #pc directive // Upstart diff --git a/src/test/ref/global-pc.log b/src/test/ref/global-pc.log index c90f6e4bf..d0c4f410d 100644 --- a/src/test/ref/global-pc.log +++ b/src/test/ref/global-pc.log @@ -107,7 +107,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::col#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test setting the program PC through a #pc directive // Upstart diff --git a/src/test/ref/halfscii.log b/src/test/ref/halfscii.log index 92ba1f0a0..09b112526 100644 --- a/src/test/ref/halfscii.log +++ b/src/test/ref/halfscii.log @@ -870,7 +870,7 @@ Allocated zp ZP_BYTE:36 [ main::bits#3 ] Allocated zp ZP_BYTE:37 [ main::bits_gen#7 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/helloworld0.log b/src/test/ref/helloworld0.log index 0e6a9d28c..303f7e507 100644 --- a/src/test/ref/helloworld0.log +++ b/src/test/ref/helloworld0.log @@ -125,7 +125,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests minimal hello world // Upstart diff --git a/src/test/ref/helloworld2-inline.log b/src/test/ref/helloworld2-inline.log index 7117a1243..9813ca591 100644 --- a/src/test/ref/helloworld2-inline.log +++ b/src/test/ref/helloworld2-inline.log @@ -342,7 +342,7 @@ Allocated zp ZP_BYTE:4 [ main::print22_i#2 main::print22_i#1 ] Allocated zp ZP_BYTE:5 [ main::print22_j#2 main::print22_j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index 74808f2d3..ce8520a1d 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -258,7 +258,7 @@ Allocated zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] Allocated zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/hex2dec-ptrptr.log b/src/test/ref/hex2dec-ptrptr.log index 7abc8a98b..e4e4580f0 100644 --- a/src/test/ref/hex2dec-ptrptr.log +++ b/src/test/ref/hex2dec-ptrptr.log @@ -769,7 +769,7 @@ Allocated zp ZP_BYTE:16 [ utoa16w::$8 ] Allocated zp ZP_BYTE:17 [ utoa16w::$12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Testing binary to hex conversion using pointer to pointer // Upstart diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index 991f47e78..fbb763f7a 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -1449,7 +1449,7 @@ Allocated zp ZP_BYTE:36 [ utoa16w::$8 ] Allocated zp ZP_BYTE:37 [ utoa16w::$12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Testing hex to decimal conversion // Upstart diff --git a/src/test/ref/ifmin.log b/src/test/ref/ifmin.log index 8561a289f..04ec563cd 100644 --- a/src/test/ref/ifmin.log +++ b/src/test/ref/ifmin.log @@ -149,7 +149,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal if() test // Upstart diff --git a/src/test/ref/immzero.log b/src/test/ref/immzero.log index 1da37af07..e4607c0a2 100644 --- a/src/test/ref/immzero.log +++ b/src/test/ref/immzero.log @@ -136,7 +136,7 @@ Allocated zp ZP_WORD:2 [ main::w#2 main::w#1 ] Allocated zp ZP_BYTE:4 [ main::j#2 main::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that immediate zero values are reused - even when assigning to words // Upstart diff --git a/src/test/ref/importing.log b/src/test/ref/importing.log index bbeafc9e8..f432b2b16 100644 --- a/src/test/ref/importing.log +++ b/src/test/ref/importing.log @@ -97,7 +97,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/incd020.log b/src/test/ref/incd020.log index 6f4860428..720bb2403 100644 --- a/src/test/ref/incd020.log +++ b/src/test/ref/incd020.log @@ -86,7 +86,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Incrementing / decrementing pointer content should result in code modifying the memory location - eg. inc $d020. // Currently it does not but instead leads to just reading the value a few times. diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index 3d16cc87b..691f0eb91 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -712,7 +712,7 @@ Allocated zp ZP_WORD:7 [ print_char_cursor#12 print_char_cursor#25 print_char_cu Allocated zp ZP_WORD:9 [ memset::dst#2 memset::dst#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/infloop-error.log b/src/test/ref/infloop-error.log index deefad57f..2752c0f86 100644 --- a/src/test/ref/infloop-error.log +++ b/src/test/ref/infloop-error.log @@ -277,7 +277,7 @@ Allocated zp ZP_BYTE:3 [ main::min#2 main::min#3 main::min#9 ] Allocated zp ZP_BYTE:4 [ main::max#2 main::max#3 main::max#9 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Results in infinite compile loop as the compiler keeps trying to remove the same (empty) alias // Upstart diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 9341e5568..2f0490ed0 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -140,7 +140,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ x#5 x#0 x#1 x#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates a problem where volatiles with initializers are initialized outside the main()-routine // Upstart diff --git a/src/test/ref/initializer-0.log b/src/test/ref/initializer-0.log index eaa8ffa67..9f7ca490e 100644 --- a/src/test/ref/initializer-0.log +++ b/src/test/ref/initializer-0.log @@ -154,7 +154,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates initializing an object using = { ... } syntax // Array of chars diff --git a/src/test/ref/initializer-1.log b/src/test/ref/initializer-1.log index c91e8a583..4b4131bd8 100644 --- a/src/test/ref/initializer-1.log +++ b/src/test/ref/initializer-1.log @@ -197,7 +197,7 @@ Allocated zp ZP_BYTE:6 [ main::idx#1 ] Allocated zp ZP_BYTE:7 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates initializing an object using = { ... } syntax // Array of words diff --git a/src/test/ref/initializer-2.log b/src/test/ref/initializer-2.log index 2e6c6c6e9..60d0e83ed 100644 --- a/src/test/ref/initializer-2.log +++ b/src/test/ref/initializer-2.log @@ -216,7 +216,7 @@ Allocated zp ZP_BYTE:4 [ main::$2 ] Allocated zp ZP_BYTE:5 [ main::idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates initializing an array of structs // Array of structs containing chars diff --git a/src/test/ref/initializer-3.log b/src/test/ref/initializer-3.log index bb7f645c1..5dea183db 100644 --- a/src/test/ref/initializer-3.log +++ b/src/test/ref/initializer-3.log @@ -256,7 +256,7 @@ Allocated zp ZP_BYTE:8 [ main::idx#2 ] Allocated zp ZP_BYTE:9 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates initializing an array of structs // Array of structs containing words diff --git a/src/test/ref/inline-asm-clobber-none.log b/src/test/ref/inline-asm-clobber-none.log index 61b1655bd..e05649e73 100644 --- a/src/test/ref/inline-asm-clobber-none.log +++ b/src/test/ref/inline-asm-clobber-none.log @@ -211,7 +211,7 @@ Allocated zp ZP_BYTE:3 [ main::j#4 main::j#1 ] Allocated zp ZP_BYTE:4 [ main::k#2 main::k#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that inline ASM JSR clobbers all registers // Upstart diff --git a/src/test/ref/inline-asm-clobber.log b/src/test/ref/inline-asm-clobber.log index e8b645346..7c36a70ce 100644 --- a/src/test/ref/inline-asm-clobber.log +++ b/src/test/ref/inline-asm-clobber.log @@ -262,7 +262,7 @@ Allocated zp ZP_BYTE:4 [ main::k#4 main::k#1 ] Allocated zp ZP_BYTE:5 [ main::l#2 main::l#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that inline ASM clobbering is taken into account when assigning registers // Upstart diff --git a/src/test/ref/inline-asm-jsr-clobber.log b/src/test/ref/inline-asm-jsr-clobber.log index 164b6a3d0..620d9a900 100644 --- a/src/test/ref/inline-asm-jsr-clobber.log +++ b/src/test/ref/inline-asm-jsr-clobber.log @@ -109,7 +109,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that inline ASM JSR clobbers all registers // Upstart diff --git a/src/test/ref/inline-asm-label.log b/src/test/ref/inline-asm-label.log index 75b1a3946..f238807c7 100644 --- a/src/test/ref/inline-asm-label.log +++ b/src/test/ref/inline-asm-label.log @@ -80,7 +80,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates how inline assembler use internal labels and external references // Upstart diff --git a/src/test/ref/inline-asm-optimized.log b/src/test/ref/inline-asm-optimized.log index 49c015244..2d95f8f64 100644 --- a/src/test/ref/inline-asm-optimized.log +++ b/src/test/ref/inline-asm-optimized.log @@ -93,7 +93,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that inline assembler is optimized // Upstart diff --git a/src/test/ref/inline-asm-param.log b/src/test/ref/inline-asm-param.log index 4eaf2799f..da05b84f0 100644 --- a/src/test/ref/inline-asm-param.log +++ b/src/test/ref/inline-asm-param.log @@ -118,7 +118,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/inline-asm-ref-scoped.log b/src/test/ref/inline-asm-ref-scoped.log index deb18b9fb..83847b9c6 100644 --- a/src/test/ref/inline-asm-ref-scoped.log +++ b/src/test/ref/inline-asm-ref-scoped.log @@ -87,7 +87,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that references to labels in other scopes is possible from inline ASM // Upstart diff --git a/src/test/ref/inline-asm-refout-const.log b/src/test/ref/inline-asm-refout-const.log index 4ab364b83..cb6446177 100644 --- a/src/test/ref/inline-asm-refout-const.log +++ b/src/test/ref/inline-asm-refout-const.log @@ -80,7 +80,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates how inline assembler can reference data from the outside program without the data being optimized away as unused // Upstart diff --git a/src/test/ref/inline-asm-refout.log b/src/test/ref/inline-asm-refout.log index 59fd0c146..b1fe79844 100644 --- a/src/test/ref/inline-asm-refout.log +++ b/src/test/ref/inline-asm-refout.log @@ -100,7 +100,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates how inline assembler can reference data from the outside program // Upstart diff --git a/src/test/ref/inline-asm.log b/src/test/ref/inline-asm.log index 5238ed429..0f59ddc53 100644 --- a/src/test/ref/inline-asm.log +++ b/src/test/ref/inline-asm.log @@ -62,7 +62,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/inline-assignment.log b/src/test/ref/inline-assignment.log index e8b21b8a3..e39ef4253 100644 --- a/src/test/ref/inline-assignment.log +++ b/src/test/ref/inline-assignment.log @@ -142,7 +142,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::a#1 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/inline-function-if.log b/src/test/ref/inline-function-if.log index 10fcae02e..ee2ab721e 100644 --- a/src/test/ref/inline-function-if.log +++ b/src/test/ref/inline-function-if.log @@ -267,7 +267,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test inlining a slightly complex print function (containing an if) // Upstart diff --git a/src/test/ref/inline-function-level2.log b/src/test/ref/inline-function-level2.log index 614cb584b..38662b845 100644 --- a/src/test/ref/inline-function-level2.log +++ b/src/test/ref/inline-function-level2.log @@ -657,7 +657,7 @@ Allocated zp ZP_BYTE:14 [ main::plot2_xpos#0 ] Allocated zp ZP_BYTE:15 [ main::plot1_xpos#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Inline functions in two levels // Upstart diff --git a/src/test/ref/inline-function-min.log b/src/test/ref/inline-function-min.log index 5994f8e3a..4587e96e2 100644 --- a/src/test/ref/inline-function-min.log +++ b/src/test/ref/inline-function-min.log @@ -290,7 +290,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test minimal inline function // Upstart diff --git a/src/test/ref/inline-function-print.log b/src/test/ref/inline-function-print.log index c1bd11c39..aa7500087 100644 --- a/src/test/ref/inline-function-print.log +++ b/src/test/ref/inline-function-print.log @@ -340,7 +340,7 @@ Allocated zp ZP_BYTE:4 [ main::print2_i#2 main::print2_i#1 ] Allocated zp ZP_BYTE:5 [ main::print2_j#2 main::print2_j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // TEst inlining a slightly complex print function (containing a loop) // Upstart diff --git a/src/test/ref/inline-function.log b/src/test/ref/inline-function.log index 135316fe2..ef3a4ade7 100644 --- a/src/test/ref/inline-function.log +++ b/src/test/ref/inline-function.log @@ -419,7 +419,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test inline function // Splits screen so upper half is lower case and lower half lower case diff --git a/src/test/ref/inline-kasm-clobber.log b/src/test/ref/inline-kasm-clobber.log index cd77de6d0..499c2ffec 100644 --- a/src/test/ref/inline-kasm-clobber.log +++ b/src/test/ref/inline-kasm-clobber.log @@ -226,7 +226,7 @@ Allocated zp ZP_BYTE:3 [ main::l#4 main::l#1 ] Allocated zp ZP_BYTE:4 [ main::m#2 main::m#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that inline kickasm supports the clobbering directive // Upstart diff --git a/src/test/ref/inline-kasm-data.log b/src/test/ref/inline-kasm-data.log index 83cfa2161..b60dbf147 100644 --- a/src/test/ref/inline-kasm-data.log +++ b/src/test/ref/inline-kasm-data.log @@ -183,7 +183,7 @@ Allocated zp ZP_WORD:5 [ main::cols#2 main::cols#1 ] Allocated zp ZP_BYTE:7 [ main::sin#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Example of inline kickasm data // Upstart diff --git a/src/test/ref/inline-kasm-loop.log b/src/test/ref/inline-kasm-loop.log index 4ceffd8e1..02e07f505 100644 --- a/src/test/ref/inline-kasm-loop.log +++ b/src/test/ref/inline-kasm-loop.log @@ -99,7 +99,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Example of inline kickasm in a function // Upstart diff --git a/src/test/ref/inline-kasm-refout.log b/src/test/ref/inline-kasm-refout.log index 1fd4f5736..163c5db4d 100644 --- a/src/test/ref/inline-kasm-refout.log +++ b/src/test/ref/inline-kasm-refout.log @@ -94,7 +94,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates how inline kickassembler can reference data from the outside program // Upstart diff --git a/src/test/ref/inline-kasm-resource.log b/src/test/ref/inline-kasm-resource.log index d57da2fcf..718b98781 100644 --- a/src/test/ref/inline-kasm-resource.log +++ b/src/test/ref/inline-kasm-resource.log @@ -165,7 +165,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Example of inline kickasm resource data // Upstart diff --git a/src/test/ref/inline-pointer-0.log b/src/test/ref/inline-pointer-0.log index 7e69b1ffd..c3502f919 100644 --- a/src/test/ref/inline-pointer-0.log +++ b/src/test/ref/inline-pointer-0.log @@ -100,7 +100,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating a literal pointer from two bytes // Upstart diff --git a/src/test/ref/inline-pointer-1.log b/src/test/ref/inline-pointer-1.log index 81b005c22..af84357b5 100644 --- a/src/test/ref/inline-pointer-1.log +++ b/src/test/ref/inline-pointer-1.log @@ -181,7 +181,7 @@ Allocated zp ZP_BYTE:3 [ puta::pl#2 ] Allocated zp ZP_WORD:4 [ puta::screen#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating a literal pointer from two bytes // Upstart diff --git a/src/test/ref/inline-pointer-2.log b/src/test/ref/inline-pointer-2.log index c57b47dc6..9ea034540 100644 --- a/src/test/ref/inline-pointer-2.log +++ b/src/test/ref/inline-pointer-2.log @@ -119,7 +119,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating a literal pointer from two bytes // Upstart diff --git a/src/test/ref/inline-string-2.log b/src/test/ref/inline-string-2.log index 8508697b1..320507290 100644 --- a/src/test/ref/inline-string-2.log +++ b/src/test/ref/inline-string-2.log @@ -350,7 +350,7 @@ Allocated zp ZP_WORD:5 [ print_msg::msg#3 ] Allocated zp ZP_WORD:7 [ print::msg#2 print::msg#0 print::msg#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Inline Strings in assignments // Upstart diff --git a/src/test/ref/inline-string-3.log b/src/test/ref/inline-string-3.log index 851dcacfe..6bad5e5d8 100644 --- a/src/test/ref/inline-string-3.log +++ b/src/test/ref/inline-string-3.log @@ -147,7 +147,7 @@ Complete equivalence classes Allocated zp ZP_WORD:2 [ main::ptr#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test assigning address of inline string to pointer // The result should be an labelled .text in the ASM diff --git a/src/test/ref/inline-string.log b/src/test/ref/inline-string.log index cbf9604f9..e8b8ac84c 100644 --- a/src/test/ref/inline-string.log +++ b/src/test/ref/inline-string.log @@ -264,7 +264,7 @@ Allocated zp ZP_WORD:2 [ screen#18 screen#12 screen#5 ] Allocated zp ZP_WORD:4 [ print::msg#4 print::msg#6 print::msg#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Inline Strings in method calls are automatically converted to local constant variables byte[] st = "..."; - generating an ASM .text). // Upstart diff --git a/src/test/ref/inline-word-0.log b/src/test/ref/inline-word-0.log index 49a4218d6..efa4195f5 100644 --- a/src/test/ref/inline-word-0.log +++ b/src/test/ref/inline-word-0.log @@ -119,7 +119,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests minimal inline word // Upstart diff --git a/src/test/ref/inline-word-1.log b/src/test/ref/inline-word-1.log index ace8a8ca2..f40969f78 100644 --- a/src/test/ref/inline-word-1.log +++ b/src/test/ref/inline-word-1.log @@ -119,7 +119,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests minimal inline word // Upstart diff --git a/src/test/ref/inline-word-2.log b/src/test/ref/inline-word-2.log index 929dd5154..988ec1341 100644 --- a/src/test/ref/inline-word-2.log +++ b/src/test/ref/inline-word-2.log @@ -119,7 +119,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests minimal inline word // Upstart diff --git a/src/test/ref/inline-word.log b/src/test/ref/inline-word.log index e0e5a469b..22ee3f7ed 100644 --- a/src/test/ref/inline-word.log +++ b/src/test/ref/inline-word.log @@ -235,7 +235,7 @@ Allocated zp ZP_BYTE:3 [ main::l#2 main::l#1 ] Allocated zp ZP_WORD:4 [ main::w#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/inlinearrayproblem.log b/src/test/ref/inlinearrayproblem.log index bdb8944cd..13cb61211 100644 --- a/src/test/ref/inlinearrayproblem.log +++ b/src/test/ref/inlinearrayproblem.log @@ -148,7 +148,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Arrays / strings allocated inline destroy functions (because they are allocated where the call enters. // The following places the text at the start of the main-function - and JSR's straight into the text - not the code. diff --git a/src/test/ref/inmem-const-array.log b/src/test/ref/inmem-const-array.log index 4fcf5ad26..26ef3ff89 100644 --- a/src/test/ref/inmem-const-array.log +++ b/src/test/ref/inmem-const-array.log @@ -241,7 +241,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::j#3 main::j#4 main::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/inmemarray.log b/src/test/ref/inmemarray.log index 05b331857..daae919de 100644 --- a/src/test/ref/inmemarray.log +++ b/src/test/ref/inmemarray.log @@ -210,7 +210,7 @@ Allocated zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ] Allocated zp ZP_BYTE:3 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/inmemstring.log b/src/test/ref/inmemstring.log index f359d4be8..131d3bdc7 100644 --- a/src/test/ref/inmemstring.log +++ b/src/test/ref/inmemstring.log @@ -203,7 +203,7 @@ Allocated zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] Allocated zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/inner-increment-problem.log b/src/test/ref/inner-increment-problem.log index fb6d1e12f..48b9cae25 100644 --- a/src/test/ref/inner-increment-problem.log +++ b/src/test/ref/inner-increment-problem.log @@ -161,7 +161,7 @@ Allocated zp ZP_BYTE:6 [ main::$3 ] Allocated zp ZP_BYTE:7 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Inner increment is not being done properly (screen++) // Upstart diff --git a/src/test/ref/int-conversion.log b/src/test/ref/int-conversion.log index ee0076350..dbf26ef36 100644 --- a/src/test/ref/int-conversion.log +++ b/src/test/ref/int-conversion.log @@ -1647,7 +1647,7 @@ Allocated zp ZP_BYTE:5 [ assertType::t2#42 ] Allocated zp ZP_BYTE:6 [ idx#105 idx#108 idx#26 idx#40 idx#47 idx#19 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests different integer literal types // Upstart diff --git a/src/test/ref/int-literals.log b/src/test/ref/int-literals.log index abf5fb8a2..7939603e5 100644 --- a/src/test/ref/int-literals.log +++ b/src/test/ref/int-literals.log @@ -770,7 +770,7 @@ Allocated zp ZP_BYTE:5 [ assertType::t2#15 ] Allocated zp ZP_BYTE:6 [ idx#41 idx#20 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests different integer literal types // Upstart diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index 9c81a5943..11c0622cf 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -172,7 +172,7 @@ Allocated zp ZP_BYTE:2 [ col1#0 col1#1 ] Allocated zp ZP_BYTE:3 [ col2#0 col2#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates problem where volatiles reuse the same ZP addresses for multiple overlapping volatiles // Upstart diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index dc370accf..9d46d0aed 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -328,7 +328,7 @@ Allocated zp ZP_BYTE:5 [ col1#0 col1#1 ] Allocated zp ZP_BYTE:6 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates problem where volatiles reuse ZP addresses of other variables // Upstart diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index e3e54bf91..25944dd7a 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -292,7 +292,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A minimal working raster hardware IRQ with clobber-based register savings // Upstart diff --git a/src/test/ref/irq-hardware-clobber.log b/src/test/ref/irq-hardware-clobber.log index b3dbb34f5..693038cd6 100644 --- a/src/test/ref/irq-hardware-clobber.log +++ b/src/test/ref/irq-hardware-clobber.log @@ -262,7 +262,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A minimal working raster hardware IRQ with clobber-based register savings // Upstart diff --git a/src/test/ref/irq-hardware-stack.log b/src/test/ref/irq-hardware-stack.log index 1012424bd..2dfc65753 100644 --- a/src/test/ref/irq-hardware-stack.log +++ b/src/test/ref/irq-hardware-stack.log @@ -262,7 +262,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A minimal working raster IRQ // Upstart diff --git a/src/test/ref/irq-hardware.log b/src/test/ref/irq-hardware.log index c0e28e364..67eb39427 100644 --- a/src/test/ref/irq-hardware.log +++ b/src/test/ref/irq-hardware.log @@ -262,7 +262,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A minimal working raster IRQ // Upstart diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index 51272bdbc..17833a02b 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -465,7 +465,7 @@ Allocated zp ZP_BYTE:3 [ table_driven_irq::idx#0 ] Allocated zp ZP_BYTE:4 [ table_driven_irq::val#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test interrupt routine using a variable between calls (irq_idx) // Upstart diff --git a/src/test/ref/irq-kernel-minimal.log b/src/test/ref/irq-kernel-minimal.log index 0e9db3c38..ba8a42e1a 100644 --- a/src/test/ref/irq-kernel-minimal.log +++ b/src/test/ref/irq-kernel-minimal.log @@ -135,7 +135,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A minimal working IRQ // Upstart diff --git a/src/test/ref/irq-kernel.log b/src/test/ref/irq-kernel.log index 3a3947ff6..71fb384c5 100644 --- a/src/test/ref/irq-kernel.log +++ b/src/test/ref/irq-kernel.log @@ -200,7 +200,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A minimal working raster IRQ // Upstart diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index 0a0a28949..ac341f9c5 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -898,7 +898,7 @@ Allocated zp ZP_BYTE:20 [ sub_irq::$0 ] Allocated zp ZP_BYTE:21 [ sub_irq::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates a problem where local variables inside an IRQ are assigned the same zeropage as a variable outside the IRQ // Upstart diff --git a/src/test/ref/irq-raster.log b/src/test/ref/irq-raster.log index 986baa319..b40754ae7 100644 --- a/src/test/ref/irq-raster.log +++ b/src/test/ref/irq-raster.log @@ -200,7 +200,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A minimal working raster IRQ // Upstart diff --git a/src/test/ref/irq-volatile-bool-problem.log b/src/test/ref/irq-volatile-bool-problem.log index 3038cce49..2551dfd75 100644 --- a/src/test/ref/irq-volatile-bool-problem.log +++ b/src/test/ref/irq-volatile-bool-problem.log @@ -315,7 +315,7 @@ Complete equivalence classes Allocated zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates a problem where a volatile bool modified at the end of an IRQ is not stored properly // because it is assigned to the A register diff --git a/src/test/ref/iterarray.log b/src/test/ref/iterarray.log index fac18a7d6..d5f00e3d6 100644 --- a/src/test/ref/iterarray.log +++ b/src/test/ref/iterarray.log @@ -150,7 +150,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/kc-ka-string-encoding.log b/src/test/ref/kc-ka-string-encoding.log index 6c8ad2b1b..8d7aae470 100644 --- a/src/test/ref/kc-ka-string-encoding.log +++ b/src/test/ref/kc-ka-string-encoding.log @@ -116,7 +116,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index b805602a6..b24b3e040 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -701,7 +701,7 @@ Allocated zp ZP_BYTE:16 [ keyboard_key_pressed::return#10 ] Allocated zp ZP_BYTE:17 [ pressed::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Exploring keyboard glitch that finds "C" press when pressing space // The glitch is caused by the "normal" C64 interrupt occuring just as the keyboard is read. diff --git a/src/test/ref/kickasm-uses-prevent-deletion.log b/src/test/ref/kickasm-uses-prevent-deletion.log index d712c21ef..04006f724 100644 --- a/src/test/ref/kickasm-uses-prevent-deletion.log +++ b/src/test/ref/kickasm-uses-prevent-deletion.log @@ -131,7 +131,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Ensure that an inline kickasm uses-clause is anough to prevent a function from being deleted // Upstart diff --git a/src/test/ref/line-anim.log b/src/test/ref/line-anim.log index 0ee89128e..57c04fb47 100644 --- a/src/test/ref/line-anim.log +++ b/src/test/ref/line-anim.log @@ -2781,7 +2781,7 @@ Allocated zp ZP_BYTE:92 [ bitmap_init::$5 ] Allocated zp ZP_BYTE:93 [ bitmap_init::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Animated lines drawn on a single color bitmap // Upstart diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index b68238520..40ce2d0c6 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -2427,7 +2427,7 @@ Allocated zp ZP_BYTE:58 [ divr16u::$2 ] Allocated zp ZP_WORD:59 [ rem16u#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Linear table generator // Work in progress towards a sinus generator diff --git a/src/test/ref/literal-char-minus-number.log b/src/test/ref/literal-char-minus-number.log index ac8d4f0ee..b2784651a 100644 --- a/src/test/ref/literal-char-minus-number.log +++ b/src/test/ref/literal-char-minus-number.log @@ -80,7 +80,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests subtracting a number from a literal char // Upstart diff --git a/src/test/ref/literal-strings.log b/src/test/ref/literal-strings.log index 0190a1811..79a1541b5 100644 --- a/src/test/ref/literal-strings.log +++ b/src/test/ref/literal-strings.log @@ -145,7 +145,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests literal strings with and without zero-termination // Upstart diff --git a/src/test/ref/literal-word-pointer-0.log b/src/test/ref/literal-word-pointer-0.log index d35324d12..29f9f2262 100644 --- a/src/test/ref/literal-word-pointer-0.log +++ b/src/test/ref/literal-word-pointer-0.log @@ -115,7 +115,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests assigning a literal word pointer // Upstart diff --git a/src/test/ref/literals.log b/src/test/ref/literals.log index 6431be2f1..e429dc3c8 100644 --- a/src/test/ref/literals.log +++ b/src/test/ref/literals.log @@ -187,7 +187,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/liverange-call-problem.log b/src/test/ref/liverange-call-problem.log index 7518443aa..e128c13ff 100644 --- a/src/test/ref/liverange-call-problem.log +++ b/src/test/ref/liverange-call-problem.log @@ -300,7 +300,7 @@ Allocated zp ZP_WORD:2 [ w2#10 w2#11 ] Allocated zp ZP_WORD:4 [ w1#11 w1#12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Live ranges were not functioning properly, when multiple method calls were chained - each modifying different vars. // w1 and w2 ended up having the same zero-page register as their live range was not propagated properly diff --git a/src/test/ref/liverange-problem-0.log b/src/test/ref/liverange-problem-0.log index fe2dab66a..3334f278e 100644 --- a/src/test/ref/liverange-problem-0.log +++ b/src/test/ref/liverange-problem-0.log @@ -227,7 +227,7 @@ Allocated zp ZP_WORD:10 [ SCREEN_2#0 ] Allocated zp ZP_WORD:12 [ malloc::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Error where the compiler is reusing the same ZP for two byte* variables. // SCREEN_1 and SCREEN_2 are both allocated to ZP: 4 diff --git a/src/test/ref/liverange.log b/src/test/ref/liverange.log index 21f787778..dca093009 100644 --- a/src/test/ref/liverange.log +++ b/src/test/ref/liverange.log @@ -272,7 +272,7 @@ Allocated zp ZP_BYTE:8 [ main::a#2 ] Allocated zp ZP_BYTE:9 [ inci::return#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/local-string.log b/src/test/ref/local-string.log index a84fa5955..6d9a564ca 100644 --- a/src/test/ref/local-string.log +++ b/src/test/ref/local-string.log @@ -137,7 +137,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Local constant strings are placed at the start of the method. This means the generated ASM jumps / calls straignt into the constant string // Upstart diff --git a/src/test/ref/localscope-loops.log b/src/test/ref/localscope-loops.log index 78426ba84..d5957d611 100644 --- a/src/test/ref/localscope-loops.log +++ b/src/test/ref/localscope-loops.log @@ -174,7 +174,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::i1#2 main::i1#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates introducing local scopes inside loops etc // Upstart diff --git a/src/test/ref/localscope-simple.log b/src/test/ref/localscope-simple.log index 41caefcb8..eb8b012eb 100644 --- a/src/test/ref/localscope-simple.log +++ b/src/test/ref/localscope-simple.log @@ -96,7 +96,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests anonymous scopes inside functions // Upstart diff --git a/src/test/ref/long-pointer-0.log b/src/test/ref/long-pointer-0.log index ba97331a6..e7a34ef66 100644 --- a/src/test/ref/long-pointer-0.log +++ b/src/test/ref/long-pointer-0.log @@ -99,7 +99,7 @@ Complete equivalence classes Allocated zp ZP_DWORD:2 [ main::long_ptr#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating a long (32bit) pointer on zeropage for 45GS02 flat memory access // Upstart diff --git a/src/test/ref/long-pointer-1.log b/src/test/ref/long-pointer-1.log index fccdb2f21..f6fbf89be 100644 --- a/src/test/ref/long-pointer-1.log +++ b/src/test/ref/long-pointer-1.log @@ -100,7 +100,7 @@ Complete equivalence classes Allocated zp ZP_DWORD:2 [ main::long_ptr#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests creating a long (32bit) pointer on zeropage for 45GS02 flat memory access // Upstart diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index 88171e39b..39359104e 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -240,7 +240,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that long branch fixing works with interrupt exits (to $ea81) // Upstart diff --git a/src/test/ref/longjump.log b/src/test/ref/longjump.log index 7f8353a01..f28c5612c 100644 --- a/src/test/ref/longjump.log +++ b/src/test/ref/longjump.log @@ -120,7 +120,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal example program generating a long jump // Upstart diff --git a/src/test/ref/longjump2.log b/src/test/ref/longjump2.log index bdbc1304d..0ddecb74d 100644 --- a/src/test/ref/longjump2.log +++ b/src/test/ref/longjump2.log @@ -222,7 +222,7 @@ Allocated zp ZP_BYTE:2 [ long2::i#2 long2::i#1 ] Allocated zp ZP_BYTE:3 [ long1::i#2 long1::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal example program generating two long jumps // Upstart diff --git a/src/test/ref/loop-break-continue.log b/src/test/ref/loop-break-continue.log index dcd809590..e6bf36437 100644 --- a/src/test/ref/loop-break-continue.log +++ b/src/test/ref/loop-break-continue.log @@ -208,7 +208,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_WORD:3 [ main::screen#2 main::screen#5 main::screen#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates both break & continue statements in a loop // Prints a message ending at NUL skipping all spaces diff --git a/src/test/ref/loop-break-nested.log b/src/test/ref/loop-break-nested.log index 1d60be4d2..b15e4dd98 100644 --- a/src/test/ref/loop-break-nested.log +++ b/src/test/ref/loop-break-nested.log @@ -219,7 +219,7 @@ Allocated zp ZP_WORD:2 [ main::line#2 main::line#1 ] Allocated zp ZP_BYTE:4 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests break statement in a simple loop // Upstart diff --git a/src/test/ref/loop-break.log b/src/test/ref/loop-break.log index 68ab60a4d..57d0d5eba 100644 --- a/src/test/ref/loop-break.log +++ b/src/test/ref/loop-break.log @@ -136,7 +136,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests break statement in a simple loop // Upstart diff --git a/src/test/ref/loop-continue.log b/src/test/ref/loop-continue.log index 7096a7c14..7470b20ed 100644 --- a/src/test/ref/loop-continue.log +++ b/src/test/ref/loop-continue.log @@ -144,7 +144,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests break statement in a simple loop // Upstart diff --git a/src/test/ref/loop-for-continue.log b/src/test/ref/loop-for-continue.log index af5fb47ea..8628af541 100644 --- a/src/test/ref/loop-for-continue.log +++ b/src/test/ref/loop-for-continue.log @@ -203,7 +203,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#5 main::idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests continue statement in a simple for()-loop // Upstart diff --git a/src/test/ref/loop-for-empty-body.log b/src/test/ref/loop-for-empty-body.log index 796424f1c..0d5425172 100644 --- a/src/test/ref/loop-for-empty-body.log +++ b/src/test/ref/loop-for-empty-body.log @@ -153,7 +153,7 @@ Allocated zp ZP_BYTE:2 [ main::b#2 main::b#1 ] Allocated zp ZP_BYTE:3 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a for-loop with an empty body // Upstart diff --git a/src/test/ref/loop-for-sideeffect.log b/src/test/ref/loop-for-sideeffect.log index e946f6875..6442cda4c 100644 --- a/src/test/ref/loop-for-sideeffect.log +++ b/src/test/ref/loop-for-sideeffect.log @@ -147,7 +147,7 @@ Allocated zp ZP_BYTE:2 [ main::i#3 main::i#6 ] Allocated zp ZP_BYTE:3 [ main::i#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a for()-loop where the condition has a side-effect // Currently not standard C compliant (since the condition is not evaluated before the body) diff --git a/src/test/ref/loop-memset-min.log b/src/test/ref/loop-memset-min.log index 89eadddaf..7e3096dac 100644 --- a/src/test/ref/loop-memset-min.log +++ b/src/test/ref/loop-memset-min.log @@ -271,7 +271,7 @@ Complete equivalence classes Allocated zp ZP_WORD:2 [ memset::dst#2 memset::dst#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal classic for() loop - coded using while() to test optimization of loop heads // Upstart diff --git a/src/test/ref/loop-problem.log b/src/test/ref/loop-problem.log index 258a3a34c..9daefd5cd 100644 --- a/src/test/ref/loop-problem.log +++ b/src/test/ref/loop-problem.log @@ -181,7 +181,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ b::i#2 b::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A simple loop results in NullPointerException during loop analysis // Upstart diff --git a/src/test/ref/loop-problem2.log b/src/test/ref/loop-problem2.log index 59f6f3e82..4493d2938 100644 --- a/src/test/ref/loop-problem2.log +++ b/src/test/ref/loop-problem2.log @@ -252,7 +252,7 @@ Allocated zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ] Allocated zp ZP_BYTE:4 [ mode_ctrl::before#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/loop-while-continue.log b/src/test/ref/loop-while-continue.log index 8bf26b510..bcfbe778c 100644 --- a/src/test/ref/loop-while-continue.log +++ b/src/test/ref/loop-while-continue.log @@ -150,7 +150,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests break statement in a simple loop // Upstart diff --git a/src/test/ref/loop-while-min.log b/src/test/ref/loop-while-min.log index 8efa4fe71..06f438eec 100644 --- a/src/test/ref/loop-while-min.log +++ b/src/test/ref/loop-while-min.log @@ -129,7 +129,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal classic while() loop // Upstart diff --git a/src/test/ref/loop-while-sideeffect.log b/src/test/ref/loop-while-sideeffect.log index f9d3e35bf..99b90a53b 100644 --- a/src/test/ref/loop-while-sideeffect.log +++ b/src/test/ref/loop-while-sideeffect.log @@ -142,7 +142,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#5 ] Allocated zp ZP_BYTE:3 [ main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a while()-loop where the condition has a side-effect // Upstart diff --git a/src/test/ref/loop100.log b/src/test/ref/loop100.log index 70089a1a4..df2b99a04 100644 --- a/src/test/ref/loop100.log +++ b/src/test/ref/loop100.log @@ -119,7 +119,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/loophead-problem-2.log b/src/test/ref/loophead-problem-2.log index 4a3848982..388e36e95 100644 --- a/src/test/ref/loophead-problem-2.log +++ b/src/test/ref/loophead-problem-2.log @@ -372,7 +372,7 @@ Allocated zp ZP_BYTE:11 [ scan_for_lowest::$3 ] Allocated zp ZP_BYTE:12 [ scan_for_lowest::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Call returns wrong value // Reported by Clay Cowgill as an NPE (which has been fixed - but this return-value problem has popped up instead) diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index 60481baa4..8276ed48b 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -369,7 +369,7 @@ Allocated zp ZP_BYTE:23 [ main::$3 ] Allocated zp ZP_BYTE:24 [ mul16u::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Program where loop-head optimization produces wrong return value // Reported by Richard-William Loerakker diff --git a/src/test/ref/loophead-problem.log b/src/test/ref/loophead-problem.log index 99c544679..cad01f012 100644 --- a/src/test/ref/loophead-problem.log +++ b/src/test/ref/loophead-problem.log @@ -223,7 +223,7 @@ Allocated zp ZP_BYTE:2 [ popup_selector::k#2 popup_selector::k#1 ] Allocated zp ZP_BYTE:3 [ opcode#12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates a problem where constant loophead unrolling results in an error // The result is a NullPointerException diff --git a/src/test/ref/loopmin.log b/src/test/ref/loopmin.log index fb96276a1..15bf5f8c9 100644 --- a/src/test/ref/loopmin.log +++ b/src/test/ref/loopmin.log @@ -185,7 +185,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::s#2 main::s#4 main::s#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/loopnest.log b/src/test/ref/loopnest.log index 76dcd7a5c..4cae1d47c 100644 --- a/src/test/ref/loopnest.log +++ b/src/test/ref/loopnest.log @@ -189,7 +189,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ nest::j#2 nest::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index 471b07de6..0e16a3622 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -409,7 +409,7 @@ Allocated zp ZP_BYTE:6 [ nest2::i#4 nest2::i#1 ] Allocated zp ZP_BYTE:7 [ nest2::j#2 nest2::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index 5a9da9bbb..25b23c82f 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -239,7 +239,7 @@ Allocated zp ZP_BYTE:4 [ b::i#0 ] Allocated zp ZP_BYTE:5 [ c::i#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/loopsplit.log b/src/test/ref/loopsplit.log index 53404070c..b4ad2f914 100644 --- a/src/test/ref/loopsplit.log +++ b/src/test/ref/loopsplit.log @@ -204,7 +204,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::s#3 main::s#1 main::s#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/malloc-0.log b/src/test/ref/malloc-0.log index 9bd58f29c..320714f83 100644 --- a/src/test/ref/malloc-0.log +++ b/src/test/ref/malloc-0.log @@ -275,7 +275,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Experiments with malloc() - a byte array // Upstart diff --git a/src/test/ref/malloc-1.log b/src/test/ref/malloc-1.log index b2f2db7f1..897cf92b4 100644 --- a/src/test/ref/malloc-1.log +++ b/src/test/ref/malloc-1.log @@ -294,7 +294,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_WORD:3 [ main::w#2 main::w#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Experiments with malloc() - a word array // Upstart diff --git a/src/test/ref/mem-alignment.log b/src/test/ref/mem-alignment.log index 68439182a..480f8b4e0 100644 --- a/src/test/ref/mem-alignment.log +++ b/src/test/ref/mem-alignment.log @@ -192,7 +192,7 @@ Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] Allocated zp ZP_BYTE:4 [ main::i1#2 main::i1#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test that memory alignment of arrays work // Upstart diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index d24e19926..6d7f6511a 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -522,7 +522,7 @@ Allocated zp ZP_WORD:10 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] Allocated zp ZP_WORD:12 [ memcpy::src_end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test memcpy - copy charset and screen using memcpy() from stdlib string // Upstart diff --git a/src/test/ref/memcpy-1.log b/src/test/ref/memcpy-1.log index da1a2b5f4..fc4347e48 100644 --- a/src/test/ref/memcpy-1.log +++ b/src/test/ref/memcpy-1.log @@ -517,7 +517,7 @@ Allocated zp ZP_WORD:20 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] Allocated zp ZP_WORD:22 [ memcpy::src_end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test memcpy on strings ( // Upstart diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index bfab2017d..05314f5b4 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -434,7 +434,7 @@ Allocated zp ZP_BYTE:9 [ main::$4 ] Allocated zp ZP_WORD:10 [ malloc::mem#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Experiments with malloc() // Upstart diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index dcdcf9343..47a6478cf 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -1396,7 +1396,7 @@ Allocated zp ZP_BYTE:41 [ mulf_init::$12 ] Allocated zp ZP_BYTE:42 [ mulf_init::$13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/mixed-array-0.log b/src/test/ref/mixed-array-0.log index 1ac0f989d..28da03119 100644 --- a/src/test/ref/mixed-array-0.log +++ b/src/test/ref/mixed-array-0.log @@ -116,7 +116,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test an array with mixed byte/number types // Upstart diff --git a/src/test/ref/mixed-array-1.log b/src/test/ref/mixed-array-1.log index 0d72940fb..3b149825b 100644 --- a/src/test/ref/mixed-array-1.log +++ b/src/test/ref/mixed-array-1.log @@ -117,7 +117,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test an array with mixed byte/number types // Upstart diff --git a/src/test/ref/modglobal.log b/src/test/ref/modglobal.log index 0fc1011ec..b938e1d69 100644 --- a/src/test/ref/modglobal.log +++ b/src/test/ref/modglobal.log @@ -358,7 +358,7 @@ Allocated zp ZP_BYTE:9 [ cnt#12 ] Allocated zp ZP_BYTE:10 [ inccnt::return#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/modglobalmin.log b/src/test/ref/modglobalmin.log index cb3f4d3f5..fa6171a75 100644 --- a/src/test/ref/modglobalmin.log +++ b/src/test/ref/modglobalmin.log @@ -193,7 +193,7 @@ Allocated zp ZP_BYTE:3 [ cnt#11 ] Allocated zp ZP_BYTE:4 [ cnt#13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index dc6ec1d46..1da649949 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -462,7 +462,7 @@ Allocated zp ZP_BYTE:15 [ main::$3 ] Allocated zp ZP_BYTE:16 [ mul8u::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal test of mul8u // Upstart diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index d4ff3f1e7..f1f382619 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -2398,7 +2398,7 @@ Allocated zp ZP_BYTE:32 [ plexShowSprite::$9 ] Allocated zp ZP_BYTE:33 [ plexShowSprite::$5 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A simple usage of the flexible sprite multiplexer routine // Upstart diff --git a/src/test/ref/multiply-2s.log b/src/test/ref/multiply-2s.log index d6a917b59..19787ba3c 100644 --- a/src/test/ref/multiply-2s.log +++ b/src/test/ref/multiply-2s.log @@ -248,7 +248,7 @@ Allocated zp ZP_BYTE:6 [ main::sb#0 ] Allocated zp ZP_BYTE:7 [ main::$12 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Check that multiplication by factors of 2 is converted to shifts // Upstart diff --git a/src/test/ref/multiply-ns.log b/src/test/ref/multiply-ns.log index 51840c4e8..2721c1b87 100644 --- a/src/test/ref/multiply-ns.log +++ b/src/test/ref/multiply-ns.log @@ -542,7 +542,7 @@ Allocated zp ZP_BYTE:31 [ main::$67 ] Allocated zp ZP_BYTE:32 [ main::$29 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Check that multiplication by constants is converted to shift/add // Upstart diff --git a/src/test/ref/nes-array.log b/src/test/ref/nes-array.log index b6fd00338..f11fb74fe 100644 --- a/src/test/ref/nes-array.log +++ b/src/test/ref/nes-array.log @@ -287,7 +287,7 @@ Allocated zp ZP_BYTE:17 [ foo::$1 ] Allocated zp ZP_WORD:18 [ foo::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test a bit of array code from the NES forum // https://forums.nesdev.com/viewtopic.php?f=2&t=18735 diff --git a/src/test/ref/no-recursion-heavy.log b/src/test/ref/no-recursion-heavy.log index 467a2f9ff..1cc3dee1d 100644 --- a/src/test/ref/no-recursion-heavy.log +++ b/src/test/ref/no-recursion-heavy.log @@ -2825,7 +2825,7 @@ Allocated zp ZP_BYTE:7 [ bd#116 bd#154 bd#114 bd#153 bd#113 bd#152 bd#112 bd#151 Allocated zp ZP_BYTE:8 [ bd#117 bd#235 bd#236 bd#237 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/noop-cast-elimination.log b/src/test/ref/noop-cast-elimination.log index c40d22be4..a8cf90baf 100644 --- a/src/test/ref/noop-cast-elimination.log +++ b/src/test/ref/noop-cast-elimination.log @@ -160,7 +160,7 @@ Allocated zp ZP_WORD:3 [ main::sw#2 main::sw#1 ] Allocated zp ZP_BYTE:5 [ main::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test elimination of noop-casts (signed byte to byte) // Upstart diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index a5acb58a7..a96f92bbf 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -568,7 +568,7 @@ Allocated zp ZP_BYTE:13 [ gen_char3::$0 ] Allocated zp ZP_BYTE:14 [ gen_char3::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Generate a charset based on a 5x3 pattern stored in 2 bytes // Upstart diff --git a/src/test/ref/number-conversion.log b/src/test/ref/number-conversion.log index 50144e082..5078f8e0b 100644 --- a/src/test/ref/number-conversion.log +++ b/src/test/ref/number-conversion.log @@ -1392,7 +1392,7 @@ Allocated zp ZP_BYTE:3 [ assertType::t2#35 ] Allocated zp ZP_BYTE:4 [ idx#79 idx#40 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests conversion of numbers to correct int types // See https://gitlab.com/camelot/kickc/issues/181 diff --git a/src/test/ref/number-inference-sum.log b/src/test/ref/number-inference-sum.log index ec8afe272..12fa71057 100644 --- a/src/test/ref/number-inference-sum.log +++ b/src/test/ref/number-inference-sum.log @@ -175,7 +175,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test inference of number types using a long sum // Currently fails - because the compiler does not handle byte+byte correctly (not truncating the result to 8 bits) diff --git a/src/test/ref/number-type.log b/src/test/ref/number-type.log index fa1a5f5d8..9fd95f3ee 100644 --- a/src/test/ref/number-type.log +++ b/src/test/ref/number-type.log @@ -528,7 +528,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the number type used for constant expressions // Upstart diff --git a/src/test/ref/operator-lohi-problem-1.log b/src/test/ref/operator-lohi-problem-1.log index afaa280ba..ba9a7676c 100644 --- a/src/test/ref/operator-lohi-problem-1.log +++ b/src/test/ref/operator-lohi-problem-1.log @@ -148,7 +148,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates problem with constant evaluation of lo/hi-operator // $20000 /$400 results in a byte value - confusing the lo/hi-evaluation diff --git a/src/test/ref/operator-lohi-problem.log b/src/test/ref/operator-lohi-problem.log index 44be38012..2ab11bf2e 100644 --- a/src/test/ref/operator-lohi-problem.log +++ b/src/test/ref/operator-lohi-problem.log @@ -173,7 +173,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates problem with constant evaluation of lo/hi-operator // $20000 /$400 results in a byte value - confusing the lo/hi-evaluation diff --git a/src/test/ref/optimize-unsigned-comparisons.log b/src/test/ref/optimize-unsigned-comparisons.log index 9806b9473..828ff4ce5 100644 --- a/src/test/ref/optimize-unsigned-comparisons.log +++ b/src/test/ref/optimize-unsigned-comparisons.log @@ -211,7 +211,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Examples of unsigned comparisons to values outside the range of unsigned // These should be optimized to constants diff --git a/src/test/ref/overlap-allocation-2.log b/src/test/ref/overlap-allocation-2.log index 5d903abdf..890fcc45e 100644 --- a/src/test/ref/overlap-allocation-2.log +++ b/src/test/ref/overlap-allocation-2.log @@ -279,7 +279,7 @@ Allocated zp ZP_BYTE:4 [ line::l#2 line::l#0 line::l#1 ] Allocated zp ZP_BYTE:5 [ plot::x#2 plot::x#0 plot::x#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Two levels of functions to test that register allocation handles live ranges and call-ranges optimally to allocate the fewest possible ZP-variables // Upstart diff --git a/src/test/ref/overlap-allocation.log b/src/test/ref/overlap-allocation.log index b3b973210..609b65e2a 100644 --- a/src/test/ref/overlap-allocation.log +++ b/src/test/ref/overlap-allocation.log @@ -276,7 +276,7 @@ Allocated zp ZP_BYTE:4 [ main::k#2 main::k#1 ] Allocated zp ZP_BYTE:5 [ plot::x#3 plot::x#0 plot::x#1 plot::x#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Allocates ZP to j/k-variables even though all of i, j, k could be allocates to x and be more efficient. // Reason: Pass4RegisterUpliftCombinations.isAllocationOverlapping() believes i/j/k variables overlaps insode plot() diff --git a/src/test/ref/parse-negated-struct-ref.log b/src/test/ref/parse-negated-struct-ref.log index 93c8afa00..06134e64f 100644 --- a/src/test/ref/parse-negated-struct-ref.log +++ b/src/test/ref/parse-negated-struct-ref.log @@ -158,7 +158,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ aa_b#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test parsing a negated struct reference - which causes problems with the ASMREL labels !a++ // https://gitlab.com/camelot/kickc/issues/266 diff --git a/src/test/ref/plasma-center.log b/src/test/ref/plasma-center.log index 22c1c7a19..de9708aec 100644 --- a/src/test/ref/plasma-center.log +++ b/src/test/ref/plasma-center.log @@ -5310,7 +5310,7 @@ Allocated zp ZP_BYTE:155 [ init_squares::$4 ] Allocated zp ZP_WORD:156 [ malloc::mem#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Plasma based on the distance/angle to the screen center // Upstart diff --git a/src/test/ref/platform-asm6502.log b/src/test/ref/platform-asm6502.log index a7133f6d4..418b1909f 100644 --- a/src/test/ref/platform-asm6502.log +++ b/src/test/ref/platform-asm6502.log @@ -128,7 +128,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is asm6502 +Target platform is asm6502 / 6502X // File Comments // Tests the target platform ASM6502 // Upstart diff --git a/src/test/ref/platform-asm6502_segments.asm b/src/test/ref/platform-asm6502_segments.asm deleted file mode 100644 index 4aba1c8c6..000000000 --- a/src/test/ref/platform-asm6502_segments.asm +++ /dev/null @@ -1,20 +0,0 @@ -// Tests the target platform ASM6502_SEGMENTS -.file [ name="platform-asm6502_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Code,Data" ] -.segmentdef Code [ start=$2000 ] -.segmentdef Data [ startAfter="Code" ] -.segment Code -main: { - ldx #0 - b1: - cpx #$a - bcc b2 - rts - b2: - txa - sta TABLE,x - inx - jmp b1 -} -.segment Data - TABLE: .fill $a, 0 diff --git a/src/test/ref/platform-asm6502_segments.cfg b/src/test/ref/platform-asm6502_segments.cfg deleted file mode 100644 index 6d2b8eabe..000000000 --- a/src/test/ref/platform-asm6502_segments.cfg +++ /dev/null @@ -1,23 +0,0 @@ -@begin: scope:[] from - [0] phi() - to:@1 -@1: scope:[] from @begin - [1] phi() - [2] call main - to:@end -@end: scope:[] from @1 - [3] phi() -main: scope:[main] from @1 - [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [7] return - to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/platform-asm6502_segments.log b/src/test/ref/platform-asm6502_segments.log deleted file mode 100644 index 50c87f56a..000000000 --- a/src/test/ref/platform-asm6502_segments.log +++ /dev/null @@ -1,350 +0,0 @@ -Culled Empty Block (label) main::@4 -Culled Empty Block (label) main::@3 -Culled Empty Block (label) main::@5 -Culled Empty Block (label) main::@6 - -CONTROL FLOW GRAPH SSA -@begin: scope:[] from - (byte[$a]) TABLE#0 ← { fill( $a, 0) } - to:@1 -main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 - to:main::@1 -main::@1: scope:[main] from main main::@2 - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (bool~) main::$0 ← (byte) main::i#2 < (number) $a - if((bool~) main::$0) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 ) - *((byte[$a]) TABLE#0 + (byte) main::i#3) ← (byte) main::i#3 - (byte) main::i#1 ← ++ (byte) main::i#3 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main - to:@2 -@2: scope:[] from @1 - to:@end -@end: scope:[] from @2 - -SYMBOL TABLE SSA -(label) @1 -(label) @2 -(label) @begin -(label) @end -(byte[$a]) TABLE -(byte[$a]) TABLE#0 -(void()) main() -(bool~) main::$0 -(label) main::@1 -(label) main::@2 -(label) main::@return -(byte) main::i -(byte) main::i#0 -(byte) main::i#1 -(byte) main::i#2 -(byte) main::i#3 - -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) $a in (bool~) main::$0 ← (byte) main::i#2 < (number) $a -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast $a -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $a -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias (byte) main::i#2 = (byte) main::i#3 -Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) main::$0 [4] if((byte) main::i#2<(byte) $a) goto main::@2 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [0] (byte[$a]) TABLE#0 ← { fill( $a, 0) } -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte[$a]) TABLE#0 = { fill( $a, 0) } -Constant (const byte) main::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with var siblings (const byte) main::i#0 -Constant inlined main::i#0 = (byte) 0 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @1 -Adding NOP phi() at start of @2 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main -CALL GRAPH -Calls in [] to main:2 - -Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block (label) @2 -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @1 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH -@begin: scope:[] from - [0] phi() - to:@1 -@1: scope:[] from @begin - [1] phi() - [2] call main - to:@end -@end: scope:[] from @1 - [3] phi() -main: scope:[main] from @1 - [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [7] return - to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 - - -VARIABLE REGISTER WEIGHTS -(byte[$a]) TABLE -(void()) main() -(byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 - -Initial phi equivalence classes -[ main::i#2 main::i#1 ] -Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] - -INITIAL ASM -Target platform is asm6502_segments - // File Comments -// Tests the target platform ASM6502_SEGMENTS - // Upstart -.file [ name="platform-asm6502_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Code,Data" ] -.segmentdef Code [ start=$2000 ] -.segmentdef Data [ startAfter="Code" ] -.segment Code - // Global Constants & labels - // @begin -bbegin: - // [1] phi from @begin to @1 [phi:@begin->@1] -b1_from_bbegin: - jmp b1 - // @1 -b1: - // [2] call main - // [4] phi from @1 to main [phi:@1->main] -main_from_b1: - jsr main - // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: - jmp bend - // @end -bend: - // main -main: { - .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts - // main::@2 - b2: - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 - ldy.z i - tya - sta TABLE,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 -} - // File Data -.segment Data - TABLE: .fill $a, 0 - -REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplift Scope [] - -Uplifting [main] best 263 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 263 combination - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Tests the target platform ASM6502_SEGMENTS - // Upstart -.file [ name="platform-asm6502_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Code,Data" ] -.segmentdef Code [ start=$2000 ] -.segmentdef Data [ startAfter="Code" ] -.segment Code - // Global Constants & labels - // @begin -bbegin: - // [1] phi from @begin to @1 [phi:@begin->@1] -b1_from_bbegin: - jmp b1 - // @1 -b1: - // [2] call main - // [4] phi from @1 to main [phi:@1->main] -main_from_b1: - jsr main - // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: - jmp bend - // @end -bend: - // main -main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts - // main::@2 - b2: - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta TABLE,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 -} - // File Data -.segment Data - TABLE: .fill $a, 0 - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp b1 -Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b1_from_bbegin: -Removing instruction b1: -Removing instruction main_from_b1: -Removing instruction bend_from_b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction bbegin: -Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction breturn: -Removing instruction b1_from_b2: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jsr main -Succesful ASM optimization Pass5SkipBegin - -FINAL SYMBOL TABLE -(label) @1 -(label) @begin -(label) @end -(byte[$a]) TABLE -(const byte[$a]) TABLE#0 TABLE = { fill( $a, 0) } -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@return -(byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 - -reg byte x [ main::i#2 main::i#1 ] - - -FINAL ASSEMBLER -Score: 191 - - // File Comments -// Tests the target platform ASM6502_SEGMENTS - // Upstart -.file [ name="platform-asm6502_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Code,Data" ] -.segmentdef Code [ start=$2000 ] -.segmentdef Data [ startAfter="Code" ] -.segment Code - // Global Constants & labels - // @begin - // [1] phi from @begin to @1 [phi:@begin->@1] - // @1 - // [2] call main - // [4] phi from @1 to main [phi:@1->main] - // [3] phi from @1 to @end [phi:@1->@end] - // @end - // main -main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 - // main::@1 - b1: - // for(char i=0;i<10;i++) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - // main::@return - // } - // [7] return - rts - // main::@2 - b2: - // TABLE[i] = i - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta TABLE,x - // for(char i=0;i<10;i++) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 -} - // File Data -.segment Data - TABLE: .fill $a, 0 - diff --git a/src/test/ref/platform-asm6502_segments.sym b/src/test/ref/platform-asm6502_segments.sym deleted file mode 100644 index db2f574bf..000000000 --- a/src/test/ref/platform-asm6502_segments.sym +++ /dev/null @@ -1,14 +0,0 @@ -(label) @1 -(label) @begin -(label) @end -(byte[$a]) TABLE -(const byte[$a]) TABLE#0 TABLE = { fill( $a, 0) } -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@return -(byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 - -reg byte x [ main::i#2 main::i#1 ] diff --git a/src/test/ref/platform-c64basic_segments.asm b/src/test/ref/platform-c64basic_segments.asm deleted file mode 100644 index 06f208794..000000000 --- a/src/test/ref/platform-c64basic_segments.asm +++ /dev/null @@ -1,23 +0,0 @@ -// Tests the target platform C64BASIC_SEGMENTS -.file [ name="platform-c64basic_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Basic,Code,Data" ] -.segmentdef Basic [ start=$0801 ] -.segmentdef Code [ start=$80d ] -.segmentdef Data [ startAfter="Code" ] -.segment Basic -:BasicUpstart(main) -.segment Code -main: { - ldx #0 - b1: - cpx #$a - bcc b2 - rts - b2: - txa - sta TABLE,x - inx - jmp b1 -} -.segment Data - TABLE: .fill $a, 0 diff --git a/src/test/ref/platform-c64basic_segments.cfg b/src/test/ref/platform-c64basic_segments.cfg deleted file mode 100644 index 6d2b8eabe..000000000 --- a/src/test/ref/platform-c64basic_segments.cfg +++ /dev/null @@ -1,23 +0,0 @@ -@begin: scope:[] from - [0] phi() - to:@1 -@1: scope:[] from @begin - [1] phi() - [2] call main - to:@end -@end: scope:[] from @1 - [3] phi() -main: scope:[main] from @1 - [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [7] return - to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 diff --git a/src/test/ref/platform-c64basic_segments.log b/src/test/ref/platform-c64basic_segments.log deleted file mode 100644 index e432a8335..000000000 --- a/src/test/ref/platform-c64basic_segments.log +++ /dev/null @@ -1,361 +0,0 @@ -Culled Empty Block (label) main::@4 -Culled Empty Block (label) main::@3 -Culled Empty Block (label) main::@5 -Culled Empty Block (label) main::@6 - -CONTROL FLOW GRAPH SSA -@begin: scope:[] from - (byte[$a]) TABLE#0 ← { fill( $a, 0) } - to:@1 -main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 - to:main::@1 -main::@1: scope:[main] from main main::@2 - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (bool~) main::$0 ← (byte) main::i#2 < (number) $a - if((bool~) main::$0) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 ) - *((byte[$a]) TABLE#0 + (byte) main::i#3) ← (byte) main::i#3 - (byte) main::i#1 ← ++ (byte) main::i#3 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main - to:@2 -@2: scope:[] from @1 - to:@end -@end: scope:[] from @2 - -SYMBOL TABLE SSA -(label) @1 -(label) @2 -(label) @begin -(label) @end -(byte[$a]) TABLE -(byte[$a]) TABLE#0 -(void()) main() -(bool~) main::$0 -(label) main::@1 -(label) main::@2 -(label) main::@return -(byte) main::i -(byte) main::i#0 -(byte) main::i#1 -(byte) main::i#2 -(byte) main::i#3 - -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) $a in (bool~) main::$0 ← (byte) main::i#2 < (number) $a -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast $a -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $a -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias (byte) main::i#2 = (byte) main::i#3 -Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) main::$0 [4] if((byte) main::i#2<(byte) $a) goto main::@2 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [0] (byte[$a]) TABLE#0 ← { fill( $a, 0) } -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte[$a]) TABLE#0 = { fill( $a, 0) } -Constant (const byte) main::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with var siblings (const byte) main::i#0 -Constant inlined main::i#0 = (byte) 0 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @1 -Adding NOP phi() at start of @2 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main -CALL GRAPH -Calls in [] to main:2 - -Created 1 initial phi equivalence classes -Coalesced [11] main::i#4 ← main::i#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block (label) @2 -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @1 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH -@begin: scope:[] from - [0] phi() - to:@1 -@1: scope:[] from @begin - [1] phi() - [2] call main - to:@end -@end: scope:[] from @1 - [3] phi() -main: scope:[main] from @1 - [4] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@2/(byte) main::i#1 ) - [6] if((byte) main::i#2<(byte) $a) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [7] return - to:@return -main::@2: scope:[main] from main::@1 - [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 - [9] (byte) main::i#1 ← ++ (byte) main::i#2 - to:main::@1 - - -VARIABLE REGISTER WEIGHTS -(byte[$a]) TABLE -(void()) main() -(byte) main::i -(byte) main::i#1 22.0 -(byte) main::i#2 18.333333333333332 - -Initial phi equivalence classes -[ main::i#2 main::i#1 ] -Complete equivalence classes -[ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] - -INITIAL ASM -Target platform is c64basic_segments - // File Comments -// Tests the target platform C64BASIC_SEGMENTS - // Upstart -.file [ name="platform-c64basic_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Basic,Code,Data" ] -.segmentdef Basic [ start=$0801 ] -.segmentdef Code [ start=$80d ] -.segmentdef Data [ startAfter="Code" ] -.segment Basic -:BasicUpstart(bbegin) -.segment Code - // Global Constants & labels - // @begin -bbegin: - // [1] phi from @begin to @1 [phi:@begin->@1] -b1_from_bbegin: - jmp b1 - // @1 -b1: - // [2] call main - // [4] phi from @1 to main [phi:@1->main] -main_from_b1: - jsr main - // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: - jmp bend - // @end -bend: - // main -main: { - .label i = 2 - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts - // main::@2 - b2: - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz1 - ldy.z i - tya - sta TABLE,y - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 -} - // File Data -.segment Data - TABLE: .fill $a, 0 - -REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [main] 40.33: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplift Scope [] - -Uplifting [main] best 263 combination reg byte x [ main::i#2 main::i#1 ] -Uplifting [] best 263 combination - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Tests the target platform C64BASIC_SEGMENTS - // Upstart -.file [ name="platform-c64basic_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Basic,Code,Data" ] -.segmentdef Basic [ start=$0801 ] -.segmentdef Code [ start=$80d ] -.segmentdef Data [ startAfter="Code" ] -.segment Basic -:BasicUpstart(bbegin) -.segment Code - // Global Constants & labels - // @begin -bbegin: - // [1] phi from @begin to @1 [phi:@begin->@1] -b1_from_bbegin: - jmp b1 - // @1 -b1: - // [2] call main - // [4] phi from @1 to main [phi:@1->main] -main_from_b1: - jsr main - // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: - jmp bend - // @end -bend: - // main -main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp b1 - // main::@1 - b1: - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - jmp breturn - // main::@return - breturn: - // [7] return - rts - // main::@2 - b2: - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta TABLE,x - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 -} - // File Data -.segment Data - TABLE: .fill $a, 0 - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp b1 -Removing instruction jmp bend -Removing instruction jmp b1 -Removing instruction jmp breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b1_from_bbegin: -Removing instruction b1: -Removing instruction main_from_b1: -Removing instruction bend_from_b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction breturn: -Removing instruction b1_from_b2: -Succesful ASM optimization Pass5UnusedLabelElimination -Updating BasicUpstart to call main directly -Removing instruction jsr main -Succesful ASM optimization Pass5SkipBegin -Removing instruction bbegin: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -(label) @1 -(label) @begin -(label) @end -(byte[$a]) TABLE -(const byte[$a]) TABLE#0 TABLE = { fill( $a, 0) } -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@return -(byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 - -reg byte x [ main::i#2 main::i#1 ] - - -FINAL ASSEMBLER -Score: 191 - - // File Comments -// Tests the target platform C64BASIC_SEGMENTS - // Upstart -.file [ name="platform-c64basic_segments.prg",type="prg",segments="Program" ] -.segmentdef Program [ segments="Basic,Code,Data" ] -.segmentdef Basic [ start=$0801 ] -.segmentdef Code [ start=$80d ] -.segmentdef Data [ startAfter="Code" ] -.segment Basic -:BasicUpstart(main) -.segment Code - // Global Constants & labels - // @begin - // [1] phi from @begin to @1 [phi:@begin->@1] - // @1 - // [2] call main - // [4] phi from @1 to main [phi:@1->main] - // [3] phi from @1 to @end [phi:@1->@end] - // @end - // main -main: { - // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 - // main::@1 - b1: - // for(char i=0;i<10;i++) - // [6] if((byte) main::i#2<(byte) $a) goto main::@2 -- vbuxx_lt_vbuc1_then_la1 - cpx #$a - bcc b2 - // main::@return - // } - // [7] return - rts - // main::@2 - b2: - // TABLE[i] = i - // [8] *((const byte[$a]) TABLE#0 + (byte) main::i#2) ← (byte) main::i#2 -- pbuc1_derefidx_vbuxx=vbuxx - txa - sta TABLE,x - // for(char i=0;i<10;i++) - // [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx - inx - // [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 -} - // File Data -.segment Data - TABLE: .fill $a, 0 - diff --git a/src/test/ref/platform-c64basic_segments.sym b/src/test/ref/platform-c64basic_segments.sym deleted file mode 100644 index db2f574bf..000000000 --- a/src/test/ref/platform-c64basic_segments.sym +++ /dev/null @@ -1,14 +0,0 @@ -(label) @1 -(label) @begin -(label) @end -(byte[$a]) TABLE -(const byte[$a]) TABLE#0 TABLE = { fill( $a, 0) } -(void()) main() -(label) main::@1 -(label) main::@2 -(label) main::@return -(byte) main::i -(byte) main::i#1 reg byte x 22.0 -(byte) main::i#2 reg byte x 18.333333333333332 - -reg byte x [ main::i#2 main::i#1 ] diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index d16f1ee4a..693860182 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -345,7 +345,7 @@ Allocated zp ZP_WORD:6 [ fill::$5 ] Allocated zp ZP_WORD:8 [ fill::$7 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests elimination of plus 0 // Upstart diff --git a/src/test/ref/pointer-anding.log b/src/test/ref/pointer-anding.log index 86c7294fd..da1c0c5b5 100644 --- a/src/test/ref/pointer-anding.log +++ b/src/test/ref/pointer-anding.log @@ -198,7 +198,7 @@ Allocated zp ZP_WORD:10 [ main::vram_ptr#1 ] Allocated zp ZP_BYTE:12 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test binary ANDing pointers by Clay Cowgill // Upstart diff --git a/src/test/ref/pointer-cast-2.log b/src/test/ref/pointer-cast-2.log index fbc638bdb..7b7eda01a 100644 --- a/src/test/ref/pointer-cast-2.log +++ b/src/test/ref/pointer-cast-2.log @@ -160,7 +160,7 @@ Allocated zp ZP_BYTE:2 [ main::ub#0 ] Allocated zp ZP_BYTE:3 [ main::sb#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests casting pointer types to other pointer types // Upstart diff --git a/src/test/ref/pointer-cast-3.log b/src/test/ref/pointer-cast-3.log index ff75af669..caaf02b7e 100644 --- a/src/test/ref/pointer-cast-3.log +++ b/src/test/ref/pointer-cast-3.log @@ -83,7 +83,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests casting pointer types to other pointer types // Upstart diff --git a/src/test/ref/pointer-cast-4.log b/src/test/ref/pointer-cast-4.log index 62a7ad636..9382d8705 100644 --- a/src/test/ref/pointer-cast-4.log +++ b/src/test/ref/pointer-cast-4.log @@ -152,7 +152,7 @@ Allocated zp ZP_WORD:3 [ main::$1 ] Allocated zp ZP_BYTE:5 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests casting pointer types to other pointer types does not produce any ASM code // Upstart diff --git a/src/test/ref/pointer-cast.log b/src/test/ref/pointer-cast.log index ba0421ccd..313374780 100644 --- a/src/test/ref/pointer-cast.log +++ b/src/test/ref/pointer-cast.log @@ -435,7 +435,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests casting pointer types to other pointer types // Upstart diff --git a/src/test/ref/pointer-plus-0.log b/src/test/ref/pointer-plus-0.log index 912d37821..07fa8b6d1 100644 --- a/src/test/ref/pointer-plus-0.log +++ b/src/test/ref/pointer-plus-0.log @@ -229,7 +229,7 @@ Allocated zp ZP_WORD:8 [ first::return#1 ] Allocated zp ZP_WORD:10 [ main::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests pointer plus 0 elimination // Upstart diff --git a/src/test/ref/pointer-plus-signed-word.log b/src/test/ref/pointer-plus-signed-word.log index 0fc9dd797..23a4478b1 100644 --- a/src/test/ref/pointer-plus-signed-word.log +++ b/src/test/ref/pointer-plus-signed-word.log @@ -139,7 +139,7 @@ Allocated zp ZP_WORD:4 [ main::sc#0 ] Allocated zp ZP_BYTE:6 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test adding a signed word to a pointer // Fragment pbuz1=pbuc1_plus_vwsz1.asm supplied by Richard-William Loerakker diff --git a/src/test/ref/pointer-pointer-1.log b/src/test/ref/pointer-pointer-1.log index b9eff724b..f5ec54d71 100644 --- a/src/test/ref/pointer-pointer-1.log +++ b/src/test/ref/pointer-pointer-1.log @@ -109,7 +109,7 @@ Allocated zp ZP_BYTE:2 [ main::b#0 ] Allocated zp ZP_WORD:3 [ main::pb#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a simple pointer to a pointer // Upstart diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index 07f98ea6f..36cbf7150 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -381,7 +381,7 @@ Allocated zp ZP_BYTE:7 [ main::i#5 main::i#1 ] Allocated zp ZP_BYTE:8 [ nexttext::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests pointer to pointer in a more complex setup // Upstart diff --git a/src/test/ref/pointer-pointer-3.log b/src/test/ref/pointer-pointer-3.log index 69806e8b2..d2320596c 100644 --- a/src/test/ref/pointer-pointer-3.log +++ b/src/test/ref/pointer-pointer-3.log @@ -197,7 +197,7 @@ Allocated zp ZP_WORD:2 [ setscreen::val#2 ] Allocated zp ZP_WORD:4 [ screen#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests pointer to pointer in a more complex setup // Upstart diff --git a/src/test/ref/pointer-void-0.log b/src/test/ref/pointer-void-0.log index 1890a4065..6e873abdd 100644 --- a/src/test/ref/pointer-void-0.log +++ b/src/test/ref/pointer-void-0.log @@ -116,7 +116,7 @@ Complete equivalence classes Allocated zp ZP_WORD:2 [ main::w#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test simple void pointer (conversion without casting) // Upstart diff --git a/src/test/ref/pointer-void-1.log b/src/test/ref/pointer-void-1.log index 14aeb7925..51d578f8d 100644 --- a/src/test/ref/pointer-void-1.log +++ b/src/test/ref/pointer-void-1.log @@ -301,7 +301,7 @@ Allocated zp ZP_WORD:9 [ main::w#0 ] Allocated zp ZP_BYTE:11 [ main::b#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test simple void pointer - void pointer function // Upstart diff --git a/src/test/ref/pointer-void-2.log b/src/test/ref/pointer-void-2.log index 09796b182..b89ae97ce 100644 --- a/src/test/ref/pointer-void-2.log +++ b/src/test/ref/pointer-void-2.log @@ -282,7 +282,7 @@ Allocated zp ZP_WORD:9 [ main::w#0 ] Allocated zp ZP_BYTE:11 [ main::b#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test simple void pointer - void pointer function // Upstart diff --git a/src/test/ref/pointer-void-3.log b/src/test/ref/pointer-void-3.log index 1613f1253..ac038dd04 100644 --- a/src/test/ref/pointer-void-3.log +++ b/src/test/ref/pointer-void-3.log @@ -250,7 +250,7 @@ Allocated zp ZP_WORD:10 [ main::buf2#0 ] Allocated zp ZP_WORD:12 [ malloc::return#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test void pointer - issues when assigning returns from malloc() // Upstart diff --git a/src/test/ref/print-problem.log b/src/test/ref/print-problem.log index 3b87ca12f..3a46edfb5 100644 --- a/src/test/ref/print-problem.log +++ b/src/test/ref/print-problem.log @@ -254,7 +254,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ line#12 line#13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/printmsg.log b/src/test/ref/printmsg.log index b19e1e8a4..f015497a1 100644 --- a/src/test/ref/printmsg.log +++ b/src/test/ref/printmsg.log @@ -496,7 +496,7 @@ Allocated zp ZP_WORD:4 [ print_str::str#4 print_str::str#6 print_str::str#0 ] Allocated zp ZP_WORD:6 [ print_char_cursor#13 print_char_cursor#29 print_char_cursor#31 print_char_cursor#32 print_char_cursor#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/problem-negative-word-const.log b/src/test/ref/problem-negative-word-const.log index 10825cdc9..f34332c0c 100644 --- a/src/test/ref/problem-negative-word-const.log +++ b/src/test/ref/problem-negative-word-const.log @@ -204,7 +204,7 @@ Allocated zp ZP_BYTE:5 [ main::$0 ] Allocated zp ZP_BYTE:6 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Problem with assigning negative word constant (vwuz1=vbuc1) // Upstart diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index e8657d9ef..e76396a4f 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -2530,7 +2530,7 @@ Allocated zp ZP_BYTE:15 [ print_byte::$0 ] Allocated zp ZP_BYTE:16 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test the functionality of the C64 processor port ($00/$01) // Tests by setting the value of the processor port - and then printing out values of $00/$01/$a000/$d000/$e000 diff --git a/src/test/ref/ptr-complex.log b/src/test/ref/ptr-complex.log index a95b26589..aa02f9327 100644 --- a/src/test/ref/ptr-complex.log +++ b/src/test/ref/ptr-complex.log @@ -277,7 +277,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test some complex pointers // Upstart diff --git a/src/test/ref/ptrptr-optimize-0.log b/src/test/ref/ptrptr-optimize-0.log index c211c8189..2923ece18 100644 --- a/src/test/ref/ptrptr-optimize-0.log +++ b/src/test/ref/ptrptr-optimize-0.log @@ -91,7 +91,7 @@ Complete equivalence classes Allocated zp ZP_WORD:2 [ main::screen#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimization of constant pointers to pointers // Upstart diff --git a/src/test/ref/ptrptr-optimize-1.log b/src/test/ref/ptrptr-optimize-1.log index 741a46358..4233f0194 100644 --- a/src/test/ref/ptrptr-optimize-1.log +++ b/src/test/ref/ptrptr-optimize-1.log @@ -161,7 +161,7 @@ Allocated zp ZP_BYTE:2 [ sub::ch#2 ] Allocated zp ZP_WORD:3 [ main::screen#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimization of constant pointers to pointers // Upstart diff --git a/src/test/ref/ptrptr-optimize-2.log b/src/test/ref/ptrptr-optimize-2.log index 58be39969..e5a02c01a 100644 --- a/src/test/ref/ptrptr-optimize-2.log +++ b/src/test/ref/ptrptr-optimize-2.log @@ -161,7 +161,7 @@ Allocated zp ZP_BYTE:2 [ sub::ch#2 ] Allocated zp ZP_WORD:3 [ main::screen#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests (non-)optimization of constant pointers to pointers // The two examples of &screen is not detected as identical leading to ASM that could be optimized more diff --git a/src/test/ref/ptrtest.log b/src/test/ref/ptrtest.log index 7c42aa6f5..3fc7a6189 100644 --- a/src/test/ref/ptrtest.log +++ b/src/test/ref/ptrtest.log @@ -541,7 +541,7 @@ Allocated zp ZP_BYTE:10 [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] Allocated zp ZP_BYTE:11 [ lvalue::i#2 lvalue::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test all types of pointers // Upstart diff --git a/src/test/ref/ptrtestmin.log b/src/test/ref/ptrtestmin.log index 88cef3a17..7532dfbd3 100644 --- a/src/test/ref/ptrtestmin.log +++ b/src/test/ref/ptrtestmin.log @@ -164,7 +164,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::b#2 main::b#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test all types of pointers // Upstart diff --git a/src/test/ref/reserve-zp-global.log b/src/test/ref/reserve-zp-global.log index 038639d0d..104eaa8d6 100644 --- a/src/test/ref/reserve-zp-global.log +++ b/src/test/ref/reserve-zp-global.log @@ -188,7 +188,7 @@ Allocated zp ZP_BYTE:8 [ main::$0 ] Allocated zp ZP_BYTE:9 [ sub1::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates global directive reserving addresses on zeropage // Upstart diff --git a/src/test/ref/reserve-zp-procedure-1.log b/src/test/ref/reserve-zp-procedure-1.log index 38ce22b61..69a6e30d7 100644 --- a/src/test/ref/reserve-zp-procedure-1.log +++ b/src/test/ref/reserve-zp-procedure-1.log @@ -188,7 +188,7 @@ Allocated zp ZP_BYTE:8 [ main::$0 ] Allocated zp ZP_BYTE:9 [ sub1::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates a procedure reserving addresses on zeropage // Upstart diff --git a/src/test/ref/reserve-zp-procedure-2.log b/src/test/ref/reserve-zp-procedure-2.log index a9c9805ae..ffd5cf243 100644 --- a/src/test/ref/reserve-zp-procedure-2.log +++ b/src/test/ref/reserve-zp-procedure-2.log @@ -280,7 +280,7 @@ Allocated zp ZP_BYTE:16 [ sub2::return#1 ] Allocated zp ZP_BYTE:17 [ sub1::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates a procedure reserving addresses on zeropage // Upstart diff --git a/src/test/ref/reserve-zp-procedure-3.log b/src/test/ref/reserve-zp-procedure-3.log index 4226f0d6b..ca961d117 100644 --- a/src/test/ref/reserve-zp-procedure-3.log +++ b/src/test/ref/reserve-zp-procedure-3.log @@ -189,7 +189,7 @@ Allocated zp ZP_BYTE:8 [ main::$0 ] Allocated zp ZP_BYTE:9 [ sub1::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates a procedure reserving addresses on zeropage // Upstart diff --git a/src/test/ref/robozzle64-label-problem.log b/src/test/ref/robozzle64-label-problem.log index 30b243473..bd9e62621 100644 --- a/src/test/ref/robozzle64-label-problem.log +++ b/src/test/ref/robozzle64-label-problem.log @@ -446,7 +446,7 @@ Allocated zp ZP_WORD:16 [ main::z2#0 ] Allocated zp ZP_BYTE:18 [ mul8u::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index 3cf94ce76..690deac0a 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -332,7 +332,7 @@ Allocated zp ZP_BYTE:11 [ position_sprite::$5 ] Allocated zp ZP_BYTE:12 [ position_sprite::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests rolling sprite MSB by variable amount // Upstart diff --git a/src/test/ref/roll-variable.log b/src/test/ref/roll-variable.log index d605185ba..6afb90f93 100644 --- a/src/test/ref/roll-variable.log +++ b/src/test/ref/roll-variable.log @@ -132,7 +132,7 @@ Allocated zp ZP_BYTE:2 [ main::b#2 main::b#1 ] Allocated zp ZP_BYTE:3 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Rolling constants by a variable amount // Upstart diff --git a/src/test/ref/runtime-unused-procedure.log b/src/test/ref/runtime-unused-procedure.log index 44714335f..9d35e161c 100644 --- a/src/test/ref/runtime-unused-procedure.log +++ b/src/test/ref/runtime-unused-procedure.log @@ -155,7 +155,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that a procedure that is never called, but requires static analysis is correctly eliminated // Upstart diff --git a/src/test/ref/sandbox-ternary-error.log b/src/test/ref/sandbox-ternary-error.log index 8a4e1cbd7..992b909b1 100644 --- a/src/test/ref/sandbox-ternary-error.log +++ b/src/test/ref/sandbox-ternary-error.log @@ -221,7 +221,7 @@ Allocated zp ZP_BYTE:2 [ main::b#2 main::b#1 ] Allocated zp ZP_BYTE:3 [ main::$7 main::$5 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates error with nested ternary operator // Upstart diff --git a/src/test/ref/sandbox.log b/src/test/ref/sandbox.log index bc1942f09..2c92b2e23 100644 --- a/src/test/ref/sandbox.log +++ b/src/test/ref/sandbox.log @@ -4426,7 +4426,7 @@ Allocated zp ZP_WORD:109 [ div10::val#3 ] Allocated zp ZP_WORD:111 [ div10::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index 15847fe5e..d2b0d4938 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -1391,7 +1391,7 @@ Allocated zp ZP_BYTE:46 [ mul8u::$1 ] Allocated zp ZP_WORD:47 [ memset::end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates a problem with a missing fragment - pbuc1_derefidx_vwuz1=vbuz2 // Upstart diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index 0b329456b..8f4a44d3d 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -2736,7 +2736,7 @@ Allocated zp ZP_BYTE:90 [ init_font_hex::$2 ] Allocated zp ZP_BYTE:91 [ init_font_hex::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Calculate the angle to the center of the screen - and show it using font-hex // 4.65 million cycles diff --git a/src/test/ref/screen-center-distance.log b/src/test/ref/screen-center-distance.log index a1f2b3438..3c001ba85 100644 --- a/src/test/ref/screen-center-distance.log +++ b/src/test/ref/screen-center-distance.log @@ -3230,7 +3230,7 @@ Allocated zp ZP_BYTE:104 [ init_font_hex::$2 ] Allocated zp ZP_BYTE:105 [ init_font_hex::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Calculate the distance to the center of the screen - and show it using font-hex // Upstart diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index 9f10bd2b0..656f16ae7 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -4485,7 +4485,7 @@ Allocated zp ZP_BYTE:172 [ init_squares::$3 ] Allocated zp ZP_BYTE:173 [ init_squares::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Fill screen using a spiral based on distance-to-center / angle-to-center // Utilizes a bucket sort for identifying the minimum angle/distance diff --git a/src/test/ref/screen-show-spiral.log b/src/test/ref/screen-show-spiral.log index 79c809e4b..87656d77b 100644 --- a/src/test/ref/screen-show-spiral.log +++ b/src/test/ref/screen-show-spiral.log @@ -3518,7 +3518,7 @@ Allocated zp ZP_BYTE:125 [ init_squares::$4 ] Allocated zp ZP_WORD:126 [ malloc::mem#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Fill screen using a spiral based on distance-to-center / angle-to-center // Upstart diff --git a/src/test/ref/scroll-clobber.log b/src/test/ref/scroll-clobber.log index 038315d6c..ddee6f9ad 100644 --- a/src/test/ref/scroll-clobber.log +++ b/src/test/ref/scroll-clobber.log @@ -200,7 +200,7 @@ Allocated zp ZP_BYTE:3 [ main::c#2 main::c#0 main::c#1 ] Allocated zp ZP_WORD:4 [ main::nxt#4 main::nxt#3 main::nxt#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/scrollbig-clobber.log b/src/test/ref/scrollbig-clobber.log index aae67084e..9ca9bcb37 100644 --- a/src/test/ref/scrollbig-clobber.log +++ b/src/test/ref/scrollbig-clobber.log @@ -288,7 +288,7 @@ Allocated zp ZP_BYTE:6 [ next_char::return#0 ] Allocated zp ZP_BYTE:7 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Clobber problem in next_char return value // Upstart diff --git a/src/test/ref/semi-struct-1.log b/src/test/ref/semi-struct-1.log index 7ca4d3900..363e1e671 100644 --- a/src/test/ref/semi-struct-1.log +++ b/src/test/ref/semi-struct-1.log @@ -1574,7 +1574,7 @@ Allocated zp ZP_WORD:21 [ init_points::getPoint1_return#0 ] Allocated zp ZP_BYTE:23 [ init_points::pos#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Implementing a semi-struct without the struct keyword by using pointer math and inline functions // diff --git a/src/test/ref/semi-struct-2.log b/src/test/ref/semi-struct-2.log index df5e7cd4f..170b82da7 100644 --- a/src/test/ref/semi-struct-2.log +++ b/src/test/ref/semi-struct-2.log @@ -5272,7 +5272,7 @@ Allocated zp ZP_BYTE:65 [ initEntry::$25 ] Allocated zp ZP_BYTE:66 [ mul8u::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Implementing a semi-struct without the struct keyword by using pointer math and inline functions // diff --git a/src/test/ref/sequence-locality-0.log b/src/test/ref/sequence-locality-0.log index ae92afe70..14a96cf8a 100644 --- a/src/test/ref/sequence-locality-0.log +++ b/src/test/ref/sequence-locality-0.log @@ -211,7 +211,7 @@ Allocated zp ZP_BYTE:3 [ main::idx#3 main::idx#6 main::idx#1 main::idx#2 ] Allocated zp ZP_BYTE:4 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } // Upstart diff --git a/src/test/ref/sequence-locality-1.log b/src/test/ref/sequence-locality-1.log index 87c267cf6..fafe2a843 100644 --- a/src/test/ref/sequence-locality-1.log +++ b/src/test/ref/sequence-locality-1.log @@ -209,7 +209,7 @@ Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] Allocated zp ZP_BYTE:4 [ main::j#2 main::j#4 main::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests statement sequence locality of if(cond) { stmt1; } else { stmt2; } // Upstart diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index e4f761943..42a2b2134 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -1045,7 +1045,7 @@ Allocated zp ZP_BYTE:22 [ print_byte::$0 ] Allocated zp ZP_BYTE:23 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index 68d21ba53..8cc0b47ce 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -4260,7 +4260,7 @@ Allocated zp ZP_DWORD:134 [ clock::return#0 ] Allocated zp ZP_WORD:138 [ memset::end#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/signed-bytes.log b/src/test/ref/signed-bytes.log index 940db7768..17a05d950 100644 --- a/src/test/ref/signed-bytes.log +++ b/src/test/ref/signed-bytes.log @@ -160,7 +160,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index 88aecd281..68097b888 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -1209,7 +1209,7 @@ Allocated zp ZP_BYTE:20 [ print_byte::$2 ] Allocated zp ZP_BYTE:21 [ sub::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that signed indexed subtract works as intended // Upstart diff --git a/src/test/ref/signed-word-minus-byte-2.log b/src/test/ref/signed-word-minus-byte-2.log index 772fab414..ff29b71b0 100644 --- a/src/test/ref/signed-word-minus-byte-2.log +++ b/src/test/ref/signed-word-minus-byte-2.log @@ -165,7 +165,7 @@ Allocated zp ZP_BYTE:4 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:5 [ main::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests subtracting bytes from signed words // Upstart diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 910312bec..cd2e3b48b 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -970,7 +970,7 @@ Allocated zp ZP_BYTE:24 [ anim::$10 ] Allocated zp ZP_BYTE:25 [ anim::$11 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/simple-loop.log b/src/test/ref/simple-loop.log index 11d4c7215..4b9fec424 100644 --- a/src/test/ref/simple-loop.log +++ b/src/test/ref/simple-loop.log @@ -143,7 +143,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index ff9aaff11..1f1d7d945 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -1333,7 +1333,7 @@ Allocated zp ZP_BYTE:27 [ setMEMtoFAC::prepareMEM1_$0#0 ] Allocated zp ZP_BYTE:28 [ setMEMtoFAC::prepareMEM1_$1#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index 8f182ade3..08b4a87f9 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -2805,7 +2805,7 @@ Allocated zp ZP_BYTE:131 [ divr16u::$2 ] Allocated zp ZP_WORD:132 [ rem16u#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Generates a 16-bit signed sinus // Upstart diff --git a/src/test/ref/sinusgen16b.log b/src/test/ref/sinusgen16b.log index 47d6ba003..02fd0965e 100644 --- a/src/test/ref/sinusgen16b.log +++ b/src/test/ref/sinusgen16b.log @@ -3677,7 +3677,7 @@ Allocated zp ZP_WORD:186 [ sin16s::x5_128#0 ] Allocated zp ZP_WORD:188 [ sin16s::usinx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Generates a 16-bit signed sinus // Upstart diff --git a/src/test/ref/sinusgen8.log b/src/test/ref/sinusgen8.log index 73c3279a0..23a063e0a 100644 --- a/src/test/ref/sinusgen8.log +++ b/src/test/ref/sinusgen8.log @@ -2761,7 +2761,7 @@ Allocated zp ZP_BYTE:75 [ divr16u::$1 ] Allocated zp ZP_BYTE:76 [ divr16u::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/sinusgen8b.log b/src/test/ref/sinusgen8b.log index 746d746b7..b2c451f23 100644 --- a/src/test/ref/sinusgen8b.log +++ b/src/test/ref/sinusgen8b.log @@ -3945,7 +3945,7 @@ Allocated zp ZP_WORD:188 [ divr16u::return#2 ] Allocated zp ZP_WORD:190 [ div16u::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/sinusgenscale8.log b/src/test/ref/sinusgenscale8.log index 3c00f81e5..fce2fafc9 100644 --- a/src/test/ref/sinusgenscale8.log +++ b/src/test/ref/sinusgenscale8.log @@ -3817,7 +3817,7 @@ Allocated zp ZP_BYTE:90 [ divr16u::$1 ] Allocated zp ZP_BYTE:91 [ divr16u::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/sizeof-arrays.log b/src/test/ref/sizeof-arrays.log index 33dad4cbc..eb9514b66 100644 --- a/src/test/ref/sizeof-arrays.log +++ b/src/test/ref/sizeof-arrays.log @@ -354,7 +354,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the sizeof() operator on arrays // Upstart diff --git a/src/test/ref/sizeof-expr.log b/src/test/ref/sizeof-expr.log index d64990fbe..c9f0b4b99 100644 --- a/src/test/ref/sizeof-expr.log +++ b/src/test/ref/sizeof-expr.log @@ -318,7 +318,7 @@ Allocated zp ZP_BYTE:2 [ main::b#0 ] Allocated zp ZP_WORD:3 [ main::w#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the sizeof() operator on values/expressions // Upstart diff --git a/src/test/ref/sizeof-struct.log b/src/test/ref/sizeof-struct.log index dbdae7ad3..9c3eee8cf 100644 --- a/src/test/ref/sizeof-struct.log +++ b/src/test/ref/sizeof-struct.log @@ -350,7 +350,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the sizeof() operator on structs // Upstart diff --git a/src/test/ref/sizeof-types.log b/src/test/ref/sizeof-types.log index 5e8eda89e..5b75012a0 100644 --- a/src/test/ref/sizeof-types.log +++ b/src/test/ref/sizeof-types.log @@ -402,7 +402,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the sizeof() operator on types // Upstart diff --git a/src/test/ref/statement-sequence-1.log b/src/test/ref/statement-sequence-1.log index 856d955b0..0f1ad021b 100644 --- a/src/test/ref/statement-sequence-1.log +++ b/src/test/ref/statement-sequence-1.log @@ -217,7 +217,7 @@ Allocated zp ZP_BYTE:3 [ main::c#2 main::c#0 main::c#1 ] Allocated zp ZP_BYTE:4 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests statement sequence generation // Upstart diff --git a/src/test/ref/string-const-consolidation-noroot.log b/src/test/ref/string-const-consolidation-noroot.log index 9b160c4b3..8546d8716 100644 --- a/src/test/ref/string-const-consolidation-noroot.log +++ b/src/test/ref/string-const-consolidation-noroot.log @@ -264,7 +264,7 @@ Allocated zp ZP_WORD:2 [ screen#18 screen#12 screen#5 ] Allocated zp ZP_WORD:4 [ print::string#4 print::string#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that identical strings are consolidated // Upstart diff --git a/src/test/ref/string-const-consolidation.log b/src/test/ref/string-const-consolidation.log index 030922cb0..064da5add 100644 --- a/src/test/ref/string-const-consolidation.log +++ b/src/test/ref/string-const-consolidation.log @@ -264,7 +264,7 @@ Allocated zp ZP_WORD:2 [ screen#18 screen#12 screen#5 ] Allocated zp ZP_WORD:4 [ print::string#4 print::string#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that identical strings are consolidated // Upstart diff --git a/src/test/ref/string-encoding-literals.log b/src/test/ref/string-encoding-literals.log index f17a7c316..09413e0a5 100644 --- a/src/test/ref/string-encoding-literals.log +++ b/src/test/ref/string-encoding-literals.log @@ -227,7 +227,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test string encoding via literals // Upstart diff --git a/src/test/ref/string-encoding-pragma.log b/src/test/ref/string-encoding-pragma.log index f652702ec..243c098b0 100644 --- a/src/test/ref/string-encoding-pragma.log +++ b/src/test/ref/string-encoding-pragma.log @@ -212,7 +212,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test string encoding via literals // Upstart diff --git a/src/test/ref/string-escapes-0.log b/src/test/ref/string-escapes-0.log index 8962e57c2..f47e4d138 100644 --- a/src/test/ref/string-escapes-0.log +++ b/src/test/ref/string-escapes-0.log @@ -138,7 +138,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test using some simple supported string escapes \r \f \n \' \" // Upstart diff --git a/src/test/ref/string-escapes-1.log b/src/test/ref/string-escapes-1.log index 6e74f3c3e..0171f76f7 100644 --- a/src/test/ref/string-escapes-1.log +++ b/src/test/ref/string-escapes-1.log @@ -231,7 +231,7 @@ Allocated zp ZP_WORD:4 [ main::line#2 main::line#5 main::line#8 ] Allocated zp ZP_WORD:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::cursor#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test using some simple supported string escape \n in both string and char // Upstart diff --git a/src/test/ref/string-escapes-2.log b/src/test/ref/string-escapes-2.log index 333c3700d..6bd37f739 100644 --- a/src/test/ref/string-escapes-2.log +++ b/src/test/ref/string-escapes-2.log @@ -178,7 +178,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ chrout::c#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test using some simple supported string escape characters in PETSCII // Upstart diff --git a/src/test/ref/string-escapes-3.log b/src/test/ref/string-escapes-3.log index 1be4c17e7..401c84eed 100644 --- a/src/test/ref/string-escapes-3.log +++ b/src/test/ref/string-escapes-3.log @@ -243,7 +243,7 @@ Allocated zp ZP_WORD:6 [ main::cursor#3 main::cursor#6 main::cursor#1 main::curs Allocated zp ZP_BYTE:8 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test using some simple supported string escape \n in both string and char // Uses encoding PETSCII mixed diff --git a/src/test/ref/strip.log b/src/test/ref/strip.log index 35a507cd5..769309f6c 100644 --- a/src/test/ref/strip.log +++ b/src/test/ref/strip.log @@ -408,7 +408,7 @@ Allocated zp ZP_WORD:9 [ strip::dest#2 strip::dest#0 strip::dest#4 strip::dest#1 Allocated zp ZP_WORD:11 [ strip::p#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests of strip() function from https://news.ycombinator.com/item?id=12080871 // Upstart diff --git a/src/test/ref/struct-0.log b/src/test/ref/struct-0.log index 23d4719de..b201e8779 100644 --- a/src/test/ref/struct-0.log +++ b/src/test/ref/struct-0.log @@ -156,7 +156,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - declaration, instantiation and usage // Upstart diff --git a/src/test/ref/struct-1.log b/src/test/ref/struct-1.log index eabca9a60..8b1fc17ae 100644 --- a/src/test/ref/struct-1.log +++ b/src/test/ref/struct-1.log @@ -207,7 +207,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - two instances being used. // Upstart diff --git a/src/test/ref/struct-10.log b/src/test/ref/struct-10.log index 4412875e0..c71fceb8d 100644 --- a/src/test/ref/struct-10.log +++ b/src/test/ref/struct-10.log @@ -148,7 +148,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates a problem with pointer sizeof()-rewriting for pointers inside structs // Upstart diff --git a/src/test/ref/struct-11.log b/src/test/ref/struct-11.log index eda8748a6..767142e58 100644 --- a/src/test/ref/struct-11.log +++ b/src/test/ref/struct-11.log @@ -1508,7 +1508,7 @@ Allocated zp ZP_DWORD:41 [ ultoa_append::sub#0 ] Allocated zp ZP_DWORD:45 [ ultoa_append::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Example of a struct containing an array // Upstart diff --git a/src/test/ref/struct-2.log b/src/test/ref/struct-2.log index 3786f1018..965c4f753 100644 --- a/src/test/ref/struct-2.log +++ b/src/test/ref/struct-2.log @@ -228,7 +228,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - two instances being copied (using assignment) // Upstart diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index 06777111c..19d52394f 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -280,7 +280,7 @@ Allocated zp ZP_BYTE:3 [ idx#11 idx#12 ] Allocated zp ZP_BYTE:4 [ idx#4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - passing struct value parameter // Upstart diff --git a/src/test/ref/struct-4.log b/src/test/ref/struct-4.log index cff3b9a13..6153cb116 100644 --- a/src/test/ref/struct-4.log +++ b/src/test/ref/struct-4.log @@ -139,7 +139,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - initializing using a value list // Upstart diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index 2ba91e8d8..e07de9fdb 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -243,7 +243,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - struct return value // Upstart diff --git a/src/test/ref/struct-6.log b/src/test/ref/struct-6.log index 443f30af6..88c1959c8 100644 --- a/src/test/ref/struct-6.log +++ b/src/test/ref/struct-6.log @@ -161,7 +161,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - nesting structs // Upstart diff --git a/src/test/ref/struct-7.log b/src/test/ref/struct-7.log index 3ed436201..b4d97cf15 100644 --- a/src/test/ref/struct-7.log +++ b/src/test/ref/struct-7.log @@ -223,7 +223,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - nesting structs 3 levels // Upstart diff --git a/src/test/ref/struct-8.log b/src/test/ref/struct-8.log index d7fd95dc3..6fd9fc829 100644 --- a/src/test/ref/struct-8.log +++ b/src/test/ref/struct-8.log @@ -173,7 +173,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - nested struct where a sub-struct is assigned out // Upstart diff --git a/src/test/ref/struct-9.log b/src/test/ref/struct-9.log index 33dd5caac..95b99bb4b 100644 --- a/src/test/ref/struct-9.log +++ b/src/test/ref/struct-9.log @@ -177,7 +177,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - nesting structs // Upstart diff --git a/src/test/ref/struct-pos-fill.log b/src/test/ref/struct-pos-fill.log index 91e645149..d4a9608ba 100644 --- a/src/test/ref/struct-pos-fill.log +++ b/src/test/ref/struct-pos-fill.log @@ -453,7 +453,7 @@ Allocated zp ZP_BYTE:6 [ row#12 row#2 ] Allocated zp ZP_BYTE:7 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Example of structs that can be optimized by going planar // https://cc65.github.io/mailarchive/2010-09/8593.html?fbclid=IwAR1IF_cTdyWcFeKU93VfL2Un1EuLjkGh7O7dQ4EVj4kpJzJAj01dbmEFQt8 diff --git a/src/test/ref/struct-ptr-0.log b/src/test/ref/struct-ptr-0.log index 042981484..f80431b48 100644 --- a/src/test/ref/struct-ptr-0.log +++ b/src/test/ref/struct-ptr-0.log @@ -268,7 +268,7 @@ Allocated zp ZP_BYTE:5 [ main::$0 ] Allocated zp ZP_BYTE:6 [ main::$7 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - array of struct // Upstart diff --git a/src/test/ref/struct-ptr-1.log b/src/test/ref/struct-ptr-1.log index 25594b975..588ebb91c 100644 --- a/src/test/ref/struct-ptr-1.log +++ b/src/test/ref/struct-ptr-1.log @@ -321,7 +321,7 @@ Allocated zp ZP_BYTE:5 [ main::$8 ] Allocated zp ZP_BYTE:6 [ main::$17 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - array of struct - near pointer math indexing // Upstart diff --git a/src/test/ref/struct-ptr-10.log b/src/test/ref/struct-ptr-10.log index 413495324..e426744cb 100644 --- a/src/test/ref/struct-ptr-10.log +++ b/src/test/ref/struct-ptr-10.log @@ -298,7 +298,7 @@ Allocated zp ZP_WORD:19 [ main::$15 ] Allocated zp ZP_WORD:21 [ main::$16 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - array with 256+ structs // Upstart diff --git a/src/test/ref/struct-ptr-11.log b/src/test/ref/struct-ptr-11.log index 1d53cd290..bb1f8be42 100644 --- a/src/test/ref/struct-ptr-11.log +++ b/src/test/ref/struct-ptr-11.log @@ -306,7 +306,7 @@ Allocated zp ZP_BYTE:7 [ main::$19 ] Allocated zp ZP_BYTE:8 [ main::$7 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - array of 3-byte structs (required *3) // Upstart diff --git a/src/test/ref/struct-ptr-12-ref.log b/src/test/ref/struct-ptr-12-ref.log index 11dd4e328..8794ab609 100644 --- a/src/test/ref/struct-ptr-12-ref.log +++ b/src/test/ref/struct-ptr-12-ref.log @@ -144,7 +144,7 @@ Allocated zp ZP_BYTE:4 [ main::$1 ] Allocated zp ZP_BYTE:5 [ main::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Reference file for Minimal struct - using address-of // Upstart diff --git a/src/test/ref/struct-ptr-12.log b/src/test/ref/struct-ptr-12.log index fcc121ee6..ed90cb364 100644 --- a/src/test/ref/struct-ptr-12.log +++ b/src/test/ref/struct-ptr-12.log @@ -160,7 +160,7 @@ Allocated zp ZP_BYTE:2 [ main::p_x#0 ] Allocated zp ZP_BYTE:3 [ main::p_y#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - using address-of // Upstart diff --git a/src/test/ref/struct-ptr-13.log b/src/test/ref/struct-ptr-13.log index 7825653bf..9a2c8482d 100644 --- a/src/test/ref/struct-ptr-13.log +++ b/src/test/ref/struct-ptr-13.log @@ -159,7 +159,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - modifying pointer to struct in memory using arrow operator // Upstart diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index cdcb92ae9..c31aa615d 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -224,7 +224,7 @@ Allocated zp ZP_BYTE:2 [ main::p_x#0 ] Allocated zp ZP_BYTE:3 [ main::p_y#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - using address-of and passing it to a function // Upstart diff --git a/src/test/ref/struct-ptr-15.log b/src/test/ref/struct-ptr-15.log index 3b7abedf3..cc4dda6f9 100644 --- a/src/test/ref/struct-ptr-15.log +++ b/src/test/ref/struct-ptr-15.log @@ -428,7 +428,7 @@ Allocated zp ZP_BYTE:9 [ main::y#0 ] Allocated zp ZP_BYTE:10 [ main::idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - using pointers to nested structs // Upstart diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log index 9e073056b..8f3ffb74c 100644 --- a/src/test/ref/struct-ptr-16.log +++ b/src/test/ref/struct-ptr-16.log @@ -524,7 +524,7 @@ Allocated zp ZP_BYTE:13 [ main::$1_y ] Allocated zp ZP_BYTE:14 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates problem with returning a dereferenced pointer to a struct // Upstart diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index c529e2ccf..b56317b55 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -371,7 +371,7 @@ Allocated zp ZP_BYTE:7 [ main::$1_x ] Allocated zp ZP_BYTE:8 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates problem with returning a struct into a dereferenced pointer to a struct // Upstart diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index eb5c92caa..42dc4d078 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -363,7 +363,7 @@ Allocated zp ZP_BYTE:6 [ print::p_y#0 ] Allocated zp ZP_BYTE:7 [ idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates problem with passing struct array element as parameter to call // Upstart diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 216bd3b04..24498848d 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -297,7 +297,7 @@ Allocated zp ZP_BYTE:6 [ main::point_y#0 ] Allocated zp ZP_BYTE:7 [ idx#4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates problem with passing struct pointer deref as parameter to call // Upstart diff --git a/src/test/ref/struct-ptr-2.log b/src/test/ref/struct-ptr-2.log index 2ae699c23..7e438ddde 100644 --- a/src/test/ref/struct-ptr-2.log +++ b/src/test/ref/struct-ptr-2.log @@ -313,7 +313,7 @@ Allocated zp ZP_BYTE:8 [ main::$15 ] Allocated zp ZP_WORD:9 [ main::point_i1#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - array of struct - far pointer math indexing // Upstart diff --git a/src/test/ref/struct-ptr-20.log b/src/test/ref/struct-ptr-20.log index dccd163fc..f40367e9c 100644 --- a/src/test/ref/struct-ptr-20.log +++ b/src/test/ref/struct-ptr-20.log @@ -285,7 +285,7 @@ Allocated zp ZP_WORD:2 [ main::setting#2 main::setting#1 ] Allocated zp ZP_BYTE:4 [ main::idx#2 main::idx#5 main::idx#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates problem with conditions using negated struct references // Upstart diff --git a/src/test/ref/struct-ptr-21.log b/src/test/ref/struct-ptr-21.log index 5c7cd9708..b659d37d7 100644 --- a/src/test/ref/struct-ptr-21.log +++ b/src/test/ref/struct-ptr-21.log @@ -246,7 +246,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates problem with conditions using negated struct references // Upstart diff --git a/src/test/ref/struct-ptr-22.log b/src/test/ref/struct-ptr-22.log index 0e18c53b3..7af33dfc0 100644 --- a/src/test/ref/struct-ptr-22.log +++ b/src/test/ref/struct-ptr-22.log @@ -1011,7 +1011,7 @@ Allocated zp ZP_BYTE:14 [ print_byte::$0 ] Allocated zp ZP_BYTE:15 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Demonstrates problem with missing parenthesis in double-dereferencing // https://gitlab.com/camelot/kickc/issues/270 diff --git a/src/test/ref/struct-ptr-24.log b/src/test/ref/struct-ptr-24.log index be05a344d..4ce2dabc8 100644 --- a/src/test/ref/struct-ptr-24.log +++ b/src/test/ref/struct-ptr-24.log @@ -197,7 +197,7 @@ Allocated zp ZP_WORD:2 [ main::file#2 main::file#1 ] Allocated zp ZP_WORD:4 [ PrintName::file#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/struct-ptr-25.log b/src/test/ref/struct-ptr-25.log index 19d82886e..c1d8007e9 100644 --- a/src/test/ref/struct-ptr-25.log +++ b/src/test/ref/struct-ptr-25.log @@ -232,7 +232,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/struct-ptr-26.log b/src/test/ref/struct-ptr-26.log index b1451aa8c..17642d0e8 100644 --- a/src/test/ref/struct-ptr-26.log +++ b/src/test/ref/struct-ptr-26.log @@ -472,7 +472,7 @@ Allocated zp ZP_BYTE:10 [ print_byte::$0 ] Allocated zp ZP_BYTE:11 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/struct-ptr-3.log b/src/test/ref/struct-ptr-3.log index e2916dc09..dd5c5f182 100644 --- a/src/test/ref/struct-ptr-3.log +++ b/src/test/ref/struct-ptr-3.log @@ -178,7 +178,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - accessing pointer to struct in memory // Upstart diff --git a/src/test/ref/struct-ptr-4.log b/src/test/ref/struct-ptr-4.log index c6b7885af..4dc148b49 100644 --- a/src/test/ref/struct-ptr-4.log +++ b/src/test/ref/struct-ptr-4.log @@ -300,7 +300,7 @@ Allocated zp ZP_BYTE:10 [ main::idx#1 ] Allocated zp ZP_BYTE:11 [ main::idx#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - accessing pointer to struct in memory in a loop // Upstart diff --git a/src/test/ref/struct-ptr-5.log b/src/test/ref/struct-ptr-5.log index 7d101b876..fc7fd82f4 100644 --- a/src/test/ref/struct-ptr-5.log +++ b/src/test/ref/struct-ptr-5.log @@ -359,7 +359,7 @@ Allocated zp ZP_BYTE:9 [ main::$4 ] Allocated zp ZP_BYTE:10 [ main::idx#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - simple linked list implemented using pointers // Upstart diff --git a/src/test/ref/struct-ptr-6.log b/src/test/ref/struct-ptr-6.log index 163480d9e..991e7f8ce 100644 --- a/src/test/ref/struct-ptr-6.log +++ b/src/test/ref/struct-ptr-6.log @@ -178,7 +178,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - accessing pointer to struct in memory using arrow operator // Upstart diff --git a/src/test/ref/struct-ptr-7.log b/src/test/ref/struct-ptr-7.log index 4ee452325..827a7582f 100644 --- a/src/test/ref/struct-ptr-7.log +++ b/src/test/ref/struct-ptr-7.log @@ -299,7 +299,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - direct (constant) array access // Upstart diff --git a/src/test/ref/struct-ptr-8.log b/src/test/ref/struct-ptr-8.log index 42d6f66fb..e8357cb11 100644 --- a/src/test/ref/struct-ptr-8.log +++ b/src/test/ref/struct-ptr-8.log @@ -311,7 +311,7 @@ Allocated zp ZP_BYTE:9 [ main::idx#1 ] Allocated zp ZP_BYTE:10 [ main::idx#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - variable array access // Upstart diff --git a/src/test/ref/struct-ptr-9.log b/src/test/ref/struct-ptr-9.log index b9517128b..a167ef6ce 100644 --- a/src/test/ref/struct-ptr-9.log +++ b/src/test/ref/struct-ptr-9.log @@ -253,7 +253,7 @@ Allocated zp ZP_BYTE:4 [ main::$2 ] Allocated zp ZP_BYTE:5 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal struct - array access with struct value copying (and initializing) // Upstart diff --git a/src/test/ref/subexpr-optimize-0.log b/src/test/ref/subexpr-optimize-0.log index 5d246ba31..e44a84eda 100644 --- a/src/test/ref/subexpr-optimize-0.log +++ b/src/test/ref/subexpr-optimize-0.log @@ -167,7 +167,7 @@ Allocated zp ZP_BYTE:5 [ main::$1 ] Allocated zp ZP_WORD:6 [ main::screen#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimization of identical sub-expressions // The two examples of i*2 is detected as identical leading to optimized ASM where *2 is only calculated once diff --git a/src/test/ref/subexpr-optimize-1.log b/src/test/ref/subexpr-optimize-1.log index 0b1858e8e..c52688a3a 100644 --- a/src/test/ref/subexpr-optimize-1.log +++ b/src/test/ref/subexpr-optimize-1.log @@ -211,7 +211,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // A sub-expression that should not be optimized (+1 to a pointer) // Upstart diff --git a/src/test/ref/subexpr-optimize-2.log b/src/test/ref/subexpr-optimize-2.log index e8c823183..e4e29f82c 100644 --- a/src/test/ref/subexpr-optimize-2.log +++ b/src/test/ref/subexpr-optimize-2.log @@ -193,7 +193,7 @@ Allocated zp ZP_BYTE:9 [ main::$2 ] Allocated zp ZP_BYTE:10 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimization of identical sub-expressions // Upstart diff --git a/src/test/ref/subexpr-optimize-3.log b/src/test/ref/subexpr-optimize-3.log index b2d2682d7..9b86ba98e 100644 --- a/src/test/ref/subexpr-optimize-3.log +++ b/src/test/ref/subexpr-optimize-3.log @@ -209,7 +209,7 @@ Allocated zp ZP_BYTE:10 [ main::$4 ] Allocated zp ZP_BYTE:11 [ main::$5 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimization of identical sub-expressions // Upstart diff --git a/src/test/ref/subexpr-optimize-4.log b/src/test/ref/subexpr-optimize-4.log index 752b52bf7..b3952ddbe 100644 --- a/src/test/ref/subexpr-optimize-4.log +++ b/src/test/ref/subexpr-optimize-4.log @@ -336,7 +336,7 @@ Allocated zp ZP_WORD:8 [ main::screen#1 ] Allocated zp ZP_BYTE:10 [ main::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests optimization of identical sub-expressions // Upstart diff --git a/src/test/ref/summin.log b/src/test/ref/summin.log index 659a8605e..959aa4375 100644 --- a/src/test/ref/summin.log +++ b/src/test/ref/summin.log @@ -297,7 +297,7 @@ Allocated zp ZP_BYTE:11 [ main::s4#0 ] Allocated zp ZP_BYTE:12 [ sum::return#3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/switch-0.log b/src/test/ref/switch-0.log index 96d448064..bca153236 100644 --- a/src/test/ref/switch-0.log +++ b/src/test/ref/switch-0.log @@ -222,7 +222,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#10 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple switch()-statement // Expected output 'd1444d' diff --git a/src/test/ref/switch-1.log b/src/test/ref/switch-1.log index a32370608..4a4b374dd 100644 --- a/src/test/ref/switch-1.log +++ b/src/test/ref/switch-1.log @@ -188,7 +188,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple switch()-statement - including a continue statement for the enclosing loop // Expected output 'a1aa1a' (numbers should be inverted) diff --git a/src/test/ref/switch-2.log b/src/test/ref/switch-2.log index b74a908a9..20023bdca 100644 --- a/src/test/ref/switch-2.log +++ b/src/test/ref/switch-2.log @@ -138,7 +138,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple switch()-statement - not inside a loop // Upstart diff --git a/src/test/ref/switch-4.log b/src/test/ref/switch-4.log index 660d26109..0e6bc3e7c 100644 --- a/src/test/ref/switch-4.log +++ b/src/test/ref/switch-4.log @@ -174,7 +174,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple switch()-statement - switch without default // Expected output " 1 4 " diff --git a/src/test/ref/ternary-1.log b/src/test/ref/ternary-1.log index d0db3d475..055abdea2 100644 --- a/src/test/ref/ternary-1.log +++ b/src/test/ref/ternary-1.log @@ -173,7 +173,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the ternary operator // Upstart diff --git a/src/test/ref/ternary-2.log b/src/test/ref/ternary-2.log index 9e755a036..629f71f13 100644 --- a/src/test/ref/ternary-2.log +++ b/src/test/ref/ternary-2.log @@ -156,7 +156,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the ternary operator - when the condition is constant // Upstart diff --git a/src/test/ref/ternary-3.log b/src/test/ref/ternary-3.log index e3e3a7962..727391202 100644 --- a/src/test/ref/ternary-3.log +++ b/src/test/ref/ternary-3.log @@ -383,7 +383,7 @@ Allocated zp ZP_BYTE:12 [ m2::return#1 ] Allocated zp ZP_BOOL:13 [ cond::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the ternary operator - when the condition is constant // Upstart diff --git a/src/test/ref/ternary-inference.log b/src/test/ref/ternary-inference.log index 371c7b053..f7197e6c8 100644 --- a/src/test/ref/ternary-inference.log +++ b/src/test/ref/ternary-inference.log @@ -194,7 +194,7 @@ Allocated zp ZP_BYTE:3 [ main::$3 ] Allocated zp ZP_BYTE:4 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Type inference into the ternary operator // Upstart diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index 7ed38b8ed..0db1d05f9 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -240,7 +240,7 @@ Allocated zp ZP_BYTE:6 [ main::$0 ] Allocated zp ZP_BYTE:7 [ sum::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments /* Tests that block comments are compiled correctly * Has a bunch of comments that will be moved into the generated ASM diff --git a/src/test/ref/test-comments-loop.log b/src/test/ref/test-comments-loop.log index c07786c04..b9064da1e 100644 --- a/src/test/ref/test-comments-loop.log +++ b/src/test/ref/test-comments-loop.log @@ -117,7 +117,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::b#2 main::b#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 321886fbd..b28f5fa18 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -240,7 +240,7 @@ Allocated zp ZP_BYTE:6 [ main::$0 ] Allocated zp ZP_BYTE:7 [ sum::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that single-line comments are compiled correctly // Has a bunch of comments that will be moved into the generated ASM diff --git a/src/test/ref/test-comments-usage.log b/src/test/ref/test-comments-usage.log index 0f80ec024..e14de0ea2 100644 --- a/src/test/ref/test-comments-usage.log +++ b/src/test/ref/test-comments-usage.log @@ -72,7 +72,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that single-line comments are only included once in the output // Upstart diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index 50e83269c..25b630904 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -2395,7 +2395,7 @@ Allocated zp ZP_BYTE:34 [ print_byte::$0 ] Allocated zp ZP_BYTE:35 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test signed word comparisons // Upstart diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 13a773585..f85647452 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -2085,7 +2085,7 @@ Allocated zp ZP_BYTE:32 [ print_byte::$0 ] Allocated zp ZP_BYTE:33 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/test-comparisons.log b/src/test/ref/test-comparisons.log index e12c18625..9bc64d34b 100644 --- a/src/test/ref/test-comparisons.log +++ b/src/test/ref/test-comparisons.log @@ -3410,7 +3410,7 @@ Allocated zp ZP_BYTE:40 [ print_byte::$0 ] Allocated zp ZP_BYTE:41 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/test-division.log b/src/test/ref/test-division.log index a709f918b..acffa1289 100644 --- a/src/test/ref/test-division.log +++ b/src/test/ref/test-division.log @@ -5085,7 +5085,7 @@ Allocated zp ZP_BYTE:122 [ div8u::return#3 ] Allocated zp ZP_BYTE:123 [ test_8u::res#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test the binary division library // Upstart diff --git a/src/test/ref/test-interrupt-notype.log b/src/test/ref/test-interrupt-notype.log index 367093b3e..b5448c2f8 100644 --- a/src/test/ref/test-interrupt-notype.log +++ b/src/test/ref/test-interrupt-notype.log @@ -132,7 +132,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index 3bdd1a849..a30494e71 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -252,7 +252,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that volatile variables can be both read & written inside & outside interrupts // Currently fails because the modification is optimized away diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index 4a81b1921..db1110821 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -168,7 +168,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ col#2 col#0 col#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/test-interrupt.log b/src/test/ref/test-interrupt.log index 367093b3e..b5448c2f8 100644 --- a/src/test/ref/test-interrupt.log +++ b/src/test/ref/test-interrupt.log @@ -132,7 +132,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/test-kasm-pc.log b/src/test/ref/test-kasm-pc.log index 393f51067..ff12ba601 100644 --- a/src/test/ref/test-kasm-pc.log +++ b/src/test/ref/test-kasm-pc.log @@ -131,7 +131,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test inline KickAssembler code with PC location specification // Upstart diff --git a/src/test/ref/test-kasm.log b/src/test/ref/test-kasm.log index c276eb8d8..0ad5816d0 100644 --- a/src/test/ref/test-kasm.log +++ b/src/test/ref/test-kasm.log @@ -85,7 +85,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test inline KickAssembler code // Upstart diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index 186590376..830040d3b 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -457,7 +457,7 @@ Allocated zp ZP_BYTE:6 [ keyboard_key_pressed::return#0 ] Allocated zp ZP_BYTE:7 [ keyboard_matrix_read::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test keyboard input - test the space bar // Upstart diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index 7d243ac99..4684694dc 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1461,7 +1461,7 @@ Allocated zp ZP_BYTE:27 [ keyboard_matrix_read::return#0 ] Allocated zp ZP_BYTE:28 [ keyboard_get_keycode::return#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test keyboard input - in the keyboard matrix and mapping screen codes to key codes // Upstart diff --git a/src/test/ref/test-lohiconst.log b/src/test/ref/test-lohiconst.log index ca355a7b8..a35f0ef70 100644 --- a/src/test/ref/test-lohiconst.log +++ b/src/test/ref/test-lohiconst.log @@ -153,7 +153,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // PI in u[4.28] format // Upstart diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 140734874..a355a7850 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -1361,7 +1361,7 @@ Allocated zp ZP_BYTE:46 [ print_byte::$0 ] Allocated zp ZP_BYTE:47 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/test-multiply-16bit.log b/src/test/ref/test-multiply-16bit.log index cf48df486..02477fb2f 100644 --- a/src/test/ref/test-multiply-16bit.log +++ b/src/test/ref/test-multiply-16bit.log @@ -5284,7 +5284,7 @@ Allocated zp ZP_BYTE:228 [ mulf_init::$12 ] Allocated zp ZP_BYTE:229 [ mulf_init::$13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test the fast multiplication library // Upstart diff --git a/src/test/ref/test-multiply-8bit.log b/src/test/ref/test-multiply-8bit.log index fc4719064..6fa088f8e 100644 --- a/src/test/ref/test-multiply-8bit.log +++ b/src/test/ref/test-multiply-8bit.log @@ -5511,7 +5511,7 @@ Allocated zp ZP_BYTE:134 [ mulf_init::$12 ] Allocated zp ZP_BYTE:135 [ mulf_init::$13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test the fast multiplication library // Upstart diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index 53be52cca..c34a4604b 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -623,7 +623,7 @@ Allocated zp ZP_WORD:24 [ scrollup1::$5 ] Allocated zp ZP_WORD:26 [ scrollup1::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests different ways of scrolling up the screen // Upstart diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index ec98b9067..c9aea0bb2 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -1088,7 +1088,7 @@ Allocated zp ZP_BYTE:19 [ print_byte::$0 ] Allocated zp ZP_BYTE:20 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests subtracting bytes from signed words // Upstart diff --git a/src/test/ref/test-word-size-arrays.log b/src/test/ref/test-word-size-arrays.log index 91e45a501..76796491b 100644 --- a/src/test/ref/test-word-size-arrays.log +++ b/src/test/ref/test-word-size-arrays.log @@ -314,7 +314,7 @@ Allocated zp ZP_WORD:14 [ main::$7 ] Allocated zp ZP_WORD:16 [ main::$8 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/tetris-npe.log b/src/test/ref/tetris-npe.log index dbd0a2987..97b1daf34 100644 --- a/src/test/ref/tetris-npe.log +++ b/src/test/ref/tetris-npe.log @@ -251,7 +251,7 @@ Allocated zp ZP_BYTE:2 [ counter#3 counter#1 ] Allocated zp ZP_BYTE:3 [ ypos#2 ypos#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // NullPointerException using current_movedown_rate in the main loop // Upstart diff --git a/src/test/ref/textbox.log b/src/test/ref/textbox.log index 455823256..56380427e 100644 --- a/src/test/ref/textbox.log +++ b/src/test/ref/textbox.log @@ -2000,7 +2000,7 @@ Allocated zp ZP_WORD:89 [ draw_window::$15 ] Allocated zp ZP_WORD:91 [ draw_window::$28 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments /* Textbox routine with word wrap for KickC by Scan/Desire */ // Upstart diff --git a/src/test/ref/tod018-problem.log b/src/test/ref/tod018-problem.log index 5de92cd8c..aa0812123 100644 --- a/src/test/ref/tod018-problem.log +++ b/src/test/ref/tod018-problem.log @@ -116,7 +116,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a problem with tod018 not calculating types correctly // Upstart diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index f3fb5b19e..a613bd3f1 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -783,7 +783,7 @@ Allocated zp ZP_BOOL:13 [ main::$0 ] Allocated zp ZP_BOOL:14 [ game_ready::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Adding a missing word-fragment for Travis Fisher // Upstart diff --git a/src/test/ref/true-inline-words.log b/src/test/ref/true-inline-words.log index 1853e0dff..c6233bea3 100644 --- a/src/test/ref/true-inline-words.log +++ b/src/test/ref/true-inline-words.log @@ -227,7 +227,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/type-inference.log b/src/test/ref/type-inference.log index 51a518f58..7af96d8de 100644 --- a/src/test/ref/type-inference.log +++ b/src/test/ref/type-inference.log @@ -144,7 +144,7 @@ Allocated zp ZP_BYTE:3 [ main::$0 ] Allocated zp ZP_BYTE:4 [ main::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test inference of integer types in expressions // Upstart diff --git a/src/test/ref/type-mix.log b/src/test/ref/type-mix.log index fb541581a..9dd77fd5f 100644 --- a/src/test/ref/type-mix.log +++ b/src/test/ref/type-mix.log @@ -159,7 +159,7 @@ Allocated zp ZP_BYTE:4 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:5 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests that mixing types can synthesize a fragment correctly // Upstart diff --git a/src/test/ref/type-signed.log b/src/test/ref/type-signed.log index 380053405..67b7b5168 100644 --- a/src/test/ref/type-signed.log +++ b/src/test/ref/type-signed.log @@ -845,7 +845,7 @@ Allocated zp ZP_BYTE:17 [ print_byte::$0 ] Allocated zp ZP_BYTE:18 [ print_byte::$2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests the special "signed" / "unsigned" without a simple type name // Upstart diff --git a/src/test/ref/typedef-0.log b/src/test/ref/typedef-0.log index bbdd91afe..1cf3f70e8 100644 --- a/src/test/ref/typedef-0.log +++ b/src/test/ref/typedef-0.log @@ -79,7 +79,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/typedef-1.log b/src/test/ref/typedef-1.log index 051a8a89a..c0cf198a8 100644 --- a/src/test/ref/typedef-1.log +++ b/src/test/ref/typedef-1.log @@ -129,7 +129,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/typedef-2.log b/src/test/ref/typedef-2.log index 1ae962d79..9f52a57cc 100644 --- a/src/test/ref/typedef-2.log +++ b/src/test/ref/typedef-2.log @@ -134,7 +134,7 @@ Complete equivalence classes Allocated zp ZP_WORD:2 [ ptr#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/typeid-plus-byte-problem.log b/src/test/ref/typeid-plus-byte-problem.log index 88bf80a11..8ae0af508 100644 --- a/src/test/ref/typeid-plus-byte-problem.log +++ b/src/test/ref/typeid-plus-byte-problem.log @@ -107,7 +107,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test that byte+byte creates a byte - even when there is a value overflow // Upstart diff --git a/src/test/ref/typeid-plus-bytes.log b/src/test/ref/typeid-plus-bytes.log index c5570c988..3d2157401 100644 --- a/src/test/ref/typeid-plus-bytes.log +++ b/src/test/ref/typeid-plus-bytes.log @@ -1158,7 +1158,7 @@ Allocated zp ZP_BYTE:14 [ testUnsignedVals::$5 ] Allocated zp ZP_BYTE:15 [ testUnsignedVals::$6 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test that plus creates the expected type for all legal combinations of bytes (signed/unsigned - constant/variable) // Upstart diff --git a/src/test/ref/typeid-simple.log b/src/test/ref/typeid-simple.log index e1f45803c..a419394df 100644 --- a/src/test/ref/typeid-simple.log +++ b/src/test/ref/typeid-simple.log @@ -454,7 +454,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test typeid() of the different types // Upstart diff --git a/src/test/ref/typeinference-problem.log b/src/test/ref/typeinference-problem.log index f2c3e4cd2..9e344a65d 100644 --- a/src/test/ref/typeinference-problem.log +++ b/src/test/ref/typeinference-problem.log @@ -135,7 +135,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // java.lang.NullPointerException during Pass2TypeInference.java // Upstart diff --git a/src/test/ref/uninitialized.log b/src/test/ref/uninitialized.log index a0c47fd6b..3ba5c3185 100644 --- a/src/test/ref/uninitialized.log +++ b/src/test/ref/uninitialized.log @@ -164,7 +164,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests uninitialized values of variables. // Upstart diff --git a/src/test/ref/unroll-for-min.log b/src/test/ref/unroll-for-min.log index c4eda7291..df660a32b 100644 --- a/src/test/ref/unroll-for-min.log +++ b/src/test/ref/unroll-for-min.log @@ -170,7 +170,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal unrolled ranged for() loop // Upstart diff --git a/src/test/ref/unroll-loop-modifyvar.log b/src/test/ref/unroll-loop-modifyvar.log index afabc6d30..c925b7b56 100644 --- a/src/test/ref/unroll-loop-modifyvar.log +++ b/src/test/ref/unroll-loop-modifyvar.log @@ -387,7 +387,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // An unrolled loop modifying a var used later // Upstart diff --git a/src/test/ref/unroll-screenfill-for-double.log b/src/test/ref/unroll-screenfill-for-double.log index de8d07ac0..3d82f1e29 100644 --- a/src/test/ref/unroll-screenfill-for-double.log +++ b/src/test/ref/unroll-screenfill-for-double.log @@ -1331,7 +1331,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Fills the screen using two unrolled ranged for()-loops // Upstart diff --git a/src/test/ref/unroll-screenfill-for.log b/src/test/ref/unroll-screenfill-for.log index d841bbb57..08cf346c5 100644 --- a/src/test/ref/unroll-screenfill-for.log +++ b/src/test/ref/unroll-screenfill-for.log @@ -848,7 +848,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::x#4 main::x#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Fills the screen using an unrolled inner ranged for()-loop // Upstart diff --git a/src/test/ref/unroll-screenfill-while.log b/src/test/ref/unroll-screenfill-while.log index b8288dc94..5bddf9d47 100644 --- a/src/test/ref/unroll-screenfill-while.log +++ b/src/test/ref/unroll-screenfill-while.log @@ -883,7 +883,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::x#5 main::x#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Fills the screen using an unrolled inner while()-loop // Upstart diff --git a/src/test/ref/unroll-while-min.log b/src/test/ref/unroll-while-min.log index 4272c5f92..c7b0cdde8 100644 --- a/src/test/ref/unroll-while-min.log +++ b/src/test/ref/unroll-while-min.log @@ -177,7 +177,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Minimal unrolled while() loop // Upstart diff --git a/src/test/ref/unused-irq.log b/src/test/ref/unused-irq.log index 8a2cdf9a9..2b8b7f2ca 100644 --- a/src/test/ref/unused-irq.log +++ b/src/test/ref/unused-irq.log @@ -129,7 +129,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Unused interrupts pointing to each other but never used from main loop - should be optimized away // Upstart diff --git a/src/test/ref/unused-method.log b/src/test/ref/unused-method.log index f91a174be..54a96f743 100644 --- a/src/test/ref/unused-method.log +++ b/src/test/ref/unused-method.log @@ -86,7 +86,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/unused-vars.log b/src/test/ref/unused-vars.log index 3b6f8c758..95b216ae2 100644 --- a/src/test/ref/unused-vars.log +++ b/src/test/ref/unused-vars.log @@ -254,7 +254,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // used vars // Upstart diff --git a/src/test/ref/unusedblockproblem.log b/src/test/ref/unusedblockproblem.log index 145ac72dd..e6d321848 100644 --- a/src/test/ref/unusedblockproblem.log +++ b/src/test/ref/unusedblockproblem.log @@ -123,7 +123,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Problem with eliminating unused blocks/vars after the infinite loop (symbol line#2 not removed from symbol table) // Upstart diff --git a/src/test/ref/useglobal.log b/src/test/ref/useglobal.log index a9785418c..cc2e7daa9 100644 --- a/src/test/ref/useglobal.log +++ b/src/test/ref/useglobal.log @@ -79,7 +79,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests procedures using global variables (should not fail) // Upstart diff --git a/src/test/ref/useuninitialized.log b/src/test/ref/useuninitialized.log index 7f6c456d0..583fe996e 100644 --- a/src/test/ref/useuninitialized.log +++ b/src/test/ref/useuninitialized.log @@ -154,7 +154,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Use an uninitialized variable - should use the default value (0)! // Upstart diff --git a/src/test/ref/var-export.log b/src/test/ref/var-export.log index 99f5de060..389748ba9 100644 --- a/src/test/ref/var-export.log +++ b/src/test/ref/var-export.log @@ -88,7 +88,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test the export directive usable for ensuring a data variable is always added to the output - even if it is never used // Upstart diff --git a/src/test/ref/var-forward-problem.log b/src/test/ref/var-forward-problem.log index f5303cd43..9835d1a07 100644 --- a/src/test/ref/var-forward-problem.log +++ b/src/test/ref/var-forward-problem.log @@ -79,7 +79,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates the problem with variable forward references not working // Upstart diff --git a/src/test/ref/var-forward-problem2.log b/src/test/ref/var-forward-problem2.log index 1259e5ccb..bc20e5186 100644 --- a/src/test/ref/var-forward-problem2.log +++ b/src/test/ref/var-forward-problem2.log @@ -114,7 +114,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates the problem with variable forward references not working // Upstart diff --git a/src/test/ref/var-init-problem.log b/src/test/ref/var-init-problem.log index cb9691ef5..62bcdc98b 100644 --- a/src/test/ref/var-init-problem.log +++ b/src/test/ref/var-init-problem.log @@ -93,7 +93,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Variables without initialization causes problems when compiling // Upstart diff --git a/src/test/ref/var-register-noarg.log b/src/test/ref/var-register-noarg.log index 922f6b967..8090d2e9f 100644 --- a/src/test/ref/var-register-noarg.log +++ b/src/test/ref/var-register-noarg.log @@ -146,7 +146,7 @@ Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Allocated zp ZP_BYTE:3 [ main::$1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test declaring a variable as register with no information about which register (for compatibility with standard C) // Upstart diff --git a/src/test/ref/var-register-zp-3.log b/src/test/ref/var-register-zp-3.log index 3ccd65ed1..bd24f830d 100644 --- a/src/test/ref/var-register-zp-3.log +++ b/src/test/ref/var-register-zp-3.log @@ -305,7 +305,7 @@ Allocated zp ZP_BYTE:2 [ print2::i#2 print2::i#1 ] Allocated zp ZP_BYTE:3 [ print2::j#2 print2::j#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test declaring a variable as register on a specific ZP address // Upstart diff --git a/src/test/ref/var-register-zp.log b/src/test/ref/var-register-zp.log index bdcfd51e8..7dfd37915 100644 --- a/src/test/ref/var-register-zp.log +++ b/src/test/ref/var-register-zp.log @@ -211,7 +211,7 @@ Allocated zp ZP_WORD:8 [ main::k#0 ] Allocated zp ZP_BYTE:10 [ main::$4 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test declaring a variable as register on a specific ZP address // Upstart diff --git a/src/test/ref/var-register.log b/src/test/ref/var-register.log index a2a336316..afeb89f4a 100644 --- a/src/test/ref/var-register.log +++ b/src/test/ref/var-register.log @@ -291,7 +291,7 @@ Allocated zp ZP_BYTE:3 [ main::a#2 main::a#1 ] Allocated zp ZP_BYTE:4 [ print::val#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/void-parameter.log b/src/test/ref/void-parameter.log index 29bb22ba5..38ba384e7 100644 --- a/src/test/ref/void-parameter.log +++ b/src/test/ref/void-parameter.log @@ -188,7 +188,7 @@ Complete equivalence classes Allocated zp ZP_BYTE:2 [ idx#12 idx#13 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test that void-parameter works top specify function takes no parameters // Output is "..." in the top left corner of the screen diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index 3e47cbcc1..dfcb518d7 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -1333,7 +1333,7 @@ Allocated zp ZP_BYTE:26 [ findcol::$9 ] Allocated zp ZP_BYTE:27 [ findcol::$11 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // The screen // Upstart diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index 0a29f57d6..05b5d5df6 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -263,7 +263,7 @@ Allocated zp ZP_BYTE:3 [ move_enemy::obj_slot#0 ] Allocated zp ZP_BYTE:4 [ move_enemy::$0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Adding a missing word-fragment for Travis Fisher // Upstart diff --git a/src/test/ref/word-array-0.log b/src/test/ref/word-array-0.log index 3edf1b8c6..1c5aaff32 100644 --- a/src/test/ref/word-array-0.log +++ b/src/test/ref/word-array-0.log @@ -178,7 +178,7 @@ Allocated zp ZP_BYTE:8 [ main::$2 ] Allocated zp ZP_BYTE:9 [ main::$3 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a simple word array // Upstart diff --git a/src/test/ref/word-array-1.log b/src/test/ref/word-array-1.log index 08280ac15..984589e10 100644 --- a/src/test/ref/word-array-1.log +++ b/src/test/ref/word-array-1.log @@ -207,7 +207,7 @@ Allocated zp ZP_BYTE:9 [ main::$1 ] Allocated zp ZP_BYTE:10 [ main::idx#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a simple word array // Upstart diff --git a/src/test/ref/word-array-2.log b/src/test/ref/word-array-2.log index 59ed5cbf3..354d7de0c 100644 --- a/src/test/ref/word-array-2.log +++ b/src/test/ref/word-array-2.log @@ -224,7 +224,7 @@ Allocated zp ZP_WORD:11 [ main::$6 ] Allocated zp ZP_WORD:13 [ main::$9 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests a word-array with 128+ elements // Upstart diff --git a/src/test/ref/word-pointer-compound.log b/src/test/ref/word-pointer-compound.log index 0b2570540..d2a0d0bf8 100644 --- a/src/test/ref/word-pointer-compound.log +++ b/src/test/ref/word-pointer-compound.log @@ -307,7 +307,7 @@ Allocated zp ZP_BYTE:8 [ main::$4 ] Allocated zp ZP_BYTE:9 [ main::$5 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Test word pointer compound assignment // Upstart diff --git a/src/test/ref/word-pointer-iteration-0.log b/src/test/ref/word-pointer-iteration-0.log index eb83f5e6b..0adff3f60 100644 --- a/src/test/ref/word-pointer-iteration-0.log +++ b/src/test/ref/word-pointer-iteration-0.log @@ -191,7 +191,7 @@ Allocated zp ZP_BYTE:6 [ main::$4 ] Allocated zp ZP_BYTE:7 [ main::$5 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple word pointer iteration // Upstart diff --git a/src/test/ref/word-pointer-iteration.log b/src/test/ref/word-pointer-iteration.log index 62449ecec..d69678a63 100644 --- a/src/test/ref/word-pointer-iteration.log +++ b/src/test/ref/word-pointer-iteration.log @@ -214,7 +214,7 @@ Allocated zp ZP_BYTE:10 [ main::$1 ] Allocated zp ZP_BYTE:11 [ main::idx#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple word pointer iteration // Upstart diff --git a/src/test/ref/word-pointer-math-0.log b/src/test/ref/word-pointer-math-0.log index 5e88a8a36..730d3a729 100644 --- a/src/test/ref/word-pointer-math-0.log +++ b/src/test/ref/word-pointer-math-0.log @@ -189,7 +189,7 @@ Allocated zp ZP_BYTE:8 [ main::$4 ] Allocated zp ZP_BYTE:9 [ main::$5 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple word pointer math // Upstart diff --git a/src/test/ref/word-pointer-math-1.log b/src/test/ref/word-pointer-math-1.log index f4c70c269..43a494d96 100644 --- a/src/test/ref/word-pointer-math-1.log +++ b/src/test/ref/word-pointer-math-1.log @@ -110,7 +110,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests word pointer math - subtracting two word pointers // Upstart diff --git a/src/test/ref/word-pointer-math.log b/src/test/ref/word-pointer-math.log index ecc98e171..27a5c1df3 100644 --- a/src/test/ref/word-pointer-math.log +++ b/src/test/ref/word-pointer-math.log @@ -213,7 +213,7 @@ Allocated zp ZP_BYTE:9 [ main::$2 ] Allocated zp ZP_BYTE:10 [ main::idx#2 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Tests simple word pointer math // Upstart diff --git a/src/test/ref/wordexpr.log b/src/test/ref/wordexpr.log index 039a8ae1a..b3dac336d 100644 --- a/src/test/ref/wordexpr.log +++ b/src/test/ref/wordexpr.log @@ -140,7 +140,7 @@ Allocated zp ZP_WORD:2 [ main::b#2 main::b#1 ] Allocated zp ZP_BYTE:4 [ main::i#2 main::i#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Expressions based on bytes but resulting in words are as words - eg. b = b + 40*8; // Upstart diff --git a/src/test/ref/zeropage-detect-advanced.log b/src/test/ref/zeropage-detect-advanced.log index 3f855aa31..e008139fb 100644 --- a/src/test/ref/zeropage-detect-advanced.log +++ b/src/test/ref/zeropage-detect-advanced.log @@ -107,7 +107,7 @@ Complete equivalence classes Allocated zp ZP_DWORD:2 [ main::t#0 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Illustrates a problem where absolute addressing is used for zeropage-access // This is caused by the compiler believing the pointer is into memory" (not knowing the upper part is 0x00 ) diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index bed738dd8..3a6a0a68e 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -330,7 +330,7 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Attempt to store and use a sinus on zeropage // $00/$11 is carefully chosen to be $ff - which plays well with the processor port diff --git a/src/test/ref/zpparammin.log b/src/test/ref/zpparammin.log index 8dda41790..6d1b31ef7 100644 --- a/src/test/ref/zpparammin.log +++ b/src/test/ref/zpparammin.log @@ -370,7 +370,7 @@ Allocated zp ZP_BYTE:15 [ sum::$0 ] Allocated zp ZP_BYTE:16 [ sum::return#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic" diff --git a/src/test/ref/zpptr.log b/src/test/ref/zpptr.log index 57532c837..5e1da538f 100644 --- a/src/test/ref/zpptr.log +++ b/src/test/ref/zpptr.log @@ -255,7 +255,7 @@ Allocated zp ZP_WORD:7 [ main::w#0 ] Allocated zp ZP_WORD:9 [ main::zpptr2#1 ] INITIAL ASM -Target platform is c64basic +Target platform is c64basic / 6502X // File Comments // Upstart .pc = $801 "Basic"